2011-07-29 24 views
2

我想测试至极遥远的端口是否开放,以了解是否必须连接telnet VNC Teamviewer或其他。netcat命令的结果不符合字符串

我将有大约10个端口来测试,我正在为它做一个脚本。 在这一点上我来到这个代码:

function testPort(){ 
     res=`nc -v $1 $2 < /dev/null` 
     echo $res 
     if [[ "$res" == *refused* ]] 
     then 
       echo "refused" 
       return 0 
     else 
       echo "accepted" 
       return 1 
     fi 

} 

if test -z "$1" 
then 
     echo "What's the adress?" 
     read IP 
else 
     IP="$1" 
fi 

testPort $IP 80 

echo $res的结果是这样的:

nc: connect to 192.168.0.110 port 80 (tcp) failed: Connection refused 
RFB 003.889 Connection to 192.168.0.110 5900 port [tcp/vnc-server] succeeded! 

任何情况下,我得到了“接受”显示。我无法弄清楚为什么。有人能解释我的错误在哪里吗?

回答

2

这是因为netcat将其消息写入标准错误而不是标准输出。所以,变量res是空的,并且不匹配*refused*

您在控制台上看到netcat消息的原因不是因为echo $res行,而是因为您没有捕获标准错误,所以它将转到控制台。

如果更改的testPort第一行:

res=`nc -v $1 $2 < /dev/null 2>&1` 

它应该工作。

+0

工程就像一个魅力。没有想到它,因为我对管道和重定向不太放心。谢谢。 –