Проверить, открыт ли удаленный порт TCP из сценария оболочки

Я ищу быстрый и простой метод для правильного тестирования, открыт ли данный TCP-порт на удаленном сервере изнутри оболочки скрипт.

Мне удалось это сделать с помощью команды telnet, и она отлично работает, когда порт открыт, но, кажется, не истекает время ожидания, когда это не так, и просто зависает там ...

Вот образец:

l_TELNET=`echo "quit" | telnet $SERVER $PORT | grep "Escape character is"`
if [ "$?" -ne 0 ]; then
  echo "Connection to $SERVER on port $PORT failed"
  exit 1
else
  echo "Connection to $SERVER on port $PORT succeeded"
  exit 0
fi

Мне нужен либо лучший способ, либо способ заставить telnet тайм-аут, например, если он не подключается менее чем за 8 секунд, и вернуть то, что я могу поймать в Shell (код возврата или строка в stdout) .

Я знаю метод Perl, который использует модуль IO :: Socket :: INET и написал успешный сценарий, проверяющий порт, но предпочел бы избегать использования Perl, если это возможно.

Примечание. мой сервер работает (откуда мне нужно это запустить)

SunOS 5.10 Generic_139556-08 i86pc i386 i86pc

287
задан jww 20 March 2019 в 22:41
поделиться