Java-获取Linux系统的MAC地址
我正在尝试使用以下代码获取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
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