Java InetAddress.getLocalHost().getHostAddress()返回无效的IP地址
当我说无效时,我指的是无效。我得到的IP地址与我的机器的任何接口都没有关联。我知道网站上也有类似的问题,但更多的是关于人们获取他们不想要的接口地址(例如,127.0.0.1而不是LAN IP),但事实并非如此。我想知道这个IP是从哪里来的,我如何摆脱它 无论何时调用Java InetAddress.getLocalHost().getHostAddress()返回无效的IP地址,java,networking,ip,Java,Networking,Ip,当我说无效时,我指的是无效。我得到的IP地址与我的机器的任何接口都没有关联。我知道网站上也有类似的问题,但更多的是关于人们获取他们不想要的接口地址(例如,127.0.0.1而不是LAN IP),但事实并非如此。我想知道这个IP是从哪里来的,我如何摆脱它 无论何时调用InetAddress.getLocalHost().getHostAddress(),我都会得到10.65.90.34。这不是从我的路由器、ISP、VPN分配的IP。ifconfig的输出中没有提到此IP。我不知道这个IP是从哪里来
InetAddress.getLocalHost().getHostAddress()
,我都会得到10.65.90.34。这不是从我的路由器、ISP、VPN分配的IP。ifconfig
的输出中没有提到此IP。我不知道这个IP是从哪里来的。有人建议列举一个不同问题上的所有接口,下面是我这样做时得到的结果:
public void localIPTest() throws UnknownHostException, SocketException {
String hostAddress = InetAddress.getLocalHost().getHostAddress();
System.out.println(hostAddress);
Enumeration Interfaces = NetworkInterface.getNetworkInterfaces();
while (Interfaces.hasMoreElements()) {
NetworkInterface Interface = (NetworkInterface) Interfaces.nextElement();
System.out.println(Interface.getDisplayName());
Enumeration Addresses = Interface.getInetAddresses();
while (Addresses.hasMoreElements()) {
InetAddress Address = (InetAddress) Addresses.nextElement();
System.out.println(Address.getHostAddress());
}
}
}
这将产生:
10.65.90.34
utun0
fe80:0:0:0:a3c9:7561:3c37:3943%utun0
awdl0
fe80:0:0:0:b458:bbff:feac:2ee8%awdl0
utun1
172.20.97.60
en0
fe80:0:0:0:c88:b30a:16fc:4dbe%en0
192.168.0.106
lo0
fe80:0:0:0:0:0:0:1%lo0
0:0:0:0:0:0:0:1
127.0.0.1
只有当我连接到公司的VPN网络时,才会发生此问题。然而,这个IP并不是来自VPN接口(utun1)——正如上面172.xx的输出所示
我试着看看这个IP是否来自underyling操作系统(在我的例子中是macOS),但情况也不是这样
$ ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*'
inet 127.0.0.1
inet 192.168.0.106
inet 172.20.97.60
$ curl ifconfig.me
183.82.20.54
建议的traceroute 8.8.8.8
输出:
$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
1 192.168.0.1 (192.168.0.1) 2.317 ms 1.067 ms 0.847 ms
2 broadband.actcorp.in (106.51.140.1) 2.220 ms 2.585 ms 2.501 ms
3 broadband.actcorp.in (202.83.20.173) 3.120 ms 2.199 ms 4.124 ms
4 broadband.actcorp.in (202.83.20.181) 2.501 ms 2.534 ms 2.635 ms
5 * * *
6 72.14.194.18 (72.14.194.18) 43.590 ms 41.858 ms 42.637 ms
7 74.125.242.131 (74.125.242.131) 42.560 ms
108.170.253.121 (108.170.253.121) 42.911 ms
108.170.253.122 (108.170.253.122) 40.468 ms
8 72.14.239.59 (72.14.239.59) 42.028 ms
74.125.252.165 (74.125.252.165) 41.743 ms
209.85.248.251 (209.85.248.251) 43.130 ms
9 64.233.175.215 (64.233.175.215) 41.679 ms
72.14.236.223 (72.14.236.223) 43.124 ms
209.85.242.12 (209.85.242.12) 42.816 ms
10 216.239.35.145 (216.239.35.145) 42.076 ms
66.249.94.185 (66.249.94.185) 42.791 ms
216.239.35.167 (216.239.35.167) 42.456 ms
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * google-public-dns-a.google.com (8.8.8.8) 41.985 ms *
还为ifconfig
添加完整输出:
$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether a4:5e:60:e5:b2:8b
inet6 fe80::c88:b30a:16fc:4dbe%en0 prefixlen 64 secured scopeid 0x5
inet 192.168.0.104 netmask 0xffffff00 broadcast 192.168.0.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
ether 06:5e:60:e5:b2:8b
media: autoselect
status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
ether b6:58:bb:ac:2e:e8
inet6 fe80::b458:bbff:feac:2ee8%awdl0 prefixlen 64 scopeid 0x7
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TSO4,TSO6>
ether 6a:00:00:58:9d:c0
media: autoselect <full-duplex>
status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TSO4,TSO6>
ether 6a:00:00:58:9d:c1
media: autoselect <full-duplex>
status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=63<RXCSUM,TXCSUM,TSO4,TSO6>
ether 6a:00:00:58:9d:c0
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en1 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 8 priority 0 path cost 0
member: en2 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 9 priority 0 path cost 0
nd6 options=201<PERFORMNUD,DAD>
media: <unknown type>
status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
inet6 fe80::a3c9:7561:3c37:3943%utun0 prefixlen 64 scopeid 0xb
nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
inet 172.20.97.60 --> 172.20.97.60 netmask 0xffffffff
$ 命令
lo0:flags=8049 mtu 16384
选项=1203
inet 127.0.0.1网络掩码0xff000000
inet6::1预桥128
inet6 fe80::1%lo0预桥64作用域ID 0x1
nd6选项=201
gif0:标志=8010 mtu 1280
stf0:标志=0 mtu 1280
XHC20:标志=0 mtu 0
en0:标志=8863 mtu 1500
乙醚a4:5e:60:e5:b2:8b
inet6 fe80::c88:b30a:16fc:4dbe%en0预桥64安全作用域ID 0x5
inet 192.168.0.104网络掩码0xffffff00广播192.168.0.255
nd6选项=201
媒体:自动选择
状态:活动
p2p0:标志=8843 mtu 2304
乙醚06:5e:60:e5:b2:8b
媒体:自动选择
状态:不活跃
awdl0:flags=8943 mtu 1484
乙醚b6:58:bb:ac:2e:e8
inet6 fe80::b458:bbff:feac:2ee8%awdl0预桥64作用域ID 0x7
nd6选项=201
媒体:自动选择
状态:活动
en1:标志=8963 mtu 1500
选项=60
乙醚6a:00:00:58:9d:c0
媒体:自动选择
状态:不活跃
en2:标志=8963 mtu 1500
选项=60
乙醚6a:00:00:58:9d:c1
媒体:自动选择
状态:不活跃
桥0:flags=8863 mtu 1500
选项=63
乙醚6a:00:00:58:9d:c0
配置:
id 0:0:0:0:0:0优先级0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100超时1200
根id 0:0:0:0:0:0优先级0如果成本0端口0
ipfilter禁用标志0x2
成员:en1标志=3
ifmaxaddr 0端口8优先级0路径成本0
成员:en2标志=3
ifmaxaddr 0端口9优先级0路径成本0
nd6选项=201
媒体:
状态:不活跃
utun0:flags=8051 mtu 2000
inet6 fe80::a3c9:7561:3c37:3943%utun0预驱动桥64作用域ID 0xb
nd6选项=201
utun1:flags=8051 mtu 1380
inet 172.20.97.60-->172.20.97.60网络掩码0xFFFFFF
作为windows用户,这里可以提供帮助,但我不熟悉macOS
您是否有VMware或VMplayer或任何虚拟化计划
如果是,您可以检查您的网络适配器并将其关闭
如果没有,并且您只启用了您正在使用的适配器
这可能是ISP,请确保打开cmd并键入
tracert 8.8.8.8
如果你看到任何熟悉的ip,比如10*
然后ISP正在使用NAT,可能会阻止您的请求 从以下文件:
这是通过从系统中检索主机名,然后将该名称解析为InetAddress来实现的
因此,如果您有一个伪造的主机名,那么这个函数将返回一个伪造的IP地址
您可以运行hostname
命令查看您的计算机报告的主机名,然后使用nslookup
查看该名称解析为什么(或者,ping$(主机名)
,这将执行名称解析)
如果这是问题所在,并且您在Mac上具有管理员访问权限,那么您可以更改名称(有关说明,请参阅
man hostname
)。但是,您可能需要与IT部门沟通,以了解正确的主机名应该是什么。最终解决了这个问题
正如@guest所指出的,由于某种原因,连接到VPN会弄乱名称解析,因此我的本地主机被解析为某个远程IP
解决方案是简单地添加一个/etc/hosts条目,手动将我的主机名映射到127.0.0.1。这就解决了问题。不,我的机器上没有任何虚拟化软件。我运行了跟踪,没有提到任何10.65.*在那里。是的,这是你的ISP,因为有一个ip以10开始,然后它是,为了确保你可以检查这一点,我想你可能会问一个静态ip服务从你的ISP来解决这个问题。我知道10.*空间正在被我的ISP使用,但这将如何影响Java获得本地ip?为什么只有在我使用VPN时才会发生这种情况?在任何情况下,我切换到不同的连接,trace(参考更新的问题)没有任何10.*IP,但问题仍然存在。10.*是本地地址。ISP不可能与此有任何关系,也不可能与建议的
tracert
有任何关系。我尝试了枚举即时和枚举,在禁用所有其他接口后,结果是准确的。192.168.1.9软件环回接口1 127.0.0.1 0:0:0:0:0:0:0:1即使没有任何更改,也只需尝试禁用您拥有的适配器。只有在ipcomfig
显示中未显示时,它才无效。没有证据。这正是我在问题描述中所说的。如果需要,我可以为ifconfigHmm添加完整的输出,这似乎是罪魁祸首。nslookup在主机名上失败,但是当我尝试ping它时,主机名被解析为伪造的IP地址,但实际的ping仍然超时。我还没修好呢,布