Я открыл порт 4000 на своей локальной машине следующим образом:
nc -lvup 4000
а затем попытался подключиться к тому же порту следующим образом:
nc -vu 127.0.0.1 4000
и смог успешно подключиться и отправлять и получать текст туда и обратно. Однако, когда я слушаю тот же порт, что показан в первом фрагменте, а затем пытаюсь выполнить сканирование UDP с помощью
nmap -sU 127.0.0.1 -p 4000
Результат следующий:
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000061s latency).
PORT STATE SERVICE
4000/udp closed icq
Разве не должно быть написано "открыто", поскольку порт явно открыт, как установлено первым тестом? Пожалуйста, дайте понять, так как я действительно озадачен этим.
решение1
Нет. Ты не понимаешь, что происходит. Это UDP, нетсоединения.
Когда вы запускаете второй nc
и вводите в него что-то, он просто отправляет пакеты. Затем выдругими способами(наблюдая за другой стороной коммуникации, например, за экраном другого компьютера) подтверждают, что коммуникация происходит. Если бы не было "прослушивания" nc
, "отправляющий" nc с радостью отправлял бы те же самые пакеты, не имея ни малейшего понятия, были ли они получены или потеряны.
Так же как и nmap
. Он отправляет пакеты, не видит никаких ответов и решает, что его пакеты просто исчезли в черной дыре.
Это UDP, он такой. У него нет внутреннего подтверждения приема. Если приложению это нужно, оно само делает подтверждения. И поскольку у нас нет протокола уровня приложения, чтобы сделать это здесь, то nmap не видит ответа, не обнаруживает "открытый порт".
Для сравнения, в TCP встроены подтверждения (ACK), поэтому мы можем надежно определить, открыт ли порт.