如何验证两个 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。请验证连接属性,并

如何在 Linux/Unix 系统中验证端口是不是打开

一个电脑显示器怎么连接两个电脑主机使用?

Windows认证机制小结

通过 JSP 从一台服务器到另一台服务器的 Telnet 端口连接