我正在寻找一种快速简单的方法来正确测试给定的 TCP 端口是否在远程服务器上从 Shell 脚本内部打开。
我已经设法用 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 中捕获的内容(返回代码或标准输出中的字符串)。
我知道 Perl 方法,它使用 IO::Socket::INET 模块并编写了一个测试端口的成功脚本,但我宁愿尽可能避免使用 Perl。
注意:这是我的服务器正在运行的(我需要从中运行它)
SunOS 5.10 Generic_139556-08 i86pc i386 i86pc
最佳答案
正如 B. Rhodes 所指出的,nc
( netcat
) 将完成这项工作。更紧凑的使用方式:
nc -z <host> <port>
这样 nc
将只检查端口是否打开,成功时以 0 退出,失败时以 1 退出。
快速交互式检查(超时 5 秒):
nc -z -v -w5 <host> <port>
关于shell - 测试远程 TCP 端口是否从 shell 脚本打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37462555/