Java InetAddress.getLocalHost().getHostAddress() returns invalid IP

-2

And when I say invalid, I mean invalid. I get an IP address that's not associated with any of my machine's interfaces. I'm aware there are similar questions on the site, but they're more about people getting the address of an interface they didn't want (e.g., 127.0.0.1 instead of LAN IP), but this is not that. I want to know where this IP is coming from, and how do I get rid of it.

Whenever I call InetAddress.getLocalHost().getHostAddress(), I get 10.65.90.34. This is not the assigned IP from my router, my ISP, my VPN, anything. There is no mentiond of this IP in the output from ifconfig. I have no idea where this IP is coming from. It was suggested to enumerate all interfaces on a different question, and here's what I get when I do that:

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());
        }
    }
}

This outputs:

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

This issue only happens when I am connected to my company's VPN network. And yet this IP is not coming from the VPN interface (utun1) - as can be seen in the above output that is 172.xx.

I tried to see whether this IP is coming from the underyling OS (macOS in my case), but that's not the case either.

 $  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

Output of traceroute 8.8.8.8 as suggested:

 $  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 *

Also adding full output for 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
java
networking
ip
asked on Stack Overflow Apr 20, 2019 by hoodakaushal • edited Apr 20, 2019 by hoodakaushal

3 Answers

1

From the docs for InetAddress.getLocalHost():

This is achieved by retrieving the name of the host from the system, then resolving that name into an InetAddress.

So if you have a bogus hostname, then this function will return a bogus IP address.

You can run the hostname command to see what your machine reports as its hostname, then use nslookup to see what that name resolves to (or alternatively, ping $(hostname), which will do the name resolution).

If that is the problem, and you have admin access on your Mac, then you can change the name (see man hostname for instructions). However, you'll probably need to talk with your IT department to learn what the correct hostname should be.

answered on Stack Overflow Apr 22, 2019 by guest
0

Finally managed to fix it.

The issue, as @guest pointed out, is for some reason connecting to VPN messes up name resolution, so that my localhost is resolved to some remote IP.

The solution was to simply add an /etc/hosts entry, manually mapping my hostname to 127.0.0.1. That fixed it.

answered on Stack Overflow Sep 5, 2019 by hoodakaushal
-1

As a windows user here is what can help, but am not familiar with macOS

Do you have a VMware or VMplayer or any Virtualization program ?

if yes you can check the networks adapter you have and turn them of .

if no , and you have only enabled the adapter that your working on

This might be the ISP , to make sure , open cmd and type

tracert 8.8.8.8

if you saw any familiar ip like 10.*

then the ISP is using NAT and might be blocking your request .

answered on Stack Overflow Apr 20, 2019 by George • edited Apr 20, 2019 by George

User contributions licensed under CC BY-SA 3.0