Java を介して IP アドレスを取得することに飛び込み始めています。マシンがさまざまなネットワーク インターフェイスを介してさまざまな IP を持つ可能性があることを理解しているため、「優先」IP アドレス (Windows 7 コマンド ライン ipconfig /all ごとに優先) を返すように見えるサンプル コードについて、多少混乱しています。
ローカル コンピューターで次のコードを実行すると、26 個の NetworkInterface オブジェクトが返され、その中には複数の InetAddress オブジェクト (「優先」オブジェクトを含む) が含まれているものもあります。
Enumeration<NetworkInterface> eNI = null;
NetworkInterface ni = null;
Enumeration<InetAddress> eIA = null;
InetAddress ia = null;
try {
eNI = NetworkInterface.getNetworkInterfaces();
} catch (Exception e) {
}
while (eNI.hasMoreElements()) {
ni = eNI.nextElement();
System.out.println("NtwkIntfc name: " + ni.getName());
System.out.println("NtwkIntfc disp name: " + ni.getDisplayName());
try {
System.out.println("NtwkIntfc hardware addr: " + Hex.encodeHexString(ni.getHardwareAddress()));
} catch (Exception e) {
}
eIA = ni.getInetAddresses();
while (eIA.hasMoreElements()) {
ia = eIA.nextElement();
System.out.println("InetAddress host address: " + ia.getHostAddress());
System.out.println("InetAddress host name: " + ia.getHostName());
}
}
ただし、このはるかに単純なコードは単に「優先」IPv4 アドレスを返します。
try {
InetAddress thisIp = InetAddress.getLocalHost();
System.out.println("IP:" + thisIp.getHostAddress());
} catch (Exception e) {
e.printStackTrace();
}
「優先」として識別するNetworkInterface(およびそれからのInetAddress)プロパティ/メソッドが見つからないように見えるので、クラスメソッドInetAddress.getLocalHost()がどのようにそれを行うのか疑問に思っていますか?さらに、この優先 IP は標準的なネットワークの概念ですか、それとも何らかの Windows 固有の概念ですか?
ありがとう。