Java InetAddress.getLocalHost (). GetHostAddress () возвращает неверный IP - PullRequest
0 голосов
/ 20 апреля 2019

И когда я говорю недействительным, я имею в виду недействительным. Я получаю IP-адрес, который не связан с любым интерфейсами моей машины. Я знаю, что на сайте есть похожие вопросы, но они больше касаются людей, получающих адрес интерфейса, который им не нужен (например, 127.0.0.1 вместо IP-адреса локальной сети), но это не так. Я хочу знать, откуда этот IP-адрес и как от него избавиться.

Всякий раз, когда я звоню InetAddress.getLocalHost().getHostAddress(), я получаю 10.65.90.34. Это не назначенный IP-адрес от моего маршрутизатора, моего провайдера, моего VPN, ничего. В выходных данных 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

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Из документов для InetAddress.getLocalHost () :

Это достигается путем извлечения имени хоста из системы, а затем преобразования этого имени в InetAddress.

Так что если у вас есть поддельное имя хоста, то эта функция вернет поддельный IP-адрес.

Вы можете запустить команду hostname, чтобы увидеть, что ваша машина сообщает как имя хоста, затем использовать nslookup, чтобы увидеть, к чему разрешается это имя (или, альтернативно, ping $(hostname), который будет выполнять разрешение имени).

Если это проблема, и у вас есть права администратора на вашем Mac, вы можете изменить имя (см. man hostname для получения инструкций). Однако вам, вероятно, придется поговорить с вашим ИТ-отделом, чтобы узнать, какое должно быть правильное имя хоста.

0 голосов
/ 20 апреля 2019

Как пользователь Windows, вот что может помочь, но я не знаком с macOS

У вас есть VMware или VMplayer или какая-либо программа виртуализации?

если да, вы можете проверить сетиЕсли у вас есть адаптер и включите его.

, если нет, и вы включили только тот адаптер, над которым вы работаете

. Это может быть поставщик услуг Интернета, чтобы убедиться, что откройте cmd и наберите

tracert 8.8.8.8

если вы видели какой-либо знакомый ip, например 10. *

, то провайдер использует NAT и может блокировать ваш запрос.

...