最近写了一个针对MQ的日志错误记录,因为是微服务的架构,所以要求把服务的Ip地址也记录下,原本以为可以使用InetAddress.getLocalHost();
直接获取,但使用后发现在linux下会直接获取localhost,也就是127.0.0.1,所以写了这篇文章,记录一下解决方法
String localIp = "127.0.0.1";
try
{
out: for (Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); interfaces
.hasMoreElements();)
{
NetworkInterface networkInterface = interfaces.nextElement();
//屏蔽回环接口,虚拟子接口,非正常工作接口
if (networkInterface.isLoopback() || networkInterface.isVirtual() || !networkInterface.isUp())
{
continue;
}
String name = networkInterface.getName();
//屏蔽本地回环网卡
if (!name.contains("docker") && !name.contains("lo"))
{
Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
while (inetAddresses.hasMoreElements())
{
InetAddress address = inetAddresses.nextElement();
localIp = address.getHostAddress();
if (!localIp.contains("::") && !localIp.contains("0:0:") && !localIp.contains("fe80"))
{
break out;
}
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}