1

我想测试远程端口是否打开,以了解我是否必须连接 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!

无论如何,我都显示了“接受”。我不知道为什么。有人可以解释我的错误在哪里吗?

4

1 回答 1

1

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

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

如果将第一行更改testPort为:

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

它应该工作。

于 2011-07-29T13:20:36.197 回答