Java InetAddress.isReachable () Zeitüberschreitung

8

Ich versuche herauszufinden, ob bestimmte Hosts in meinem Netzwerk erreichbar sind. Mein Java-Code ist wie folgt:

%Vor%

Das funktioniert ganz gut, aber wenn ich das Timeout auf 500ms heruntersetze, wird es den Host nicht mehr erreichen. Ich plane, einige Hosts in einer Schleife zu überprüfen, daher ist es sehr wichtig, eine niedrige Zeitüberschreitung zu haben. Wenn ich den Host manuell über die Windows-Befehlszeile anpinge, dauert es weniger als 10 ms.

Warum benötigt die Java-Methode eine viel höhere Zeitüberschreitung, um erfolgreich zu sein? Gibt es Alternativen zur Verwendung von isReachable() ?

    
Jerome 04.03.2012, 14:12
quelle

1 Antwort

5

Es hängt davon ab, was Sie mit Erreichbarkeit meinen. Wenn Sie nur herausfinden, welche erreichbaren Hosts bestimmte Ports überwachen, können Sie eine Socket-Verbindung zu diesem Port öffnen (z. B. alle HTTP-Server finden, indem Sie Port 80 überprüfen). Die Verwendung von InetAddress.isReachable () ist implementierungsabhängig. Laut dem Javadoc "wird eine typische Implementierung ICMP ECHO REQUESTs verwenden". Ein "bekannter Port" Check (wie http (80), smb (445), etc.) mit Java NIO (nicht blockierende I / O) kann eine höhere Leistung haben. Meine Firma hat ein Produkt, das einen "bekannten Port" -Scan verwendet, um Telnet- oder SSH-Boxen zu finden, die NIO verwenden, und wir können ungefähr 5000 IP / Sek. Scannen.

    
brettw 04.03.2012, 14:30
quelle

Tags und Links