shell - 测试远程 TCP 端口是否从 shell 脚本打开

标签 shell tcp port solaris telnet

我正在寻找一种快速简单的方法来正确测试给定的 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/

相关文章:

bash - 如何让 tclsh 忽略 EOF?

java - BufferedReader 在与 TCP 套接字一起使用时在字符串中提供更多空字符

mongodb websrv 端口

linux - tar解压能抹掉兄弟目录吗?

linux - 如何添加 shell 脚本中包含的标志?

c - LwIP 原始 API 上的 TCP 服务器 - 关于 tcp_close 和接受回调的问题

java - Python 服务器没有从 Java 客户端接收到完整的字符串

linux - 用于端口路由的 docker ha 代理

python TCPServer 地址已在使用中,但我关闭服务器并使用 `allow_reuse_address`

linux - shell getopts参数收集问题