InetAddress.getLocalHost().getHostAddress()
很不幸,是127.0.0.1,不是我们想要的局域网地址,还发现此方法只是简单的获得 /etc/hosts文件信息,不信你试试看,把文件里的127.0.0.1改为其它IP,上述的代码输出的就是改过后的内容。
InetAddress.getLocalHost().getHostName()是读取文件/etc/hostname。不是我们需要的。
有个解决办法,使用NetworkInterface,代码:
Enumeration
try {
netInterfaces = NetworkInterface.getNetworkInterfaces();
while (netInterfaces.hasMoreElements()) {
NetworkInterface ni = netInterfaces.nextElement();
System.out.println("DisplayName:" + ni.getDisplayName());
System.out.println("Name:" + ni.getName());
Enumeration
while (ips.hasMoreElements()) {
System.out.println("IP:"
+ ips.nextElement().getHostAddress());
}
}
} catch (Exception e) {
e.printStackTrace();
}
(格式太难看,copy之,格式化之,ctrl+shift+F)
这里需要注意的是输出了所有的网络接口信息,包括回环接口(lo),以及IPv6信息。下面作些过滤,只取出eth0的ipv4地址:
Enumeration
try {
netInterfaces = NetworkInterface.getNetworkInterfaces();
while (netInterfaces.hasMoreElements()) {
NetworkInterface ni = netInterfaces.nextElement();
String name = ni.getName();
if (name.equals("eth0")) {//若有多网卡清调整程序
Enumeration
while (ips.hasMoreElements()) {
InetAddress ipv4 = ips.nextElement();
if (ipv4 instanceof Inet4Address) {
System.out.println("IP:"+ ipv4.getHostAddress());
break;
}
}
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
没有评论:
发表评论