3 / 2 / 1
Регистрация: 13.04.2020
Сообщений: 10
|
||||||
1 | ||||||
Пропинговать все IPv4 адреса в сети за минимальное время03.06.2020, 18:01. Показов 3915. Ответов 11
Доброго времени суток!
Недавно задался вопросом как пропинговать все ip адреса в сети (от 0.0.0.0 до 255.255.255.255). Написал небольшую программку на основе примера в доках с асинхронным пингом. Однако есть одна проблема: программа работает достаточно шустро но пингует асинхронно только младший октет: т.е. например от 192.168.1.0 до 192.168.1.255. Если пробовать пинговать большее количество адресов то ПК начинает "задыхатся". Пока пришел к решению пинговать пачками по 255 (в моем случае программа работает 2 минуты с хвостиком пингуя от aaa.bbb.0.0 до aaa.bbb.255.255):
0
|
03.06.2020, 18:01 | |
Ответы с готовыми решениями:
11
Даны части IPv4 адреса и нужно собрать из них все возможные адреса Пропинговать все адреса из 10 TextBox и покрасить в зеленый цвет если есть пинг Напишите программу, которая считывает IPv4 адрес и проверяет ее валидность. Форма записи IPv4 адреса – x.x.x.x Как пропинговать IP-адреса, содержащиеся в XML-файле? |
Пора на C++?
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275
|
|
03.06.2020, 21:49 | 2 |
NRG, смотря что вы имеете в виду под словом "сеть". Для локальной сети характерны только следующие адреса:
От 10.0.0.0 до 10.255.255.255; От 172.16.0.0 до 172.31.255.255; От 192.168.0.0 до 192.168.255.255; От 100.64.0.0 до 100.127.255.255. Если вам нужно пропинговать все адреса интернета, то это будет долго.
0
|
3 / 2 / 1
Регистрация: 13.04.2020
Сообщений: 10
|
|
04.06.2020, 08:38 [ТС] | 3 |
Да. Указанных сетей будет вполне достаточно.
Конечно, хотелось бы чтобы программа обладала некоторой гибкостью и в ней можно было бы задать любой диапазон номеров сети, но это в идеале. Приведенный код справляется с 192.168.0.0 - 192.168.255.255, но я не думаю что так же быстро он переберет и остальные (где меняется номер первых двух октетов). По моим прикидкам на это потребуется не менее 18 часов, что ооочень долго. Есть ли возможность как-то это реализовать с помощью широковещательных запросов?
1
|
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
04.06.2020, 11:33 | 4 |
NRG, весь диапазон IPv4 - это 232 адресов, 4 с лишним миллиарда.
Возьмите калькулятор и посчитайте с какой скоростью их надо пинговать, чтобы проверить все за приемлимое время. В качестве примера, пингуя по 1000 адресов в секунду (1 пинг за 1мс - реально ли?), проверка всего диапазона займет 50 дней.
0
|
Пора на C++?
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275
|
|
04.06.2020, 12:00 | 5 |
NRG, если с await не получается, попробуйте потоками. Пинг это несложная задача для процессора, так что потоков может быть и 50 и 100.
0
|
1517 / 908 / 328
Регистрация: 17.05.2015
Сообщений: 3,430
|
|
04.06.2020, 13:34 | 6 |
TrickyBestia, у вас какой то волшебный процессор, который генерирует потоки в зависимости от сложности задачи.
А у обычных людей процессор может одновременно выполнять количество задач равное количеству ядер. А создав 100 потоков процессор начинает прыгать с одной задачи на другую, при этом совершая тяжелую операцию переключения контекста
2
|
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,091
|
|
04.06.2020, 14:39 | 7 |
Посылайте широко вещательный сигнал.
Те узлы что откликнулись будут идти как удачный пинг и т.д. Добавлено через 3 минуты Пинговать каждый узел через цикл бессмысленно. Отдельно можно пинговать сервера циклом или важные узлы, но никто не делает отдельный пинг для каждого узла, представьте, какую нагрузку вы дадите на сеть. Это будет DOS атака. Как правило, в локальный сети диапазон меньше. Узел 10,57,100,4 Маска 255,255,0,0 Нету тут 4 с лишним миллиарда.
0
|
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
04.06.2020, 14:45 | 8 |
0
|
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,091
|
|
04.06.2020, 14:52 | 9 |
0
|
3 / 2 / 1
Регистрация: 13.04.2020
Сообщений: 10
|
|
04.06.2020, 16:21 [ТС] | 10 |
Верно. Из расчета затрат времени - на моей машине это займет не менее 90 дней на весь диапазон, и около 18 часов на сети выборочно. Трехмесячный DDoS для решения задачи не подойдет))
Также есть ещё один нюанс - более активных ~700 потоков уже заметны невооруженным ухом. Поэтому в примере за раз не более 255. C широковещательным запросом тоже не все ясно. Какой алгоритм? Создаем сокет. Говорим ОС, что он будет широковещательным. Отправляем широковещательный UDP в сеть, все, кто его получил отзываются эхом обратно. Для этого нужен МАС адаптера машины. Вручную прописывать - неприемлемо, значит нужно автоматом узнавать. Потом сканируем входящий трафик и ловим отклики? Что то подобное не работает в моей локальной сети. Плюс когда пакеты пойдут назад то их надо будет как-то "ловить", а использование сниферов в сетях явно не приветствуется - многие роутеры не пропускают бродкасты. Придется бороться ещё и с железом. Может есть какие либо примеры реализации чего-то подобного? Не может быть чтобы за все время никто не задавался похожей задачей. Хотелось бы посмотреть исходники. Объяснил как смог, надеюсь не запутал еще больше.
0
|
Пора на C++?
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275
|
|
05.06.2020, 12:06 | 11 |
Рядовой, это понятно, но что будет делать процессор, после того как отправит пинговое icmp сообщение? Ждать ответа? А раз поток ждёт, значит что он не грузит процессор. В это время процессор будет считать другой поток. Лично я когда-то делал похожее приложение, работающее с сетью, так оно работало в 40 потоках, и процессор максимум загружался на 12%, потому что при работе с сетью надо ЖДАТЬ
0
|
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
05.06.2020, 12:58 | 12 |
TrickyBestia, если поток 99% времени спит, то зачем он вообще нужен?
У вас больше времени уйдет на создание и запуск такого потока, чем этот поток сэкономит при работе с I/O. Добавлено через 15 секунд TrickyBestia, если поток 99% времени спит, то зачем он вообще нужен? У вас больше времени уйдет на создание и запуск такого потока, чем этот поток сэкономит при работе с I/O.
0
|
05.06.2020, 12:58 | |
05.06.2020, 12:58 | |
Помогаю со студенческими работами здесь
12
Автонастройка IPv4 адреса Определение широковещательного адреса по IPv4 и маске Свободные IPv4-адреса закончатся через 2 месяца Узнать все IP адреса компьютеров сети Сканер сети проверяет на все IP адреса Как пропинговать компьютер, подключен ли он к сети Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |