LINUX.ORG.RU

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


0

0

Привет!

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

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

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

Спасибо!

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

Pi ★★★★★
()

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

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

Ты имеешь ввиду последовательный опрос?
Тогда время опроса будет равно сумме времен опроса каждого устройства.
Это вообще худший случай.

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

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

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

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

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

anonymous
()

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

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

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

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

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

вообще-то может быть - не сталкивался

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