24

ローカルIPを取得しようとしています。それはで動作するはずです

System.out.println(Inet4Address.getLocalHost().getHostAddress());

また

InetAddress addr = InetAddress.getLocalHost();
ip = addr.getHostAddress();
System.out.println("Ip: " + ip);

しかし、それは常に192.168.178.154代わりに返されます192.168.178.119(これは私の本当のローカルIPです(ターミナル --> ifconfig))

私は何をすべきか?

4

2 に答える 2

36

2 つの IP アドレスを持っているようです。

ネットワーク アダプタが 1 つあるコンピュータでは、選択された IP アドレスがコンピュータのネットワーク アダプタのプライマリ IP アドレスになります。ただし、マルチホーム コンピューターでは、スタックは最初に選択を行う必要があります。スタックは、接続のターゲット IP アドレスを認識するまで、インテリジェントな選択を行うことができません。

プログラムが connect() 呼び出しをターゲット IP アドレスに送信するか、send() 呼び出しを UDP データグラムに送信すると、スタックはターゲット IP アドレスを参照し、最適なネットワークを選択できるように IP ルート テーブルを調べます。パケットを送信するアダプタ。このネットワーク アダプタが選択されると、スタックはそのネットワーク アダプタに関連付けられたプライマリ IP アドレスを読み取り、その IP アドレスを送信パケットの送信元 IP アドレスとして使用します。

書類

2 番目の IP とそのたとえば LAN を有効にしたい場合は、プラグを抜き、10 秒後に再び差し込んでください。他の IP がルーティング テーブルのホスト IP として選択される場合があります。

から 2 番目の IP を取得できますgetNetworkInterfaces

次のコードを実行してみてください。

public static void main(String[] args) throws Exception
{
    System.out.println("Your Host addr: " + InetAddress.getLocalHost().getHostAddress());  // often returns "127.0.0.1"
    Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
    for (; n.hasMoreElements();)
    {
        NetworkInterface e = n.nextElement();

        Enumeration<InetAddress> a = e.getInetAddresses();
        for (; a.hasMoreElements();)
        {
            InetAddress addr = a.nextElement();
            System.out.println("  " + addr.getHostAddress());
        }
    }
} 
于 2013-10-20T11:37:49.207 に答える
9

システムが複数の IP で構成されている場合は、次のようにします。

try {
  InetAddress inet = InetAddress.getLocalHost();
  InetAddress[] ips = InetAddress.getAllByName(inet.getCanonicalHostName());
  if (ips  != null ) {
    for (int i = 0; i < ips.length; i++) {
      System.out.println(ips[i]);
    }
  }
} catch (UnknownHostException e) {

}
于 2013-10-20T11:41:38.353 に答える