LINUX.ORG.RU

Тормозной netcat, чем лечить?

 


0

1

Понадобилось мне для личных целей написать скриптик, проверяющий открытость порта у большого количества хостов (да, nmap не вариант). Для этой цели был выбран netcat, но возникла проблема:

u@srv0:~> time nc -w1 -z 10.10.10.100 22
0.000u 0.002s 1:15.01 0.0%      0+0k 1+0io 0pf+0w

При сканировании несуществующего ip-адреса вот такие бешеные задержки. Подскажите плиз, это лечиться? И если да, то как?

P.S.: Ман вкуривал.

★★★★★

И да, -n не помогает:

u@srv0:~> time nc -w1 -nz 10.10.10.100 22
0.000u 0.001s 1:15.00 0.0%      0+0k 0+0io 0pf+0w
IPR ★★★★★
() автор топика
Ответ на: комментарий от imul

Проверяй единичным пингом доступность хоста перед цеплянием к нему неткетом.

Проверяю. Но, увы, некоторые хосты выбывают до того как к ним присосётся nc.

IPR ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Почему?

Потому что на тех хостах, с которых будет производиться поиск, его тупо нет и не будет возможности поставить. Да и выхлоп его мне парсить не по вкусу.

IPR ★★★★★
() автор топика
Ответ на: комментарий от IPR

Как?

ну как?
запустить в фоне сразу тыщу процессов 'nc', каждый на свой адрес - через пару секунд они все уже отработают

anonymous
()
Ответ на: комментарий от anonymous

Хм, вариант неплохой, но вот не приложу ума как это сделать в таком скрипте:

#!/bin/sh

IPSSHCK="$@"

[ "$IPSSHCK" ] || { echo "Empty argument. Exit." ; exit 1 ; }
[ "$SSHPORT" ] || SSHPORT="22"

for IPADDR in $IPSSHCK ; do
    nc -w1 -nz $IPADDR $SSHPORT > /dev/null 2> /dev/null && echo $IPADDR
done

Надо же чтоб $IPADDR с адресом доступного хоста возвращался в stdout, который необходимо направлять в файл или через конвейер другой команде.

IPR ★★★★★
() автор топика
Ответ на: комментарий от IPR
#!/bin/sh

check_simple()
{
    nc -w1 -nz $1 $2 &> /dev/null && echo $1
}

IPSSHCK="$@"

[ "$IPSSHCK" ] || { echo "Empty argument. Exit." ; exit 1 ; }
[ "$SSHPORT" ] || SSHPORT="22"

for IPADDR in $IPSSHCK ; do
    check_simple $IPADDR $SSHPORT &
done

wait
anonymous
()

по идее, таймаут для вызова connect где-то должен настраиваться, в настройках ядра наверное, дефолтный около 1 минуты для данной задачи не подходит :)

Harald ★★★★★
()
Ответ на: комментарий от anonymous

Спасибо, то что надо.

IPR ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.