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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.