Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с потоками сканирования [WinXP]


Страницы:   1 2 3

bvv ©   (2009-09-17 14:57:00) 

Знатоки!
Написал программу сканирования сети.
Для сокращения времени сканирования разбил проверку адресов IP на потоки, если результаты поиска по каждому потоку выводить в свой файл проблем никаких. Если результаты поиска записывать во временный массив простая синхронизации потоков работает только при небольшом количестве потоков. Критические секции немного улучшают ситуацию, но поиск в 256 потоков находит число IP-адресов гораздо больше чем с 1792 потока, переход на Mutex проблемы не решает и оптимальным числом потоков остаётся ~512. Mutex используется только при завершении работы потока для записи результатов поиска в общий массив, да и то, для каждого потока организован свой раздел в массиве, в который нет доступа другим потокам. Процессор двух ядерный.
Всё процессорное время, во время сканирования, съедают Svchost и Acs.
Почему происходят такое различие результатов поиска, если число потоков отличается в три раза, если верить теории этого быть не должно.

С благодарностью Вл.


Anatoly Podgoretsky   (2009-09-21 12:04:00) [1]

Если не брать во внимание некоторые особенности и считать что бардака нет, что для каждой записи обратной зоные есть хоть одна прямая, то я не вижу разницы.


Сергей М.   (2009-09-18 17:13:00) [2]


> Anatoly Podgoretsky ©   (18.09.09 16:53) [44]


Ты что-то не понял)
Автор обращается не к прямой, а к обратной зоне.


Anatoly Podgoretsky   (2009-09-18 16:53:00) [3]

> Сергей М.  (18.09.2009 15:48:42)  [42]

Насколько я понял ваш разговор, речь идет о получение информации из ДНС адрес за адресом.
У ДНС можно получить всю информацию о домене за раз, как это сделано в NSLOOKUP


bvv   (2009-09-18 16:25:00) [4]

Спасибо Анатолий, я обязательно посмотрю литературу.

С благодарностью, В
Удачи Вам.


Сергей М.   (2009-09-18 15:48:00) [5]


> Anatoly Podgoretsky ©   (18.09.09 15:37) [41]


??


Anatoly Podgoretsky   (2009-09-18 15:37:00) [6]


> Точнее, сканирование-то есть, но сканируешь ты вовсе не
> то, что заявил в топикстарте: ты просто тупо шаришь по записям
> доступных тебе DNS-рерурсов.

Кстати ДНС в состояние выдать все записи зараз, и даже определенного типа, нет никакой нужды сканировать ДНС запись за записью.


Anatoly Podgoretsky   (2009-09-18 15:25:00) [7]

> bvv  (17.09.2009 17:12:08)  [8]

Поэтому и неверно вешать блок на один поток, пока он ждет ответа от несуществуеющего ИП, то остальные тоже ждут, а могли бы работать, если бы поток занимался только одним ИП. Результат может быть очень существенным, по сути равным обработке одного потока, даже если все ИП не существуют. Ну а класс С взят просто как удобная величина, поскольку обычно пингуют не больше одного класса за раз, на самом деле никакой связи с классами нет, это может произвольный список и количество потоков не обязательно 256, может эффективнее будет 512. Все будет зависить от количества адресов. Но и в этом случае один поток может обслужить 100 адресов, пока другой поток ждет ответа. И не надо потоки постоянно создавать разрушать, достаточно пула потоков.


bvv   (2009-09-18 14:11:00) [8]

Понял.

До свидания.
Разберусь с сетями вернусь.
Конец связи.
В


Сергей М.   (2009-09-18 14:01:00) [9]


> потоки всё-таки, можно рассматривать и без глубокого понимания
> работы сети, мне почему-то так кажется


Правильно кажется.
Более того, на этом этапе их следовало бы рассматривать в полном отрыве от сетевой логики.
Т.е. мухи отдельно (потоки, синхронизация и т.д. и т.п.), а котлеты отдельно (сети, протоколы и т.д. и т.п).
И уж только тогда следует сажать мух на котлеты, когда мухи станут большими-злыми-зелеными-осенними, а котлеты будут хорошо прожарены)

О чем я тебе и сказал в [32] (про эмулятор)


bvv   (2009-09-18 13:31:00) [10]

Да, я читал об UDP и других протоколах, назначение их тоже для меня более или менее ясно, Олифера прочитал и общая картина сети понятна, но теория без практики пустое место, пока своими руками что-то не сделаешь, нечего и говорить о том, что знаешь. Телефонный справочник может быть и интересное чтиво, особенно на ночь, но если нет телефона или некуда звонить...
То же и с сетями, надо пробовать и порверять.
Но потоки всё-таки, можно рассматривать и без глубокого понимания работы сети, мне почему-то так кажется...
Но может быть я не прав.


Сергей М.   (2009-09-18 13:15:00) [11]

Ключевой момент, могущий пролить свет на тайну: сетевые DNS-сервисы работают под управлением транспортного протокола UDP, который не гарантирует доставку инф.сообщений от источника к приемнику.
И чем "дальше" от твоего хоста находится хост, предоставляющий DNS-сервис, тем меньше вероятность достоверности получаемых при DNS-запросах данных.


Сергей М.   (2009-09-18 13:09:00) [12]

Точнее, сканирование-то есть, но сканируешь ты вовсе не то, что заявил в топикстарте: ты просто тупо шаришь по записям доступных тебе DNS-рерурсов.


bvv   (2009-09-18 13:07:00) [13]


>
> Придется в той или иной минимум необходимой мере им стать,
>  если ты действительно желаешь осознать происходящее.
> И это, скажем, не самое худшее лекарство от отупения)
> <Цитата>


Соглосен на все сто.

Удачи Вам!
В


Сергей М.   (2009-09-18 13:01:00) [14]


> не специалист по сетям


Придется в той или иной минимум необходимой мере им стать, если ты действительно желаешь осознать происходящее.
И это, скажем, не самое худшее лекарство от отупения)


Сергей М.   (2009-09-18 12:57:00) [15]


> Почему при сканировании


Да нет у тебя никакого сканирования, что ты заладил про сканирование ?)


> локалки, в которой я живу, она точно называет имена и адреса
> рабочих станций и серверов


Потому что эта инф-ция имеется и доступна в тех DNS-базах, к которым ты осуществляешь обращение при своем т.н. "сканировании".

А рассуждать о какой-то синхронизации сейчас попросту бессмысленно - нет достоверной инф-ции, которую требуется синхронно заносить в аккумулирующий ресурс.

Рекомендую в целях отладки мультипоточного синхронного взаимодействия реализовать эмулятор, который бы не лез в сеть, а возвращал бы данные о хостах из заранее подготовленной локальной таблицы.


bvv   (2009-09-18 12:37:00) [16]

Хорошо, я понял что запрос идёт на DNS.
Пусть в этом вотросе я полный ноль.
Согласен, это действительно не далеко от истины.

Но, почему при разном сисле потоков получаю разное число хостов, хотя запускаются одновременнодве программы, и таблица хостов на DNS не должна так быстро меняться?
Кроме того, повторное сканирование с малым числом потоков 512 точно повторяет предыдущий результат?
Я понимаю если бы результат сканирования 512 и 1792 потока отличался на единицы, но речь идёт о разах. 3-4 раза
Даже если опрос по этой функции даёт полный бред, то почему в одном случае этот бред повторяется с точностью до хоста, а во втором случае нет.
Почему при сканировании локалки, в которой я живу, она точно называет имена и адреса рабочих станций и серверов?

Я не специалист по сетям, и занимаюсь этим, чтобы не отупеть полностью, и не потерять навыки, поскольку решение систем трансцедентных и дифуравнений, при проектировании физических установок в нашей стране уже давно никого не интересут.


Сергей М.   (2009-09-18 12:30:00) [17]

И еще: за массированное сканирование хостов и сервисов можно и по шее получить от провайдера)


Сергей М.   (2009-09-18 12:18:00) [18]

Простая ассоциация для наведения порядка в голове:
Наличие у тебя или кого-либо в адресной книге (читай - база данных DNS) в мобильном телефоне записи
"Имя: Вася Пупкин (читай - HostName), Телефон: 123456789 (читай - HostAddress)"
неозначает:

- что Вася Пупкин жив;
- что у него есть телефон;
- что в телефоне установлена симка именно на номер 123456789;
- что владелец телефона и симки в дан.момент именно Вася Пупкин;
- что телефон этот включен;
- что на этот телефон можно позвонить и дозвониться;
- что ответит именно Вася Пупкин и никто иной.


bvv   (2009-09-18 12:04:00) [19]

Спасибо, буду разбираться.
С уважением, В


Сергей М.   (2009-09-18 11:59:00) [20]


> Мне нужно имя хоста


У хоста может не быть имени, от этого он хостом быть не перестанет.


> если есть имя, значит есть и хост


Нет.
Если есть имя, значит есть адрес хоста, а не хост.

Во-первых, ф-ции gethostbyaddr() нет никакого дела до того, присутствует ли хост в сети в момент ее вызова. Она к интересующему хосту не обращается вообще.

Во-вторых, ф-ция gethostbyaddr() позиционируется в Майкрософт как устаревшая, вместо нее настоятельно рекомендуется использовать протоколонезависимую ф-цию getnameinfo(), хотя суть использования новой или старой функции неизменна.

Так что до синхронизации тебе еще как до Китая - ты в принципене понимаешь что творишь и как это в действительности работает.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо