Ответ
Проверка UDP-порта сложнее, чем TCP, из-за отсутствия handshake. Я обычно использую комбинацию инструментов.
1. Базовое сканирование с nmap:
sudo nmap -sU -p 53 192.168.1.1
Опция -sU указывает на UDP-сканирование. Результат open|filtered означает, что порт либо открыт, либо его блокирует файрвол (так как открытый UDP-порт может не отвечать).
2. Проверка с отправкой полезной нагрузки (если известен протокол):
Для DNS-порта (53) можно использовать dig или nmap со скриптом:
nmap -sU -p 53 --script dns-recursion 192.168.1.1
3. Использование netcat (nc) для отправки данных:
echo "test" | nc -u -w 2 192.168.1.1 161
Здесь -u для UDP, -w 2 — таймаут в 2 секунды. Если сервис на порту 161 (SNMP) ожидает конкретный запрос, он может ответить.
Ключевой момент: Отсутствие ответа не всегда означает, что порт закрыт. Для надежной проверки нужно либо знать ожидаемый протокол и отправить валидный запрос, либо анализировать трафик с помощью tcpdump, чтобы увидеть, приходят ли ICMP-сообщения "port unreachable" (что указывает на закрытый порт).
Ответ 18+ 🔞
А, ну это же классика, блядь! С UDP-портами вечная песня — как будто пытаешься крикнуть в тёмную комнату: «Эй, там кто есть?» А в ответ тишина, ёпта. И ты стоишь такой, и думаешь: то ли там никого, то ли там просто мудак сидит и молчит специально.
Так вот, смотри. TCP — это как позвонить по телефону: «Алло, ты меня слышишь? — Да, слышу!» А UDP — это как записку в окошко швырнуть и ждать, не вылетит ли ответная бумажка. Может, вылетит, а может, и нет, блядь.
1. Ну, для начала тыкаем классическим nmap, куда ж без него.
sudo nmap -sU -p 53 192.168.1.1
Только вот прикол: результат open|filtered — это пиздец какой неоднозначный. Он как бы говорит: «Порт либо открыт, либо его нахуй так зафильтровали, что он просто игнорит все мои крики в пустоту». Доверия к такому результату — ноль, ебать. Но начало.
2. Если ты в курсе, какой там сервис торчит, можно попробовать с ним поговорить по-человечески.
Например, если это DNS (порт 53), можно nmap умным скриптом тыкнуть:
nmap -sU -p 53 --script dns-recursion 192.168.1.1
Это уже лучше — мы не просто стучимся, а говорим на его языке: «Э, DNS, разреши-ка мне рекурсию». Если он ответит — всё, порт точно открыт и живой. Если нет — опять непонятка.
3. Старый добрый netcat — наш швейцарский нож, хоть и тупой иногда.
echo "test" | nc -u -w 2 192.168.1.1 161
Тут -u — это чтобы UDP, -w 2 — ждём ответа две секунды, не больше. Но вся хуйня в том, что если на порту 161 сидит SNMP-демон, то он на слово «test» плюнет и молча удалит пакет. Ему нужен правильный SNMP-запрос, а не эта детская писанина. Так что отсутствие ответа — опять не показатель.
А теперь главный прикол, чувак, слушай сюда. Вся магия UDP в ICMP-ответах. Если порт закрыт, правильно воспитанная система должна прислать тебе назад ICMP-пакет «Destination Unreachable (Port unreachable)». Это как крик из той тёмной комнаты: «Иди нахуй, тут такого порта нет!». А вот если порт открыт, но сервис молчит, или если файрволл просто беззвучно дропает твои UDP-пакеты (stealth mode, блядь), то ты не получишь нихуя. Полная тишина.
Поэтому самый надёжный способ — это одновременно слушать tcpdump'ом, пока ты сканируешь.
Открываешь второй терминал и вешаешься на интерфейс:
sudo tcpdump -ni any icmp and host 192.168.1.1
А в первом терминале запускаешь сканирование. Если увидишь в дампе ICMP 192.168.1.1 unreachable — всё, порт закрыт, можно расслабиться. Если тишина — то либо открыт, либо тебя так хитро фильтруют, что хоть волком вой.
Короче, работа с UDP — это как игра в жмурки с невидимкой. Ты никогда не уверен на все сто, пока не получишь внятный ответ по протоколу. А так — одни догадки и полутона, блядь.