【发布时间】:2013-06-21 22:39:18
【问题描述】:
我需要使用 Java 从 Ubuntu 获取计算机 IP。我尝试使用 InetAddress.getLocalHost.getHostAddress().toString(); 但它返回 127.0.0.1 。我正在寻找解决方案,发现了这段代码:
NetworkInterface ni = NetworkInterface.getByName("eth0");
Enumeration<InetAddress> inetAddresses = ni.getInetAddresses();
while(inetAddresses.hasMoreElements()) {
InetAddress ia = inetAddresses.nextElement();
if(!ia.isLinkLocalAddress()) {
System.out.println("IP: " + ia.getHostAddress());
}
}
}
此代码对我有用,但问题是当计算机使用“eth1”接口或计算机可以使用无线适配器连接到网络(wlan0)时。在那种情况下,程序将失败。你们能告诉我从 UNIX 系统获取 IP 的安全方法吗?问候。
【问题讨论】:
-
“安全”是指“可靠”而不是“危险”的反义词,对吧?
-
是的。我的意思是适用于所有 UNIX 系统的方法。如果机器使用除“eth0”之外的其他接口,我的方法是危险的,因为 Window InetAddress.getLocalHost.getHostAddress().toString() 正在工作。
-
如果计算机在家庭无线防火墙/路由器后面使用怎么办?这些路由器通常将 192.168.1.x 之类的地址分配给家中的计算机——并多路复用分配给家中的实际互联网地址。如果防火墙允许并路由传入,则计算机的地址 (192.168.1.101) 可能不是可以在 Internet (32.78.23.4) 上联系计算机的地址。
-
除了一台机器可以使用多个网络接口,每个网络接口可以分配多个ip地址,还有一个问题,如果你想要本地地址(例如,决定服务器进程应该绑定到哪个地址)或公共互联网地址(为了知道对等方应该连接到哪个地址)。
-
一些计算机不会知道他们的外部 IP - 尝试向远程服务器发送请求
标签: java unix inetaddress