address.isReachable не обнаружит все узлы в сети

Я сократил свой код до самого необходимого, он довольно простой и понятный.

У меня есть следующий код:

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;
}

Вот класс узла, который довольно прост:

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

    public String address;
    public boolean restricted;
}

Вот мой основной код, который выполняет getNodes ():

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;

Вот мой вывод:

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...
Now here's the problem

У меня есть инструмент обнаружения сетевых узлов, который я скачал на свой телефон, и он может найти как минимум еще 5 узлов. Я попытался изменить значение тайм-аута, но все равно не повезло. Когда я пингую адрес, найденный с помощью сетевого инструмента на моем телефоне, а не на моем компьютере, пинг мгновенно принимается и возвращается. Этот вопрос похож и мне немного помог, но я все еще застрял:

How to do a true Java ping from Windows?

Я запускаю свой инструмент на Mac, кажется, он хорошо работает, подбирая другие Mac, iPod и роутеры, но на этом все. Почему моя программа не может обнаружить другие устройства в сети?

Вот вывод, который я получаю от моего сетевого инструмента на моем телефоне:

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 *

Я помещаю *, где инструмент на моем телефоне согласуется с инструментом, который я пишу на моем компьютере. Я провел этот тест пару раз, каждый раз на компьютере и на телефоне я получал один и тот же вывод, во время тестов ни одно устройство не было добавлено или удалено из сети.

Ответы на вопрос(1)

Ваш ответ на вопрос