【问题标题】:How to verify port connectivity between two unix hosts? [duplicate]如何验证两个 unix 主机之间的端口连接? [复制]
【发布时间】: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 将非零。
  • 在命令对我有用之前添加超时。谢谢

标签: bash shell


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2014-12-22
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多