Обычно, когда надо проверить какой-нибудь TCP порт, я беру telnet и отправляю запрос на этот порт. Синтаксис одинаковый на всех системах. Выглядит это примерно так:# telnet 1.1.1.1 53
Connected 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
>>Click here to continue<<