2013-08-28 29 views
5

Nie rozumiem, dlaczego kod poniżej drukuje 0.0.9.229 zamiast 127.0.0.1. Czy ktoś może mi powiedzieć, gorąco to naprawić?Java. InetAddress.getLocalHost zwraca dziwne IP

String ha = InetAddress.getLocalHost().getHostAddress(); 
System.out.println(ha); 

UPD: Kod działa na Ubuntu

/etc/hosts

127.0.0.1  localhost 
127.0.1.1  2533 

Odpowiedz

3

Problem polega na tym, że moja nazwa hosta składa się wyłącznie z cyfr i nie można jej rozwiązać. Zmieniam moją/etc/hostname ze znakami na pierwszej pozycji i problem został rozwiązany.

9

InetAddress.getLocalHost() nie robi tego, co większość ludzi myśli, że to robi. W rzeczywistości zwraca nazwę hosta urządzenia i adres IP związany z tą nazwą hosta. Może to być adres używany do łączenia ze światem zewnętrznym. Może nie. To zależy od konfiguracji twojego systemu.

Na moim WindowsBoxie otrzymuje nazwę urządzenia i zewnętrzny adres IP. Na moim Linux-ie zwraca nazwę hosta i 127.0.0.1, ponieważ mam to ustawione w/etc/hosts

+0

Używam biblioteki lib, która zawiera ten kod. Podejrzewam, że musi być coś takiego jak 127.0.0.1 lub localhost, ale jest 0.0.9.229, co powoduje, że nie można dalej wiązać z błędem adresu URL. Nie rozumiem, gdzie od 0.0.9.229 – shurik2533

+0

Wiem, że nie jesteś wybraną odpowiedzią, ale ta odpowiedź uratowała mi dziś mnóstwo żałoby. Dzięki! – durron597

2

Użyj NetworkInterface do wyliczenia interfejsów sieciowych; InetAddress.getLocalHost() zawsze zwraca pętlę zwrotną. Jeśli chcesz, aby wszystkie adresy IP były powiązane z Twoim urządzeniem, użyj NetworkInterface, a następnie otrzymasz również 127.0.0.1.

Enumeration<NetworkInterface> nInterfaces = NetworkInterface.getNetworkInterfaces(); 

    while (nInterfaces.hasMoreElements()) { 
     Enumeration<InetAddress> inetAddresses = nInterfaces.nextElement().getInetAddresses(); 
     while (inetAddresses.hasMoreElements()) { 
      String address = inetAddresses.nextElement().getHostAddress(); 
      System.out.println(address); 
     } 
    }