2013-08-28 14 views
5

私は理解できません。理由は以下のコードが127.0.0.1ではなく、0.0.9.229です。誰でも、それを修正するために暑いと教えてもらえますか?Java。 InetAddress.getLocalHostが奇妙なIPを返す

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

UPD: コードは、Ubuntuの

の/ etc/hosts

127.0.0.1  localhost 
127.0.1.1  2533 

答えて

3

問題は、自分のホスト名が数字のみで構成されているため解決できないということです。 私の/ etc/hostnameを最初の位置の文字で変更し、問題が解決しました。

9

InetAddress.getLocalHost()上で実行されているが、ほとんどの人はそれがないと思って何をしません。実際にはマシンのホスト名と、そのホスト名に関連付けられたIPアドレスを返します。これは、外界に接続するために使用されるアドレスです。それはできません。それはあなたのシステムがどのように設定されているかによって異なります。

私のwindowsbox上では、マシン名と外部IPアドレスを取得します。私のLinuxボックスでは、ホスト名と127.0.0.1を返すので、/ etc/hostsに設定します。

+0

私はこのコードを含むlibを使用しています。私は、127.0.0.1やlocalhostのようなものがなければならないと思うが、URLエラーにさらにバインドできないため、0.0.9.229がある。私はどこから分かっていないのですか?0.0.9.229 – shurik2533

+0

あなたは選択された答えではないと私は知っていますが、この答えは今日私に悲しみのトンを救った。ありがとう! – durron597

2

NetworkInterfaceを使用してネットワークインターフェイスを列挙します。 InetAddress.getLocalHost()は常にループバックを返します。マシンに関連付けられているすべてのIPを取得する場合は、NetworkInterfaceを使用してください。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); 
     } 
    }