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

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

我有很多 Linux 机器,它们的命令和磁盘空间都非常有限。但它有telnet命令。

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

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

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

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

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

答案1

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

echo 'exit' | telnet {site} {port}

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

答案2

下面给出最简单、最容易的方法。

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

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

  • port- 目标服务端口号。

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

sleep 1 | telnet <server> <port> > output.log

答案3

就我而言,这是有效的。 (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

答案4

这是另一个版本上面回答这使得它的行为更像“正常”的 telnet 语法。如果您喜欢我的回答,请不要给这个答案,而是给原来的答案。

#!/bin/bash
if [ "$2" == "" ]; then
 echo "Syntax: $0 <host> <port>"
 exit;
fi

host=$1
port=$2

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

相关内容