Сканирование локальной сети с помощью ping и Gnu Parallel - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь сканировать свою локальную сеть с помощью ping, вызывая с помощью Gnu Parallel. Код в идеале будет просто сообщать о тех IP-адресах, которые работают, и удалять любые подробные отчеты. Исходный код (без параллельного кода), который работает хорошо:

for ip in $(seq 1 254) ; do ping -t5 -c 1 192.168.0.$ip > /dev/null ; [ $? -eq 0 ] && echo "192.168.0.$ip UP" & done

Однако он раздражает все сообщения о завершении задания (set + m не помогает). Последовательный запуск занимает слишком много времени для опроса каждого IP-адреса.

Параллельный код, который работает до сих пор (для выполнения необходимо выполнить - dry -run):

seq 1 254 | parallel  --dry-run ping -t5 -c 1 192.168.0.{}

, но пытаясь сделать

seq 1 254 | parallel  --dry-run ping -t5 -c 1 192.168.0.{} ';' [ $? -eq 0 ] && echo "192.168.0.{} UP" 

или вариации этого, не удается достичь цели. Кто-нибудь может помочь с тестовой частью здесь?

Ответы [ 2 ]

1 голос
/ 08 января 2020

Взломали это - надеюсь, что это полезно для других.

seq 1 254 | parallel  ' ping -t5 -c 1 192.168.0.{} >/dev/null && echo 192.168.0.{} UP ' 2>/dev/null 
0 голосов
/ 08 января 2020

Из документации по Gnu параллельный тайм-аут, а не пинг, кажется более эффективным

seq 1 254 | parallel  --timeout 2 -j64 -keep-order ' ping -c 1 192.168.0.{} >/dev/null && echo 192.168.0.{} UP ' 2>/dev/null 
...