Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java InetAddress.getLocalHost().getHostAddress()返回无效的IP地址_Java_Networking_Ip - Fatal编程技术网

Java InetAddress.getLocalHost().getHostAddress()返回无效的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是从哪里来

当我说无效时,我指的是无效。我得到的IP地址与我的机器的任何接口都没有关联。我知道网站上也有类似的问题,但更多的是关于人们获取他们不想要的接口地址(例如,127.0.0.1而不是LAN 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仍然超时。我还没修好呢,布