isReachable()特権を取得できる場合はICMP ECHO REQUESTsを使用し、それ以外の場合は宛先ホストのポート 7 (Echo) で TCP 接続を確立しようとします。
したがって、問題はおそらく、クライアント マシンでこれを行うための十分な権限がないという構成の問題か、クライアントに. おそらく両方の場合、これを機能させるには、どちらか一方を解決する必要があります。
ICMP ECHO REQUEST
OSX および Linux クライアントで以下をテストしましたが、他の OSX、Linux、および Windows Server マシンの到達可能性をテストするときに機能します。これをクライアントとして実行するための Windows マシンがありません。
import java.io.IOException;
import java.net.InetAddress;
public class IsReachable
{
public static void main(final String[] args) throws IOException
{
final InetAddress host = InetAddress.getByName(args[0]);
System.out.println("host.isReachable(1000) = " + host.isReachable(1000));
}
}
私がここで読んだものから。これは明らかに Windows の制限であり、ICMP PINGWindows 2000 より前のシステム コールとして Windows でサポートされていないため、デフォルトでポート 7 に接続しようとし、「到達」しようとしているマシンでブロックされます。Java は、新しいネイティブ システム コールをまだサポートしていません。ICMPパケットを送信するにはルートが必要なため、パーミッションは Unix ベースのシステム用です。
Windows 2000 以降用の独自の Windows ネイティブJNI ICMP PINGを作成する場合は、IcmpSendEcho Functionがあります。