ホームページ > Java > &#&チュートリアル > Java でマシンの外部 IP アドレスを確実に特定する方法

Java でマシンの外部 IP アドレスを確実に特定する方法

DDD
リリース: 2024-12-14 16:28:11
オリジナル
688 人が閲覧しました

How to Reliably Determine a Machine's External IP Address in Java?

Java での現在のマシンの IP アドレスの決定

コンテキスト:

複数のノードを含む分散システムでは、各ノードが効果的に通信するために一意の IP アドレスが必要です。シームレスな接続を実現するには、この IP アドレスを中央ブートストラップ ノードに登録する必要があります。ただし、ネットワーク構成が複雑になる可能性があるため、正しい IP アドレスを取得するのは困難な場合があります。

問題:

InetAddress.getLocalHost().getHostAddress( ) 多くの場合、外部 PPP IP アドレスの代わりに LAN IP アドレスが返されます。この不一致により、ノードがブートストラップ ノードまたは他のノードに接続しようとするときに問題が発生します。

解決策 1: ネットワーク インターフェイスの列挙

Enumeration e = NetworkInterface.getNetworkInterfaces();
while (e.hasMoreElements()) {
    NetworkInterface n = (NetworkInterface) e.nextElement();
    Enumeration ee = n.getInetAddresses();
    while (ee.hasMoreElements()) {
        InetAddress i = (InetAddress) ee.nextElement();
        System.out.println(i.getHostAddress());
    }
}
ログイン後にコピー

このアプローチでは、すべての IP アドレスの包括的なリストが提供されます。ただし、正しい IP アドレスを区別することは依然として困難です。

解決策 2: IP アドレスのタイプの区別

値の範囲に基づいて IP アドレスのタイプを決定します。

  • ループバック: 127.xxx.xxx.xxx
  • プライベート (LAN): 192.168.xxx.xxx
  • リンクローカル: 169.254.xxx.xxx
  • マルチキャスト: 224.xxx.xxx .xxx - 239.xxx.xxx.xxx
  • ブロードキャスト: 255.255.255.255

InetAddress API は、最も適切なアドレスを識別するために各タイプのアドレスをテストするメソッドを提供します。

解決策 3: 外部 FQDN 取得

外部に公開された完全修飾ドメイン名を取得する(FQDN) を取得し、それを使用してプライマリ IP アドレスを検索します。

InetAddress inetAddress = InetAddress.getByName("myFQDN");
String ipv4Address = inetAddress.getHostAddress();
ログイン後にコピー

この方法は DNS 解決に依存しているため、すべてのシナリオ、特にロード バランサーが存在する場合には実行できない可能性があります。

以上がJava でマシンの外部 IP アドレスを確実に特定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート