2016-05-01 5 views
0

nicht funktioniert Ich verwende den folgenden CodePing Code java

InetAddress localhost = InetAddress.getLocalHost(); 
// this code assumes IPv4 is used 
byte[] ip = localhost.getAddress(); 

for (int i = 1; i <= 254; i++) 
{ 
    ip[3] = (byte)i; 
    InetAddress address = InetAddress.getByAddress(ip); 
    if (address.isReachable(1000)) 
    { 
     System.out.println(address + " machine is turned on and can be pinged"); 
    } 
    else if (!address.getHostAddress().equals(address.getHostName())) 
    { 
     System.out.println(address + " machine is known in a DNS lookup"); 
    } 
    else 
    { 
     System.out.println(address + " the host address and host name " + 
      "are equal, meaning the host name could not be resolved"); 
    } 
} 

Um zu versuchen und alle Online-Geräte auf meinem WiFi-Netzwerk zu finden. Allerdings ergeben sich zwei Probleme.

  1. Alle 253 getestet IPs kommen wieder positive
  2. Mein Computer das einzige ist, das einen Gerätenamen hat, und die IP ausgeschaltet ist.

Irgendwelche Hilfe, dieses Dilemma zu lösen?

+0

Umm, ich diesen Code nur versucht, in meinem Netzwerk und es funktionierte perfekt ... Do Sie haben etwas, das Ihre ICMP-Pakete zwingt, wahr zurückzugeben? – user2494817

+0

Eigentlich habe ich herausgefunden, dass ich meine Loopback-Adressen bekommen habe. Ich musste einen etwas anderen Weg nehmen, um meine IP zu bekommen – KeeganDeathman

Antwort

0

Ich versuchte einen ähnlichen Code mit Orakel jdk 1.8.0_51 und funktioniert gut; aber wenn ich es auf oracle jre 1.8.0_91 teste, kommen alle IPs des Netzwerksegments positiv zurück.

Vielleicht ein Bug mit InetAddress.isReachable (1000) auf der aktuellen Version jre ist, wurde ein ähnlicher Fehler auf openjdk berichtet https://bugs.openjdk.java.net/browse/JDK-8145011