Обычно, когда надо проверить какой-нибудь TCP порт, я беру telnet и отправляю запрос на этот порт. Синтаксис одинаковый на всех системах. Выглядит это примерно так:
# telnet 1.1.1.1 53Connected to 1.1.1.1.Escape character is '^]'.
Как вы знаете, telnet не работает с UDP, что логично. Установить соединение по UDP невозможно, так как по UDP пакеты просто отправляются, без подтверждения получения и установки соединения. Это не двусторонний обмен, как в TCP. Так что гарантированно и быстро проверить доступность UDP порта не всегда просто.
Отправить UDP пакет можно с помощью утилиты ncat:
# nc -z -v -u 212.193.62.10 53
По идее, она показывает статус open или closed, но я не знаю, как конкретно работает эта проверка. Зачастую отправляешь пакет в точно неиспользуемый порт, и получаешь в ответ, что он open. Можно быть уверенным только в том, что nc отправила тестовый пакет. Более надёжно можно сделать проверку через nmap, но сегодня не об этом.
Если нужно просто и быстро отправить какой-то UDP пакет, то сделать это можно через псевдо устройства Linux:
# echo -n "test" > /dev/udp/1.1.1.1/53
Эту команду удобно использовать, когда идёт отладка каких-то правил в firewall. Она гарантированно сразу же отправляет пакет, без каких-либо дополнительных параметров, проверок, ожиданий и т.д. Отправил пакет, он тут же на счётчик правила прилетел.
Вообще, с помощью /dev/tcp и /dev/udp можно делать всякие неочевидные штуки. Например, посмотреть точное время:
# cat </dev/tcp/time.nist.gov/13
Или получить ответ от веб сервера:
# exec 5<>/dev/tcp/eth0.me/80# echo -e "GET / HTTP/1.0\n" >&5# cat <&5
Мы связали файловый дескриптор с веб сервером eth0.me, отправили через дескриптор GET запрос и вывели ответ. Там будет ваш внешний ip адрес.
#linux #terminal