2011-07-29 41 views
2

telnet VNC Teamviewerなどと接続する必要があるかどうかを知るために、離れたポートが開いているかどうかをテストしたいと考えています。netcatコマンドの結果が非文字列で文字列に一致する

私はテストするために約10のポートがあります。私はそのためのスクリプトを作成しています。 私はこのコードで来ている。この時点で:

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! 

しかしで、私が表示され、「受け入れ」てしまったいかなるの場合:

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の結果のようなものです。なぜ私は理解できません。誰かが私の説明は私のミスはどこですか?

答えて

2

これは、netcatがそのメッセージを標準出力ではなく標準エラーに書き込むためです。したがって、変数resは空で、*refused*と一致しません。

コンソールでnetcatメッセージが表示される理由は、echo $res行のためではなく、標準エラーをキャプチャしていないためコンソールに送信されるためです。あなたがtestPortへの最初の行を変更した場合

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

それは動作するはずです。

+0

魅力的な作品です。私は配管やリダイレクションで非常に安易ではないので、それを考えなかった。ありがとう。 –