netcat命令与字符串进行逻辑匹配的结果

时间:2011-07-29 13:04:45

标签: function shell netcat

我想测试哪个远程端口是开放的,知道我是否必须连接telnet VNC Teamviewer或其他什么。

我将有大约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!

但是在任何的情况下,我显示了“已接受”。我无法弄清楚为什么。有人可以解释一下我的错误在哪里吗?

1 个答案:

答案 0 :(得分:2)

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

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

如果您将testPort的第一行更改为:

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

它应该有用。