ホームページ >Java >&#&チュートリアル >Java コードが Localhost 以外のホストに ping に失敗するのはなぜですか?

Java コードが Localhost 以外のホストに ping に失敗するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 17:42:57361ブラウズ

Why is My Java Code Failing to Ping Hosts Other Than Localhost?

Java での ping を使用したホスト到達可能性のトラブルシューティング

Java では、InetAddress.isReachable() メソッドを使用して IP アドレスの 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

この結果は、localhost への ping は成功したが、他のホストには到達できないことを示しています。

解決策の説明

Java ドキュメントの InetAddress.isReachable() メソッドによると:

"... 一般的な実装では、
権限を取得できる場合は ICMP ECHO REQUEST を使用し、そうでない場合は確立を試みます。宛先ホストのポート 7 (エコー) での TCP
接続..."

オプション #1 (ICMP ECHO REQUEST を使用) には通常、管理 (root) 権限が必要です。これらの権限が付与されていない場合、メソッドは TCP を使用して到達可能性を判断しようとします。

結論

localhost 以外のホストへの ping で問題が発生した場合、次の可能性があります。 ICMP 権限は付与されません。必要な権限が付与されていることを確認すると、「ホストに到達できません」エラーを解決できます。

以上がJava コードが Localhost 以外のホストに ping に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。