address.isReachable erkennt nicht alle Knoten in einem Netzwerk

Ich habe meinen Code auf das Nötigste reduziert, es ist ziemlich einfach und direkt.

Ich habe folgenden Code:

public ArrayList<Node> getNodes() throws IOException
{
    ArrayList<Node> nodes = new ArrayList<Node>();

    StringBuffer root = new StringBuffer(InetAddress.getLocalHost().getHostAddress());
    while(!root.toString().endsWith("."))
        root.deleteCharAt(root.length() - 1);
    //^^ this code gets the ip, for ex 127.0.0.1, and trims the last number, to make it
    //^^ 127.0.0.  <-- see the trailing 0

    for(int host = 0;host < 256; host++)
    {
        InetAddress address = InetAddress.getByName(root.toString() + host);
        try
        {
            if(address.isReachable(500)) // pings the address
                nodes.add(new Node(address.getHostAddress(), false));
        }catch(Exception e){new Node(address.getHostAddress(), true);}
    }

    return nodes;
}

Hier ist die Knotenklasse, die ziemlich einfach ist:

public class Node 
{
    public Node(String address, boolean restricted)
    {
        this.address = address;
        this.restricted = restricted;
    }

    public String address;
    public boolean restricted;
}

Hier ist mein Hauptcode, der getNodes () ausführt:

case 1:
    System.out.println("Searching for nodes...");
    NodeDetector node = new NodeDetector(); // this is the class
                                           //where getNodes resides
    ArrayList<Node> nodes = node.getNodes();

    Iterator<Node> it = nodes.iterator();
    while(it.hasNext())
    {
        System.out.println("Node: "+it.next().address);
    }

    System.out.println("stopped searching for nodes...");
    break;

Hier ist meine Ausgabe:

Searching for nodes...
Node: 00.00.17.99
Node: 00.00.17.100
Node: 00.00.17.149
Node: 00.00.17.150 <-- this is my computer
Node: 00.00.17.154
Node: 00.00.17.156
Node: 00.00.17.254
stopped searching for nodes...
Hier ist das Problem

Ich habe ein Tool zur Netzwerkknotenerkennung auf mein Telefon heruntergeladen und es kann mindestens 5 weitere Knoten finden. Ich habe versucht, den Timeout-Wert zu ändern, aber immer noch kein Glück. Wenn ich eine Adresse anpinge, die mit dem Netzwerktool auf meinem Telefon und nicht auf meinem Computer gefunden wurde, wird der Ping sofort empfangen und zurückgesendet. Diese Frage ist ähnlich und hat mir ein bisschen geholfen, aber ich stecke immer noch fest:

Wie mache ich einen echten Java-Ping unter Windows?

Ich starte mein Tool auf einem Mac. Es scheint gut zu funktionieren, andere Macs, iPods und Router aufzunehmen, aber das war's auch schon. Warum kann mein Programm die anderen Geräte im Netzwerk nicht erkennen?

Hier ist die Ausgabe, die ich von meinem Netzwerktool auf meinem Telefon erhalte:

00.00.17.99 <-- SMC Networks *
00.00.17.100 <-- XEROX *
00.00.17.133 <-- My Phone (Android)
00.00.17.134 <-- Intel
00.00.17.142 <-- Apple
00.00.17.149 <-- Apple *
00.00.17.150 <-- Apple * <-- this is my computer
00.00.17.154 <-- Apple *
00.00.17.155 <-- Intel
00.00.17.156 <-- Apple *
00.00.17.158 <-- Motorola Mobility
00.00.17.254 <-- Netopia *

Ich habe ein * eingefügt, bei dem das Tool auf meinem Telefon mit dem Tool übereinstimmt, das ich auf meinem Computer schreibe. Ich habe diesen Test ein paar Mal ausgeführt. Ich erhalte jedes Mal die gleiche Ausgabe auf meinem Computer und meinem Telefon. Während der Tests wurden keine Geräte zum Netzwerk hinzugefügt oder aus dem Netzwerk entfernt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage