在bash脚本中检查远程端口状态

时间:2016-11-17 18:32:42

标签: linux bash networking scripting

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

我使用的是RHEL 7.2虚拟机,因此我在-z命令或nc内没有/dev/tcp/参数。 另外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

2 个答案:

答案 0 :(得分: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编译和安装。

答案 1 :(得分:0)

您可以使用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