最近写了一个小功能,需要获取本地IP地址,直接用:InetAddress.getLocalHost().getHostAddress()
来获取
Windows上能用,结果换到Linux环境不能使用,索性写个Windows和Linux通用的工具类
拿到所有的mac地址:NetworkInterface.getNetworkInterfaces();
然后去遍历所有的mac地址,取IPv4的地址(排除掉回环地址)
具体代码:
public static String getLocalIp() {
InetAddress inetAddress = null;
boolean isFind = false; // 返回标识
Enumeration<NetworkInterface> networkInterfaceLists = null;
try {
// 获取网络接口
networkInterfaceLists = (Enumeration<NetworkInterface>) NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
e.printStackTrace();
}
while (networkInterfaceLists.hasMoreElements()) {
NetworkInterface networkInterface = (NetworkInterface) networkInterfaceLists.nextElement();
Enumeration<InetAddress> ips = networkInterface.getInetAddresses();
// 遍历所有ip,获取本地地址中不是回环地址的ipv4地址
while (ips.hasMoreElements()) {
inetAddress = (InetAddress) ips.nextElement();
if (inetAddress instanceof Inet4Address && inetAddress.isSiteLocalAddress()
&& !inetAddress.isLoopbackAddress()) {
isFind = true;
break;
}
}
if (isFind) {
break;
}
}
return inetAddress == null ? "" : inetAddress.getHostAddress();
}
OK,完成!