LINUX.ORG.RU

Опрос устройств по ICMP


0

0

Привет!

Есть необходимость опросить 30000 устройств по ICMP за минимальное
время и с минимальной загрузкой системы.

Очевидно, что порождение процесса или треда не подходит, т.к.
система существенно грузится и вообще есть вероятность сделать
fork-бомбу.

Есть ли какой-нибудь асинхронный режим опроса по ICMP?
Или другая технология?

Спасибо!

Re: Опрос устройств по ICMP

дык а в один тред никак не в пихнуть? или опработка ехо намечается долгой? ты ведь не моментально 30 000 хостов обзванивать будешь, а в течение какого-то времени?

Pi ★★★★★ ()

Re: Опрос устройств по ICMP

Если ты используешь обычный IP-сокет, то почему не использовать poll? Пишешь запросы, потом ожидаешь ответов на poll.

tailgunner ★★★★★ ()
Ответ на: Re: Опрос устройств по ICMP от Krivenok_Dmitry

Re: Опрос устройств по ICMP

ехо реквесты в любом случае будут последовательны, т.к. им придётся стать в очередь на интерфейсе ;)

смотри как сделан пинг с ключом -f - он асинхронен.

Pi ★★★★★ ()
Ответ на: Re: Опрос устройств по ICMP от Krivenok_Dmitry

Re: Опрос устройств по ICMP

И как достигается асинхроность при использовании -f?

anonymous ()

Re: Опрос устройств по ICMP

Я бы сделал так: форк, один процесс сразу начинает формировать и посылать icmp-request пакеты через raw-sockets, при этом в теле пакета сохраняется номер опрашиваемого устройства + какой-нибудь magic-number. Второй процесс слушает интерфейс через bpf (или что там аналогичное в линуксе), собирая все icmp-reply пакеты, вычитывая тело и отмечая там у себя какое именно устройство откликнулось

swizard ()
Ответ на: Re: Опрос устройств по ICMP от Pi

Re: Опрос устройств по ICMP

> я может чего-то не знаю, но как это реализуется в случае ICMP?

Насколько я понимаю, ICMP-сообщения посылаются/принимаются через сокет SOCK_RAW. То есть: создаешь N сокетов, посылаешь в каждый M пакетов, ждешь ответов на poll (N*M == 30000).

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