这段脚本主要是使用 bash 脚本进行 Telnet 连接测试,遍历了三个 IP 地址(192.168.20.11、192.168.20.22、192.168.20.33)以及三个端口号(22、80、443)。对每个 IP 地址和端口组合进行 Telnet 连接测试,如果连接成功则在日志文件中记录 SUCCESS,否则记录 FAILED。
#!/bin/bash
log_file="/tmp/$HOSTNAME-telnet.log"
for i in 192.168.20.11 192.168.20.22 192.168.20.33
do
port="22 80 443"for ii in $portdoif timeout 3s bash -c "echo >/dev/tcp/$i/$ii" &>/dev/null;thenecho "$i $ii SUCCESS" >>$log_fileelseecho "$i $ii FAILED" >>$log_filefidone
done
其中timeout 3s bash -c "echo >/dev/tcp/$i/$ii" &>/dev/null
详解这个命令的作用是在本地主机上尝试与远程主机的指定端口建立 TCP 连接。下面是对命令中各部分的解释:
-
timeout 3s
: 是一个命令,用于设置命令的超时时间。在这里,设定了 3 秒作为超时时间,即如果在 3 秒内未能建立 TCP 连接,命令将会超时。 -
bash -c "echo >/dev/tcp/$i/$ii"
: 这里通过 Bash 的特性尝试建立 TCP 连接。在 Linux 内核中,/dev/tcp
是一个特殊的虚拟文件,Bash 可以利用这个文件路径实现对 TCP 连接的操作。命令中的echo
实际上并不输出任何内容,只是作为占位符,目的是尝试建立 TCP 连接。 -
&>/dev/null
: 这个部分将命令的标准输出和标准错误重定向到/dev/null
,即丢弃所有输出和错误信息。这样可以在不将输出打印到终端的同时,检查连接是否成功。
例如,命令timeout 3s bash -c "echo >/dev/tcp/192.168.20.11/80" &>/dev/null
的作用是在执行命令的过程中尝试在本地主机与 IP 地址为 192.168.20.11,端口号为 80 的远程主机建立 TCP 连接,如果在 3 秒内连接成功,则成功返回退出状态码,否则超时返回非零状态码。