Java 为什么我会得到一个空白的MAC地址?

Java 为什么我会得到一个空白的MAC地址?,java,networking,mac-address,Java,Networking,Mac Address,以下程序用于打印我的节点的MAC地址。但它打印的是空白。我检查了它是否为空,但它不是空的。为什么我会得到一个空白的MAC地址?我犯了什么错误 import java.net.InetAddress; import java.net.NetworkInterface; class Tester { public static void main(String args[]) { try { InetAddress address = InetAddress.getByName

以下程序用于打印我的节点的MAC地址。但它打印的是空白。我检查了它是否为空,但它不是空的。为什么我会得到一个空白的MAC地址?我犯了什么错误

import java.net.InetAddress;
import java.net.NetworkInterface;

class Tester {
public static void main(String args[]) {
    try {
      InetAddress address = InetAddress.getByName("localhost");
      NetworkInterface ni = NetworkInterface.getByInetAddress(address);
      byte mac[] = ni.getHardwareAddress();
      if(mac == null) {
        System.out.println("Mac address is null");
      } else {
        System.out.println("Else block!");
        String macAdd = new String(mac);
        System.out.println(macAdd);
      }

    } catch(Exception exc) {
       exc.printStackTrace();
    }
}
}

注意:
mac==null
为假。

我从未见过带有mac地址的
localhost
环回接口。我怀疑这不是很有用

System.out.println(Arrays.toString(mac));
印刷品

[]

这并不奇怪,因为它只是一个虚拟软件设备。

我从未见过带有MAC地址的
localhost
环回接口。我怀疑这不是很有用

System.out.println(Arrays.toString(mac));
印刷品

[]

这并不奇怪,因为它只是一个虚拟软件设备。

如果你检查Java 7,你会注意到有
getLocalhost()
,这可能是你想要的。

如果你检查Java 7,你会注意到有
getLocalhost()
这可能是您想要的。

您应该通过
InetAddress.getLocalHost()获取localhost
而不是
InetAddress.getByName(“localhost”)。有关问题的解决方案,请参阅下面的示例

import java.net.InetAddress;
import java.net.NetworkInterface;

public class Tester {
    public static void main(String args[]) {
        try {
            InetAddress address = InetAddress.getLocalHost();
            NetworkInterface ni = NetworkInterface.getByInetAddress(address);
            byte mac[] = ni.getHardwareAddress();
            if (mac == null) {
                System.out.println("Mac address is null");
            } else {
                System.out.println("Else block!");
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < mac.length; i++) {
                    sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
                }
                String macAdd = new String(sb);
                System.out.println(macAdd);
            }

        } catch (Exception exc) {
            exc.printStackTrace();
        }
    }
}
注意:-

请记住,将接收到的mac地址转换为可读的十六进制格式非常重要,因此我编写了以下代码块。如果您不这样做,那么您将收到垃圾文本作为
D-üñ212w

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < mac.length; i++) {
                sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
            }
            String macAdd = new String(sb);
StringBuilder sb=新建StringBuilder();
for(int i=0;i
您应该通过
InetAddress.getLocalHost()获取localhost
而不是
InetAddress.getByName(“localhost”)。有关问题的解决方案,请参阅下面的示例

import java.net.InetAddress;
import java.net.NetworkInterface;

public class Tester {
    public static void main(String args[]) {
        try {
            InetAddress address = InetAddress.getLocalHost();
            NetworkInterface ni = NetworkInterface.getByInetAddress(address);
            byte mac[] = ni.getHardwareAddress();
            if (mac == null) {
                System.out.println("Mac address is null");
            } else {
                System.out.println("Else block!");
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < mac.length; i++) {
                    sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
                }
                String macAdd = new String(sb);
                System.out.println(macAdd);
            }

        } catch (Exception exc) {
            exc.printStackTrace();
        }
    }
}
注意:-

请记住,将接收到的mac地址转换为可读的十六进制格式非常重要,因此我编写了以下代码块。如果您不这样做,那么您将收到垃圾文本作为
D-üñ212w

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < mac.length; i++) {
                sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
            }
            String macAdd = new String(sb);
StringBuilder sb=新建StringBuilder();
for(int i=0;i根据“嗯,对“localhost”作出反应的接口通常是环回设备,它没有MAC地址,所以这可能是你的原因。”

根据“嗯,对“localhost”作出反应的接口通常是环回设备,它没有MAC地址,所以这可能是你的原因。”

MAC地址是一个字节数组,第一个字节可以是零


要打印它,您需要将其转换为可打印的字母数字(例如十六进制)格式,例如使用String.format,如所示。

MAC地址是一个字节数组,第一个字节可能为零


要打印它,您需要将其转换为可打印的字母数字(例如十六进制)格式,例如使用中所示的String.format。

如果我将
localhost
替换为我的网络IP
192.168.43.187
我会看到这一点:
p±▀⌡它是什么?它是由你的mac地址变成的字符。如果你知道这些字符的ascii码,你可以算出mac地址,或者你可以按照我建议的方式打印出来,如果你想看到数字的话如果我用我的网络IP替换
localhost
192.168.43.187
我会看到这个:
p±▀⌡它是什么?它是由你的mac地址变成的字符。如果你知道这些字符的ascii码,你可以算出mac地址,或者你可以按照我建议的方式打印出来,如果你想看到数字的话你能给我解释一下这个步骤吗?“-”:“)
这是用来将你收到的mac地址格式化成可读的十六进制格式,如果你不这样做,你的输出就会是那样的
Düñ212w
。你能给我解释一下这个步骤吗
String.format(%02X%s),mac[i],(i
调用此函数将接收到的mac地址格式化为可读的十六进制格式,如果不这样做,则输出将是
Düñ212w