我有以下代码来提取我的Ubuntu设备的MAC地址&我将MAC地址放在数据库中。此代码在Windows PC中工作正常,因为它在Ubuntu设备中不起作用。数据库字段为空。我的应用程序是一个Web应用程序我正在接受战争文件&把它放在我的Ubuntu设备中的tomcat服务器中。
public static String getMACAddress()
{
StringBuffer strMac = new StringBuffer();
try {
InetAddress address = InetAddress.getLocalHost();
// InetAddress address = InetAddress.getByName("192.168.46.53");
/*
* Get NetworkInterface for the current host and then read the
* hardware address.
*/
NetworkInterface ni = NetworkInterface.getByInetAddress(address);
if (ni != null) {
byte[] mac = ni.getHardwareAddress();
if (mac != null) {
/*
* Extract each array of mac address and convert it to hexa
* with the following format 08-00-27-DC-4A-9E.
*/
for (int i = 0; i < mac.length; i++) {
System.out.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
strMac.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "" : ""));
}
} else {
System.out.println("Address doesn't exist or is not accessible.");
}
} else {
System.out.println("Network Interface for the specified address is not found.");
}
} catch (Exception e) {
}
return strMac.toString();
}
我也提到了这个(Java - Getting MAC address of Linux system)链接。
我的Ubuntu设备同时使用LAN&amp;无线连接。
希望我的问题很明确。请帮忙 ... 谢谢
答案 0 :(得分:2)
这几乎是Why does java NetworkInterface.getHardwareAddress return empty byte array on Windows?的副本,但它反转了Linux / Windows,所以我想我会尝试回答它。
看起来你在地址变量中得到了loopback接口,它没有注册为具有硬件地址,因为它与硬件没有关联。尝试确保您获得与网络硬件相关联的InetAddress。链接的线程有一个迭代列表的例子。