在 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
对我来说很好用。它返回0
或1
,具体取决于连接状态。你有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. 1
nc 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 脚本中检查远程端口状态 [重复]的主要内容,如果未能解决你的问题,请参考以下文章