server.jar设置为开机自启动,启动时会执行getLinuxMac()方法获取本机Mac地址:
private static String getLinuxMac() {
StringBuffer sb = new StringBuffer();
try {
String str = "ifconfig | grep ether | sed -n 1p | awk -F' ' '{print $2}'";
String[] cmd = new String[] { "/bin/sh", "-c", str };
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
Logx.error(e);
}
return sb.toString().replace(":", "-").toUpperCase();
}
遇到的问题:
虽然server.jar能正常启动但getLinuxMac()获取到的Mac为空,必须重启这个server.jar才能获取到Mac,是不是Linux启动时还有什么东西没加载完使得上面的代码无法获取到Mac呢?
用 NetworkInterface
试试:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
public class App{
public static void main(String[] args){
InetAddress ip;
try {
ip = InetAddress.getLocalHost();
System.out.println("Current IP address : " + ip.getHostAddress());
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();
System.out.print("Current 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());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e){
e.printStackTrace();
}
}
}