使用java获取mac os上的公共mac地址

时间:2011-11-01 10:48:38

标签: java osx-lion

我正在构建一个java应用程序,它获取用户的mac地址,并将其与数据库中的对应值(安全功能)进行比较。但是当我发现mac地址列表有共同的值时,问题发生在mac os上(例如:在我的mac上,mac地址列表是:001C42000009,001C42000008,E0F8474267B6(wifi),70CD60F1A5C1(以太网)) 有没有办法知道在Mac OS上获取Mac地址时会产生的所有这些常见值。

谢谢。

2 个答案:

答案 0 :(得分:0)

我相信这样的事情会为你做的工作

try {
    InetAddress []addresses = InetAddress.getAllByName(InetAddress.getLocalHost().getHostName());
    /*
     * Get NetworkInterfaces for current host and read hardware addresses.
     */
    for(int j=0; j< addresses.length; i++) {
            System.out.format("%02X%s", mac[i], (i < addresses.length – 1) ? "-" : "");
        }
        System.out.println();
    }
}

答案 1 :(得分:0)

http://standards.ieee.org/develop/regauth/oui/public.html,您可以使用MAC地址的前3个字节查找供应商,00-1C-42指向“Parallels,Inc。” (http://www.parallels.com)。您使用的是他们的虚拟化软件吗?尝试java.net.NetworkInterface.isVirtual()为此地址返回的内容,如果没有用,那么可能需要一些丑陋的过滤器(例如,基于地址模式)

import java.net.NetworkInterface;
import java.util.Enumeration;

public class NetworkInterfaceTest {

  public static void main(String args[]) {
    try {
      Enumeration<NetworkInterface> ie = NetworkInterface.getNetworkInterfaces();
      while (ie.hasMoreElements()) {
        NetworkInterface i = ie.nextElement();
        System.out.println(i.getDisplayName() + " [" + i.getName() + "]: " + formatAddress(i.getHardwareAddress()) + "; isVirtual=" + i.isVirtual());
      }
    } catch (Exception e){ 
      e.printStackTrace();
    }
  }

  private static String formatAddress(byte[] address) {
    if (address == null) {
      return null;
    }

    StringBuilder ret = new StringBuilder(address.length * 2);
    for (byte b : address) {
      if (ret.length() > 0) {
        ret.append('-');
      }

      String bs = Integer.toHexString(b & 0x000000FF).toUpperCase();
      if (bs.length() < 2) {
        ret.append('0');
      }
      ret.append(bs);
    }

    return ret.toString();
  }

}