用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 位址類型區分InetAddress API 提供了測試每種類型位址的方法,以確定最適合的位址。
解決方案3:外部FQDN檢索InetAddress inetAddress = InetAddress.getByName("myFQDN"); String ipv4Address = inetAddress.getHostAddress();取得外部公佈的完全限定網域名稱(FQDN)並用它來找出主IP位址:此方法依賴DNS解析,可能不會在所有場景下都是可行的,特別是在存在負載平衡器的情況下。
以上是如何在 Java 中可靠地確定機器的外部 IP 位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!