在Java 中使用Ping 排除主機可達性問題
在Java 中,可以使用InetAddress.isReachable() 方法對執行ping 操作。但是,有時可能會遇到無法存取 localhost 以外的主機的問題。
原始問題
考慮以下Java 程式碼片段:
<code class="java">public static void main(String[] args) throws UnknownHostException, IOException { String ipAddress = "127.0.0.1"; InetAddress inet = InetAddress.getByName(ipAddress); System.out.println("Sending Ping Request to " + ipAddress); System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable"); ipAddress = "173.194.32.38"; inet = InetAddress.getByName(ipAddress); System.out.println("Sending Ping Request to " + ipAddress); System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable"); }</code>
此程式碼的輸出為:
Sending Ping Request to 127.0.0.1 Host is reachable Sending Ping Request to 173.194.32.38 Host is NOT reachable此結果顯示ping localhost 成功,但其他主機無法存取。
解決方案說明
根據Java文件中的InetAddress.isReachable()方法:連接...」選項#1(使用ICMP ECHO 請求)通常需要管理(root)權限。如果未授予這些權限,則該方法將嘗試使用 TCP 來確定可達性。
"...如果可以取得
權限,典型的實作將使用ICMP ECHO REQUEST,否則它將嘗試建立目標主機連接埠7 (Echo) 上的TCP
結論
當 ping localhost 以外的主機時遇到問題,可能是不授予 ICMP 權限。確保授予必要的權限可以解決主機無法存取錯誤。以上是為什麼我的 Java 程式碼無法 Ping 本地主機以外的主機?的詳細內容。更多資訊請關注PHP中文網其他相關文章!