前面我们运维小伙在部署的时候,发现在真实服务器获取不到mac地址或者获取不到指定类型的mac地址,写程序记录如下

import com.google.common.base.Strings;
import java.net.NetworkInterface;
import java.util.Enumeration;
public class MacHelper {
private static MacHelper instance;
public static MacHelper getInstance() {
if (instance == null) {
synchronized (MacHelper.class) {
instance = new MacHelper();
}
}
return instance;
}
/**
* 获取本地IP
*
* @return String
*/
public String getFirstLocalMac() {
String startName = "eth", symbol = "";
return getFirstLocalMac(startName, symbol);
}
/**
* 获取本地IP
*
* @return String
*/
public String getFirstLocalMac(String startName, String symbol) {
try {
Enumeration enumeration = NetworkInterface.getNetworkInterfaces();
while (enumeration.hasMoreElements()) {
NetworkInterface networkInterface = enumeration.nextElement();
if (networkInterface == null) {
continue;
}
if (!(networkInterface.getName().equals(startName) ||
networkInterface.getName().startsWith(startName))) {
continue;
}
//获取网卡,获取地址
byte[] mac = networkInterface.getHardwareAddress();
if (mac == null || mac.length <= 0) {
continue;
}
StringBuilder sb = new StringBuilder();
int i = 0;
for (byte b : mac) {
//字节转换为整数
int temp = b & 0xff;
String str = Integer.toHexString(temp);
if (!Strings.isNullOrEmpty(symbol) && i == 0) {
sb.append(symbol);
}
if (str.length() == 1) {
sb.append("0").append(str);
} else {
sb.append(str);
}
i++;
}
return sb.toString().toLowerCase();
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}