Bash тоже умеет слать данные по TCP и UDP. Я этим пользовался, когда писал сетевые тесты.

Например, вот так можно послать минимальный валидный HTTP GET запрос:

echo -e 'GET /maintenance/start HTTP/1.0\r\n\r\n' > /dev/tcp/127.0.0.1/80

А вот так можно отправить Standart query на Google Public DNS:

echo -e '\x00\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x06google\x03com\x00\x00\x01\x00\x01' > /dev/udp/8.8.8.8/53

При этом если IP-адрес не существует или не отвечает, то в случае с TCP, bash будет где-то минуту пытаться подключиться (слать SYN-пакеты) прежде чем вернёт ошибку. А в случае с UDP, bash просто пошлёт данные в никуда и не вернёт никакой ошибки.

К сожалению, получить ответ на посланные данные нельзя :(. Но можно прочитать из сокета данные. Например, вот так можно узнать, что нам скажет GitHub.com с SSH порта:

cat < /dev/tcp/github.com/22

Через некоторое время в терминале выведется "SSH-2.0-babeld-077acb5b" и bash продолжит ждать следующие данные, пока сокет не будет закрыт с той стороны.

А вот открывать сокет на слушание - bash уже не умеет. И вот это жаль, конечно.

#linux #unix #bash #net #tcp #udp #testing #dev