InetAddress.getLocalHost()。getHostAddress()返回127.0.1.1 [英] InetAddress.getLocalHost().getHostAddress() is returning 127.0.1.1
问题描述
我的问题类似于这个问题。我想获得我的机器的真实IP(不是127.0.0.1),但奇怪的是,我的Ubuntu中的以下代码返回127.0.1.1
My question is similar to this question . I want to get the real IP of my machine (not 127.0.0.1) but strange, the below code in my Ubuntu is returning 127.0.1.1
InetAddress.getLocalHost().getHostAddress()
以下是我的完整代码,最初发布在此处
Below is my complete code, originally posted in SO at here
public String getMachineIP() {
try {
String hostIP = InetAddress.getLocalHost().getHostAddress();
if (!hostIP.equals("127.0.0.1")) {
return hostIP;
}
/*
* Above method often returns "127.0.0.1", In this case we need to
* check all the available network interfaces
*/
Enumeration<NetworkInterface> nInterfaces = NetworkInterface
.getNetworkInterfaces();
while (nInterfaces.hasMoreElements()) {
Enumeration<InetAddress> inetAddresses = nInterfaces
.nextElement().getInetAddresses();
while (inetAddresses.hasMoreElements()) {
String address = inetAddresses.nextElement()
.getHostAddress();
if (!address.equals("127.0.0.1")) {
return address;
}
}
}
} catch (UnknownHostException e1) {
System.err.println("Error = " + e1.getMessage());
} catch (SocketException e1) {
System.err.println("Error = " + e1.getMessage());
}
return null;
}
上面的代码返回127.0.1.1而 ifconfig我的Ubuntu机器上的
给出了以下输出
The above code is returning 127.0.1.1 whereas ifconfig
on my Ubuntu machine is giving below output
root@dell:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:21:70:b7:30:cd
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:28 Base address:0x6000
eth1 Link encap:Ethernet HWaddr 00:22:68:d3:02:b5
inet addr:192.168.2.112 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::222:68ff:fed3:2b5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:23827 errors:0 dropped:0 overruns:0 frame:32515
TX packets:23200 errors:46 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:22027719 (22.0 MB) TX bytes:3778268 (3.7 MB)
Interrupt:19
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:402 errors:0 dropped:0 overruns:0 frame:0
TX packets:402 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:29197 (29.1 KB) TX bytes:29197 (29.1 KB)
我在主机文件中找到127.0.1.1条目(对我来说很奇怪,因为我从未更新过这个文件)
I found 127.0.1.1 entry in host file (Strange to me, since I never updated this file)
root@dell:~# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 dell
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
如何获得我机器的真实IP(不是127.0.0.1)?我只关注IPv4地址,不包括 127.0.0.0/8子网
How to get the real IP of my machine (not 127.0.0.1)? I am looking ONLY for IPv4 address excluding 127.0.0.0/8 subnet
推荐答案
您需要使用 NetworkInterface
来枚举网络接口; InetAddress.getLocalHost()
始终返回环回。这并不能解释为什么你得到127.0.1.1而不是127.0.0.1,但由于那种方法没有做你想做的事情,所以它似乎并不特别相关。请参阅: http://docs.oracle .com / javase / 6 / docs / api / java / net / NetworkInterface.html#getInetAddresses()
You'll need to use NetworkInterface
to enumerate network interfaces; InetAddress.getLocalHost()
always returns loopback. This doesn't explain why you get 127.0.1.1 instead of 127.0.0.1, but since that method doesn't do what you're trying to do, it doesn't seem especially pertinent. See: http://docs.oracle.com/javase/6/docs/api/java/net/NetworkInterface.html#getInetAddresses()
这篇关于InetAddress.getLocalHost()。getHostAddress()返回127.0.1.1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!