У меня нет доступа к netcat
или nmap
так я пытаюсь использовать bash
и /dev/udp/
специальные файлы для тестирования портов.
Я мог бы сделать что-то вроде:
echo "" > /dev/udp/example.com/8000
Но $?
всегда 0
при использовании UDP. Я предполагаю, что это потому, что это возвращаемое значение echo ""
команды правильно?
Я в основном пытаюсь повторить то, что я могу сделать, nmap
и netcat
:
nmap -sU -p 8000 example.com | grep open >/dev/null && echo 'open'
nc -z -u example.com 8000 && echo 'open'
Как бы я это сделал /dev/udp
?
bash
networking
devices
Бельмин Фернандес
источник
источник
Ответы:
Для TCP, просто проверка
$?
. Если соединение не удалось,$?
не будет0
:Потребуется время,
bash
чтобы понять, что соединение не установлено. Вы можете использовать тайм-аут для запускаbash
:Тестирование порта udp более сложное.
Строго говоря, не существует открытого состояния (конечно, udp - это протокол без сохранения состояния ) с udp. Есть только два состояния с UDP, слушая или нет . Если это не так , вы получите пункт назначения ICMP недоступным .
К сожалению, брандмауэр или маршрутизатор часто отбрасывают эти ICMP-пакеты, поэтому вы не будете уверены, в каком состоянии находится порт udp.
источник
В общем, вы не можете.
В отличие от TCP, UDP не имеет соединения. Вы не можете обнаружить, что порт открыт, просто установив бездействующее соединение с ним, как вы можете это сделать с помощью TCP. Скорее, вам нужно отправить данные в порт и посмотреть, что произойдет, а детали UDP, реализованные в реальном мире, затрудняют интерпретацию результатов. Даже сложные инструменты уровня пакета, например,
nmap
не могут точно сказать, существует ли программа, слушающая данный порт UDP.nmap
Классифицирует порты UDP на три группы:nmap
просто не понял, как получить ответ; возможно, пользователю просто не повезло, и все пакеты были потеряны при передаче.источник
nmap
. Спасибо, это проясняет много путаницы.