在 bash 脚本中检查远程端口状态 [重复]

Posted

技术标签:

【中文标题】在 bash 脚本中检查远程端口状态 [重复]【英文标题】:Checking remote port status in bash script [duplicate] 【发布时间】:2017-04-01 10:37:36 【问题描述】:

我需要在 bash 脚本中检查远程服务器上的端口,然后脚本才能继续。 我在这里和互联网上搜索,但找不到适合我的答案。

我使用的是 RHEL 7.2 虚拟机,所以我在 nc 命令或 /dev/tcp/ 东西中没有 -z 参数。 也 nc remote.host.com 1284 < /dev/null 不工作,因为每次我得到退出代码 1。

基本上我需要这样的东西:

/bin/someting host port

if [ $? -eq 0 ]; then
 echo "Great, remote port is ready."
else
 exit 1
fi

【问题讨论】:

不管怎样,nc host.com 1234 < /dev/null 对我来说很好用。它返回01,具体取决于连接状态。你有nmap吗? nmap --open -p<port> <host> | grep -q " open " 怎么样? 使用 RHEL7,您可以使用 /dev/tcp。 ls 命令看不到它。 @Cyrus:不要为我工作:$ /dev/tcp/google.com/80 -bash: /dev/tcp/google.com/80: No such file or directory@eddiem:nc remote_server 1313 < /dev/null ; echo $? Ncat: Connection reset by peer. 1nc remote_server 1477 < /dev/null ; echo $? Ncat: Connection timed out. 1 根本不可见。检查这个:exec 3<>/dev/tcp/www.google.com/80; echo -e "GET / HTTP/1.0\r\n" >&3; cat <&3 @Rohlik 您需要在命令前面加上 : shell 内置命令。请参阅下面的答案 【参考方案1】:

nmap 怎么样?

SERVER=google.com
PORT=443
state=`nmap -p $PORT $SERVER | grep "$PORT" | grep open`
if [ -z "$state" ]; then
  echo "Connection to $SERVER on port $PORT has failed"
else
  echo "Connection to $SERVER on port $PORT was successful"
  exit 1
fi

请注意,您必须安装 nmap。

yum install nmap #Centos/RHEL
apt-get install nmap #Debian/Ubuntu

您可以从source 编译和安装。

【讨论】:

【参考方案2】:

您可以使用 Bash 本身执行此操作,使用它的内置 /dev/tcp 设备文件。 如果端口关闭,以下将抛出连接拒绝消息。

: </dev/tcp/remote.host.com/1284

可以这样写:

(: </dev/tcp/remote.host.com/1284) &>/dev/null && echo "OPEN" || echo "CLOSED"

bash 参考手册中/dev/tcp 的详细信息:https://www.gnu.org/software/bash/manual/html_node/Redirections.html

【讨论】:

感谢您的回复。我尝试了您的解决方案,但是此命令的超时时间很长 - 2 分钟以上。 是的,没错,您可以在它前面加上timeout 命令以使其更快完成。

以上是关于在 bash 脚本中检查远程端口状态 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

远程检查 IP 端口状态

如何在 ssh / 远程 bash 命令中转义单引号字符?

Linux监控远程端口是否开启脚本

如何创建一个 bash 脚本来检查 SSH 连接?

怎么修改ssh远程端口脚本?

如何检查远程IP和端口是不是可用?