Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-获取Linux系统的MAC地址_Java_Macos_Crash_Mac Address - Fatal编程技术网

Java-获取Linux系统的MAC地址

Java-获取Linux系统的MAC地址,java,macos,crash,mac-address,Java,Macos,Crash,Mac Address,我正在尝试使用以下代码获取linux系统的MAC地址: try { ip = InetAddress.getLocalHost(); NetworkInterface network = NetworkInterface.getByInetAddress(ip); byte[] mac = network.getHardwareAddress(); // System.out.print("Current MAC address: "); for (int i = 0; i

我正在尝试使用以下代码获取linux系统的MAC地址:

try {
  ip = InetAddress.getLocalHost();
  NetworkInterface network = NetworkInterface.getByInetAddress(ip);
  byte[] mac = network.getHardwareAddress();
  // System.out.print("Current MAC address: ");
  for (int i = 0; i < mac.length; i++) {
    is = is + Integer.parseInt(
      String.format("%02X%s", mac[i], (i < mac.length - 1) ? "" : ""),16);
  }
} catch (UnknownHostException e) {
  e.printStackTrace();
} catch (SocketException e) {
  e.printStackTrace();
}
试试看{
ip=InetAddress.getLocalHost();
NetworkInterface网络=NetworkInterface.getByInetAddress(ip);

字节[]mac=network.getHardwareAddress(); //系统输出打印(“当前MAC地址:”); for(int i=0;i

但它只是崩溃了。。。有人知道原因吗?

从您的评论中,很明显
网络
空的
,这意味着
getByInetAddress()
找不到具有该IP地址的接口(请参阅JavaDocs:)。

您可能有多个网络接口,我不会指望接口的名称。我建议你检查一下所有的接口,寻找一个有MAC地址的接口。 您可以将此示例用作基线:

try {

        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
        while(networkInterfaces.hasMoreElements())
        {
            NetworkInterface network = networkInterfaces.nextElement();
            System.out.println("network : " + network);
            byte[] mac = network.getHardwareAddress();
            if(mac == null)
            {
                System.out.println("null mac");             
            }
            else
            {
                System.out.print("MAC address : ");

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < mac.length; i++)
                {
                    sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
                }
                System.out.println(sb.toString());  
                break;
            }
        }
    } catch (SocketException e){

        e.printStackTrace();

    }
试试看{
枚举networkInterfaces=NetworkInterface.getNetworkInterfaces();
while(networkInterfaces.hasMoreElements())
{
NetworkInterface network=networkInterfaces.nextElement();
System.out.println(“网络:+网络”);

字节[]mac=network.getHardwareAddress(); 如果(mac==null) { System.out.println(“空mac”); } 其他的 { 系统输出打印(“MAC地址:”); StringBuilder sb=新的StringBuilder(); for(int i=0;i
只是对Guy代码的一个小小修改:

public String searchForMac() throws SocketException {
    String firstInterface = null;        
    Map<String, String> addressByNetwork = new HashMap<>();
    Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();

    while(networkInterfaces.hasMoreElements()){
        NetworkInterface network = networkInterfaces.nextElement();

        byte[] bmac = network.getHardwareAddress();
        if(bmac != null){
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < bmac.length; i++){
                sb.append(String.format("%02X%s", bmac[i], (i < bmac.length - 1) ? "-" : ""));        
            }

            if(sb.toString().isEmpty()==false){
                addressByNetwork.put(network.getName(), sb.toString());
                System.out.println("Address = "+sb.toString()+" @ ["+network.getName()+"] "+network.getDisplayName());
            }

            if(sb.toString().isEmpty()==false && firstInterface == null){
                firstInterface = network.getName();
            }
        }
    }

    if(firstInterface != null){
        return addressByNetwork.get(firstInterface);
    }

    return null;
}
公共字符串searchForMac()抛出SocketException{
字符串firstInterface=null;
Map addressByNetwork=newhashmap();
枚举networkInterfaces=NetworkInterface.getNetworkInterfaces();
while(networkInterfaces.hasMoreElements()){
NetworkInterface network=networkInterfaces.nextElement();
字节[]bmac=network.getHardwareAddress();
如果(bmac!=null){
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
这段代码已经在Windows、Linux(Ubuntu)和MacOSX上测试成功


因为网络可以是空的,所以我忽略所有空的情况,也忽略空的地址。我认为,如果我们不这样做,我们就会看到崩溃。我选择了第一个找到的地址,它可以工作,但可能是错误的,所以只需测试它。

当它崩溃时,您会收到什么错误消息?是的,我已经检查过这部分了。如果我只是把is=is+Integer.parseInt([mac地址],这里是16);代码工作于finebyte[]mac=network.getHardwareAddress();“系统”没有MAC地址。网络接口不起作用。一个系统中可以有多个NIC,因此也可以有多个MAC地址。-facepalm,did NetworkInterface network=NetworkInterface.getByName(“eth0”);它立刻就起作用了。谢谢:DFYI