Недавно я обнаружил сюрприз, что Bash изначально поддерживает tcp соединения в качестве файловых дескрипторов .Чтобы использовать:
exec 6<>/dev/tcp/ip.addr.of.server/445
echo -e "GET / HTTP/1.0\n" >&6
cat <&6
Я использую 6 в качестве дескриптора файла, потому что 0,1,2 это stdin, stdout и stderr.5 иногда используется Bash для дочерних процессов , поэтому 3,4,6,7,8 и 9 должны быть безопасными.
Согласно приведенному ниже комментарию, для проверки прослушивания локальный сервер в сценарии:
exec 6<>/dev/tcp/127.0.0.1/445 || echo "No one is listening!"
exec 6>&- # close output connection
exec 6<&- # close input connection
Чтобы определить, слушает ли кто-то, попытайтесь подключиться с помощью обратной связи.Если это не удается, то порт закрыт или нам не разрешен доступ.После этого закройте соединение.
Измените это для своего варианта использования, такого как отправка электронного письма, выход из сценария при сбое или запуск требуемой службы.