通过运行单行命令使用 telnet 测试远程 TCP 端口

Muh*_*ana 20 bash telnet

我有许多 linux 机器,但它们的命令和磁盘空间非常有限。但它上面有telnet命令。

我远程连接到这些探测器中的每一个(以编程方式)并通过 SSH 发出一行 linux 命令。

我需要运行一个命令来连接到特定机器,使用 telnet,然后立即断开连接

我可以做到这一切,但立即断开连接部分。Telnet 会打开某种控制台或终端,我无法找出运行 telnet 命令然后立即断开连接的单行命令。

如果我这样做,我可以轻松解析文本输出的错误消息,因为无法连接到指定端口上的机器,这正是我正在寻找的。

那么如何运行单行命令来使用 telnet 连接到一台机器然后断开连接呢?

小智 37

您应该能够将exit命令通过管道传输到telnet. 尝试:

echo 'exit' | telnet {site} {port}
Run Code Online (Sandbox Code Playgroud)

看看这是否有效。(它似乎在我的网络服务器上工作,但 YMMV)。


Sef*_*eff 11

下面给出了最简单和最简单的方法。

 sleep <n> | telnet <server> <port>
Run Code Online (Sandbox Code Playgroud)
  • n- 自动退出前的等待时间(以秒为单位)。它可能是像 0.5 这样的小数。请注意,在指定的等待时间内可能无法返回某些必需的输出。所以我们可能需要相应增加。

  • server - 目标服务器 IP 或主机名。

  • port - 目标服务端口号。

您还可以将输出重定向到文件,如下所示:

sleep 1 | telnet <server> <port> > output.log
Run Code Online (Sandbox Code Playgroud)


小智 9

尝试

echo -e '\x1dclose\x0d' | telnet {HOSTNAME} {PORT}
Run Code Online (Sandbox Code Playgroud)

上面最好的部分是您也可以获得退出状态。如果 telnet 成功,退出代码将为 0,否则为 1


小智 7

在我的情况下,这是有效的。(CentOS 7):

while read host port; do
r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
     echo "$host $port is open"
else
     echo "$host $port is closed"
     exit 1 # To force fail result in ShellScript
fi
done
Run Code Online (Sandbox Code Playgroud)

  • 有人可以解释一下“3&lt;&gt;”的 shell/bash 魔力和 /dev/tcp/$host/$port 的 Linux 魔力吗?换句话说,这到底有什么作用? (2认同)