如何验证两个 unix 主机之间的端口连接? [复制]
Posted
技术标签:
【中文标题】如何验证两个 unix 主机之间的端口连接? [复制]【英文标题】:How to verify port connectivity between two unix hosts? [duplicate] 【发布时间】:2019-10-14 02:52:27 【问题描述】:我正在创建一个 bash 脚本,它可以自动检查两个 unix 主机之间的连接性。需要检查特定端口是否从一台主机打开到另一台主机。主机没有 NCAT(由于某些限制),所以只能使用 Telnet。
如果 telnet 连接成功,代码可以正常工作,但如果 telnet 失败,则需要 2 分钟以上。如果没有连接,我需要 telnet 在 2 秒内退出。试图找到一种方法来强制 telnet 命令退出,即使它失败。
我创建了几个脚本,它们可以读取源文件并从那里运行以下命令以远程登录目标服务器。
以下代码将在需要测试 telnet 连接的服务器上执行。
#!/usr/bin/bash
>/wastmp/$1.txt
echo "********************************************************************" >>/wastmp/$1.txt
echo "Checking Telnet connection from "$1 >>/wastmp/$1.txt
echo "********************************************************************" >>/wastmp/$1.txt
while read target;
do
x=$(sleep 3 | telnet `echo $target | awk 'BEGIN FS=":" print $1 '` ` echo $target | awk 'BEGIN FS=":" print $2
'` | grep -i connected | awk 'print $1')
if [[ "$x" == "Connected" ]];
then
echo $target"=Success" >>/wastmp/$1.txt
else
echo $target"=Fail, please check server & port">>/wastmp/$1.txt
fi
done </wastmp/target_server
预期结果: host1:port=失败,请检查服务器和端口 host2:port=失败,请检查服务器和端口 . . .
hostn:port=成功
【问题讨论】:
您可以尝试使用一个实用程序,例如在这里找到的那个,elifulkerson.com/projects/tcping.php,因为它是一个可以使用端口号的 ping。 一般答案,要强制使任何 shell 命令超时,您可以在其前面加上timeout
以在提供的时间内使该命令超时。例如timeout 5 telnet 1.3.4.5
将在 5 秒内自动超时,除非 telnet 在 5 秒前返回。请注意,当timeout
命令退出命令时,rc
将非零。
在命令对我有用之前添加超时。谢谢
【参考方案1】:
您需要发送 telnet 退出。它滞后的另一个原因是冗余 awk 命令的管道。
这就是我将如何编写 x 变量:
x=$(echo exit 0 | telnet $target 2>/dev/null | grep -o "Connected")
条件也可以简写为:
echo exit 0 | telnet $target 2>/dev/null | grep -o "Connected" 1>/dev/null && echo "Success" >>/wastmp/$1.txt || echo "Failed" >>/wastmp/$1.txt
【讨论】:
以上是关于如何验证两个 unix 主机之间的端口连接? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“connect timed out。请验证连接属性,并