如何验证两个UNIX主机之间的端口连接?

时间:2019-05-28 14:33:11

标签: bash shell

我正在创建一个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 =成功

1 个答案:

答案 0 :(得分:0)

您需要向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