Результат команды netcat, нелогично сопоставляющий строку - PullRequest
2 голосов
/ 29 июля 2011

Я хочу проверить, какой удаленный порт открыт, чтобы узнать, нужно ли мне подключаться к 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 Ответ

2 голосов
/ 29 июля 2011

Это потому, что netcat записывает свое сообщение в стандартную ошибку, а не в стандартный вывод.Итак, переменная res пуста и не соответствует *refused*.

. Причина, по которой вы видите сообщение netcat на консоли, не в строке echo $res, а в том, что вы не 'захватывает стандартную ошибку, поэтому она отправляется на консоль.

Если вы измените первую строку testPort на:

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

Это должно работать.

...