3

Java を使用して Ubuntu からコンピューターの IP を取得する必要があります。で試しましInetAddress.getLocalHost.getHostAddress().toString();たが、戻ります127.0.0.1。私は解決策を探していて、このコードを見つけました:

NetworkInterface ni = NetworkInterface.getByName("eth0");
    Enumeration<InetAddress> inetAddresses =  ni.getInetAddresses();


    while(inetAddresses.hasMoreElements()) {
        InetAddress ia = inetAddresses.nextElement();
        if(!ia.isLinkLocalAddress()) {
            System.out.println("IP: " + ia.getHostAddress());
        }
    }
}

このコードは私にとってはうまくいきましたが、問題は、コンピューターが「eth1」インターフェイスを使用している場合、またはコンピューターがワイヤレスアダプターを使用してネットワーク (wlan0) に接続できる場合です。その場合、プログラムは失敗します。UNIX システムから IP を取得する安全な方法を教えてもらえますか? よろしく。

4

3 に答える 3

1

列挙getNetworkInterfaces();を使用して、それらを循環します。

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

                    while (eni.hasMoreElements()) {
                            NetworkInterface ni = eni.nextElement();
                            Enumeration<InetAddress> inetAddresses =  ni.getInetAddresses();


                            while(inetAddresses.hasMoreElements()) {
                                    InetAddress ia = inetAddresses.nextElement();
                                    if(!ia.isLinkLocalAddress()) {
                                            System.out.println("Interface: " + ni.getName() + "   IP: " + ia.getHostAddress());

                                    }
                            }
                    }

私のLinuxボックスでは、127.0.0.1を取得しているため、isLinkLocalAddress()が正しく機能していないようですが、ipv6バージョンは手動で簡単に除外できます。

Interface: wlan0   IP: 192.168.0.8
Interface: lo   IP: 0:0:0:0:0:0:0:1%1
Interface: lo   IP: 127.0.0.1

私のマシンは 192.168.0.8 のワイヤレス インターフェイスでのみ接続されています

于 2013-06-25T08:16:05.243 に答える