首頁 >Java >java教程 >如何在 Java 中可靠地確定機器的外部 IP 位址?

如何在 Java 中可靠地確定機器的外部 IP 位址?

DDD
DDD原創
2024-12-14 16:28:11630瀏覽

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

用Java 決定目前機器的IP 位址

上下文:

上下文:

在具有多個節點的分散式系統,每個節點都需要唯一的IP位址才能有效通訊。此 IP 位址必須向中央引導節點註冊才能實現無縫連線。然而,由於網路配置可能存在複雜性,因此取得正確的 IP 位址可能會很困難。

問題:

使用 InetAddress.getLocalHost().getHostAddress( 的預設方法) )通常會傳回 LAN IP 位址而不是外部 PPP 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 位址的完整清單。然而,區分正確的 IP 位址仍然具有挑戰性。

解決方案2:IP 位址類型區分
  • 根據IP 位址的取值範圍判斷IP 位址的型別:
  • 環回: 127.xxx.xxx.xxx
  • 專用(LAN):192.168.xxx.xxx
  • 本地連結:169.254.xxx.xxx
多播:224.xxx. xxx .x​​xx- 239.xxx.xxx.xxx

廣播:255.255.255.255

InetAddress API 提供了測試每種類型位址的方法,以確定最適合的位址。

解決方案3:外部FQDN檢索
InetAddress inetAddress = InetAddress.getByName("myFQDN");
String ipv4Address = inetAddress.getHostAddress();

取得外部公佈的完全限定網域名稱(FQDN)並用它來找出主IP位址:此方法依賴DNS解析,可能不會在所有場景下都是可行的,特別是在存在負載平衡器的情況下。

以上是如何在 Java 中可靠地確定機器的外部 IP 位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn