title: InetAddress.getLocalHost().getHostAddress() is returning 127.0.1.1
body: <p>My question is similar to <a href="https://stackoverflow.com/q/2381316/1175065">this</a> 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</p>
  
  <pre><code>InetAddress.getLocalHost().getHostAddress()
  </code></pre>
  
  <p>Below is my complete code, originally posted in SO at <a href="https://stackoverflow.com/a/7334091/1175065">here</a></p>
  
  <pre><code>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&lt;NetworkInterface&gt; nInterfaces = NetworkInterface
                  .getNetworkInterfaces();
          while (nInterfaces.hasMoreElements()) {
              Enumeration&lt;InetAddress&gt; 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;
  }
  </code></pre>
  
  <p>The above code is returning 127.0.1.1 whereas <code>ifconfig</code> on my Ubuntu machine is giving below output</p>
  
  <pre><code>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)
  </code></pre>
  
  <p>I found 127.0.1.1 entry in host file (Strange to me, since I never updated this file)</p>
  
  <pre><code>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
  </code></pre>
  
  <p>How to get the real IP of my machine (not 127.0.0.1)? I am looking ONLY for IPv4 address excluding <code>127.0.0.0/8 subnet</code></p>