1

離れたポートが開いているかどうかをテストして、telnetVNCTeamviewerなどに接続する必要があるかどうかを確認したいと思います。

テストするポートは約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 に答える