2011-11-01 83 views
1

我正在構建一個java應用程序,該應用程序獲取用戶的mac地址並將其與數據庫中的對應值(安全功能)進行比較。但問題發生在Mac OS上,當我發現MAC地址列表具有共同的價值(例如:在我的MAC地址列表的MAC地址是:001C42000009,001C42000008,E0F8474267B6(wifi),70CD60F1A5C1(以太網)) 有沒有一個方法來知道在Mac OS上獲取Mac地址時將導致的所有這些常見值。使用java在mac os上獲取常用mac地址

謝謝。

回答

0

http://standards.ieee.org/develop/regauth/oui/public.html您可以使用MAC地址的前3個字節查找供應商,00-1C-42點「的Parallels公司「 (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(); 
    } 

} 
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(); 
    } 
}