Сканирование UDP-порта Java находит только 1 открытый UDP-порт

У меня есть представление о сканировании портов. Я сканирую UDP-порты некоторых IP-адресов в Java. В моей программе (при условии, что все в порядке) я могу найти только один открытый UDP-порт. С другой стороны, при сканировании портов через "nmap" я получаю 4 открытых порта UDP. Может кто-нибудь сказать мне, почему я не могу найти более одного порта через код Java? Кстати, я могу найти истинно открытый порт в моем коде.

int startPortRange=1;
    int stopPortRange=1024;
    InetAddress address = InetAddress.getByName("bigblackbox.cs.binghamton.edu");
    int counter=0;
    for(int i=startPortRange; i <=stopPortRange; i++)
    {
        counter++;      
       try{


            byte [] bytes = new byte[128];
            DatagramSocket ds = new DatagramSocket();
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
            ds.setSoTimeout(100);
            ds.connect(address, i);
            ds.send(dp);
            ds.isConnected();
            dp = new DatagramPacket(bytes, bytes.length);
            ds.receive(dp);
            ds.close();
            System.out.println("open");
            System.out.println(counter);
        }
        catch(InterruptedIOException e){
            //System.out.println("closed");
        }
        catch(IOException e){
            //System.out.println("closed");
        }       
    }

Выход вышеуказанного кода 135 открыт

Когда я делаю ту же операцию в командной строке, используя nmap, я получаю больше открытых портов. Я не могу загрузить изображение, потому что я новый пользователь. Спасибо

1 ответ

Решение

Невозможно дать конкретный ответ, если вы не предоставите хотя бы:

  • Исходный код вашей программы.

  • Пример (неправильного) вывода, который вы получаете.

  • Ожидаемый результат для того же сценария.

Без этой информации мы не сможем сказать вам, что не так. Насколько нам известно, это может быть простой случай преждевременного завершения вашей программы после обнаружения открытого порта. Или случай, когда последний найденный открытый порт перезаписывал записи предыдущих перед отображением.

В любом случае, возможно, стоит проверить, что отправляется и принимается с использованием сетевого анализатора, такого как Wireshark. Сравнивая nmap сеанс с сеансом, созданным вашей программой, вы можете обнаружить существенную разницу, которая поможет точно определить проблему.

РЕДАКТИРОВАТЬ:

После просмотра вашего кода и сравнения с nmapкажется, что вы по ошибке обрабатываете случай SocketTimeoutException как закрытый порт, хотя это может быть просто порт сервера, который отказывается отвечать на отправленный вами пакет.

РЕДАКТИРОВАТЬ 2:

Вот полная история:

Когда порт должным образом закрыт, сервер отправляет обратно пакет ICMP Destination Unreachable с кодом ошибки недостижимого порта. Java интерпретирует эту ошибку как IOException что вы правильно считаете для обозначения закрытого порта.

Открытый порт, с другой стороны, может привести к двум различным ответам от сервера:

  • Сервер отправляет обратно пакет UDP, который получен вашей программой и определенно указывает на открытый порт. DNS-серверы, например, часто отвечают с ошибкой формата. nmap показывает, что эти порты open,

  • Сервер игнорирует ваш тестовый пакет, потому что он неправильно сформирован по отношению к предоставленной службе. Это приводит к тайм-ауту сети и SocketTimeoutException в вашей программе.

К сожалению, невозможно определить, является ли тайм-аут сети тем, что активный сервер проигнорировал некорректно сформированный тестовый пакет или потому что фильтр пакетов отключил тестирование. Вот почему nmap отображает порты с тайм-аутом как open|filtered,

Другие вопросы по тегам