Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WinPcap, нужна помощ с этой вещицей 
V
    Опции темы
WebDragon
  Дата 26.4.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 24.12.2007
Где: г. Липецк

Репутация: нет
Всего: нет



Уважаемые товарищи программисты!!!!
Если кто работал с WinPcap - такая проблема, когда я включаю на перехват пакетов свою прогу с помощью функции:

Код

pcap_loop(handle,-1,PrintHeaders,NULL)


У меня подвисает окно полностью, кто знает как помоч, пожалуйста, как можно скорее ответте - что делать?
PM MAIL ICQ   Вверх
azesmcar
Дата 26.4.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



WebDragon

pcap_loop тут непричем, твое окно повиснет даже если ты напишеш

Код

while (true)
{
 ...
}

Эта функция делает тоже самое, и она понятия не имеет о том что у тебя есть окно и разумеется не обрабатывает сообщения твоего окна.

Решения
1. запускать loop в отдельном потоке
2. найти аналог функции который не запускает цикла и организовать цикл вручную
Код

while (true)
{
  pcap_что-то();
  Application->ProcessMessages(); //обрабатываем оконные сообщения
}

PM   Вверх
WebDragon
Дата 26.4.2009, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 24.12.2007
Где: г. Липецк

Репутация: нет
Всего: нет



Просьба напиши как в отдельном патоке ее запустить... сколько не парился с потоками, чет они не фурычили
PM MAIL ICQ   Вверх
azesmcar
Дата 26.4.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



вот мануал
http://www.manpagez.com/man/3/pcap_loop/
Цитата

pcap_loop() processes packets from a live capture or ``savefile'' until cnt  packets are processed


Код

while (true)
{
  pcap_loop(pc, 1, handler, user); //читаем только один пакет
  Application->ProcessMessages(); //обрабатываем оконные сообщения
}

так должно сработать

Цитата

Просьба напиши как в отдельном патоке ее запустить... 

На билдере не могу, у меня нет билдера. На память не напишу, давно это было.
можно через _beginthreadex

Цитата

сколько не парился с потоками, чет они не фурычили 

код покажи - поправим

Это сообщение отредактировал(а) azesmcar - 26.4.2009, 00:26
PM   Вверх
WebDragon
Дата 9.5.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 24.12.2007
Где: г. Липецк

Репутация: нет
Всего: нет



Спапсибо, нашел как еще поток создать, все работаетsmile

Это сообщение отредактировал(а) WebDragon - 9.5.2009, 23:16
PM MAIL ICQ   Вверх
Avashah
Дата 18.6.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



кто-нибудь использовал WinPcap для перехватывания пакетов на удаленной машине? у меня возникла проблема с этим. задача следующая: 
1. получаем список сетевых устройств с локальной машины и с удаленной.
2. выбираем по одному и там и там.
3. открываем их с параметром promisculousmode = false.
4. устанавливаем на оба устройства одинаковый фильтр вида: (src host <local host> and dst host <remote host> and dst port <port on remote host>) or (src host <remote host> and src port <port on remote host> and dst host <local host>).
5. в качестве обработчиков события прихода пакетов выставляем простые процедуры, в которых реализован подсчет кол-ва вызовов. для локального и удаленного устройства отдельно.
6. засекаем время и начинаем отслеживание и там и там
7. выполняем запрос на <remote host> (я выполнял обычный SQL-запрос к MSSQL Server, который работает с 1433 портом)
8. выключаем отслеживание и получаем временной интервал - затраченное время.
цель в том, чтобы разделить потраченное время на три части: 1) время прохождения пакетов от локальной машины до удаленной (запрос), 2) время обработки запроса на сервере, 3) время прохождения пакетов от удаленной машины до локальной (ответ).

и вот проблемы: 
1. счетчики показывают сильно разнящиеся числа. скажем, входящих/исходящих пакетов на локальном устройстве в 3-4 раза меньше, чем на удаленном, что при таком фильтре вызывает недоумение.
2. в результате экспериментов выяснилось, что события отправления с одного устройства и прихода пакета на другое устройство генерируются в странном порядке - у меня несколько раз получалось так, что пакет как бы сначала приходил на точку назначения, а уже после отправлялся. хотя пометки времени в заголовке пакетов проставляются драйвером перехвата корректно.

кто-нибудь сталкивался с подобным?
PM MAIL   Вверх
xvr
Дата 19.6.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Avashah @ 18.6.2009,  17:18)
и вот проблемы: 
1. счетчики показывают сильно разнящиеся числа. скажем, входящих/исходящих пакетов на локальном устройстве в 3-4 раза меньше, чем на удаленном, что при таком фильтре вызывает недоумение.

TCP/IP стек порезал пакеты, имеет право  smile Пардон, стек не при чем - на голые пакеты он не влияет. Пакеты могли потеряться по дороге из за колизий (и роутинга, если он был) Статистику не пробовали смотреть?

Цитата

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



Это сообщение отредактировал(а) xvr - 19.6.2009, 14:44
PM MAIL   Вверх
Avashah
Дата 22.6.2009, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата

Подозреваю, что пометки времени были локальные для каждого компьютера, и что часы у них не синхронизированны

Разве локальное время этих машин влияет на очередность генерации событий? А тут иногда (но не всегда!) получается так, что событие получения пакета генерируется раньше чем событие отправки пакета. Возможно ли, что потеря пакетов и эта неразбериха с генерацией событий происходит из-за переполнения буфера сохранения пакетов? 
И еще вопрос, который меня мучает уже неделю: возможно ли как-то сравнить два произвольных пакета, которые переданы параметром в процедуру обработки прихода пакета? Уточняю: "Пакет ушел с машины А и пришел на машину В. Это тот самый пакет, который ушел с машины А?"

Это сообщение отредактировал(а) Avashah - 22.6.2009, 10:43
PM MAIL   Вверх
xvr
Дата 22.6.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Avashah @ 22.6.2009,  09:25)
Цитата

Подозреваю, что пометки времени были локальные для каждого компьютера, и что часы у них не синхронизированны

Разве локальное время этих машин влияет на очередность генерации событий? 

На очередность - нет. А на время, которое стоит в timestamp пакета - да. Эти времена суть локальные времена машин, где пакет принят/передан, и могут отличаться.
Цитата

А тут иногда (но не всегда!) получается так, что событие получения пакета генерируется раньше чем событие отправки пакета. 
События генерируются на разных машинах и доставляются на одну. Порядок их генерации вполне фиксированн, а вот порядок приема - нет, так как процесс доставки события сам по себе занимает время, причем недетерминированное

Цитата

Возможно ли, что потеря пакетов и эта неразбериха с генерацией событий происходит из-за переполнения буфера сохранения пакетов? 
Может.
Если хотите ТОЧНО восстановить очередность, надо полагаться не на порядок приема пакетов, а на timestamp в winpcap описателях пакетов. Но нужно засинхронизовать время на компах (см NTP)

Цитата

И еще вопрос, который меня мучает уже неделю: возможно ли как-то сравнить два произвольных пакета, которые переданы параметром в процедуру обработки прихода пакета? Уточняю: "Пакет ушел с машины А и пришел на машину В. Это тот самый пакет, который ушел с машины А?"
Сравнить содержимое (или лучше какой нибудь хэш, типа MD5 или SHA1)
PM MAIL   Вверх
Avashah
Дата 22.6.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата

На очередность - нет. А на время, которое стоит в timestamp пакета - да. Эти времена суть локальные времена машин, где пакет принят/передан, и могут отличаться.

Да, это ясно.
Цитата

События генерируются на разных машинах и доставляются на одну. Порядок их генерации вполне фиксированн, а вот порядок приема - нет, так как процесс доставки события сам по себе занимает время, причем недетерминированное

Вот оно что... Ясно.
Цитата

Сравнить содержимое (или лучше какой нибудь хэш, типа MD5 или SHA1)

Сейчас я сравниваю МАС-адреса пакетов (источника и назначения), а так же побайтово блок данных пакетов. Однако возникло бредовое подозрение, что после получения пакета пакет может быть отличен от оригинала. Основано оно на том, что я просто выводил в отдельные файлы исходящие и приходящие пакеты на обоих устройствах, а потом просто пытался провести параллель между тектовыми представлениями серий пакетов. Разубедите меня пожалуйста!smile
p.s. Большое спасибо за информацию! Я как-будто решал систему из одного уравнения, но с несколькими неизвестными. Теперь все более понятно.
p.p.s. Кстати, пакеты отлавливаются Pcap-драйвером до фрагментирования или после? 

Это сообщение отредактировал(а) Avashah - 22.6.2009, 17:25
PM MAIL   Вверх
xvr
Дата 22.6.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Avashah @ 22.6.2009,  16:26)
Сейчас я сравниваю МАС-адреса пакетов (источника и назначения), а так же побайтово блок данных пакетов. Однако возникло бредовое подозрение, что после получения пакета пакет может быть отличен от оригинала. 

Не должно. Ethernet MAC пакеты при передаче/приеме не модифицирует.

PM MAIL   Вверх
Avashah
Дата 22.6.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Мне вот тут подсказывают, что измениться может как минимум заголовок, но это я предполагал. Как же быть? Что неизменное в пакете? Ведь блок данных может повторяться в разных пакетах, и по нему так же однозначно идентифицировать пакет нельзя.
PM MAIL   Вверх
xvr
Дата 22.6.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Заголовок не будет меняться если у вас прямое соединение (хаб либо свич). Если по дороге стоит маршрутизатор, то пакет вполне могут вообще порубить в капусту  smile 
PM MAIL   Вверх
Avashah
Дата 23.6.2009, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата(Avashah @  22.6.2009,  16:26 Найти цитируемый пост)
События генерируются на разных машинах и доставляются на одну. Порядок их генерации вполне фиксированн, а вот порядок приема - нет, так как процесс доставки события сам по себе занимает время, причем недетерминированное

Стоп, стопsmile Давайте разберемся: если у нас два открытых устройства - локальное и удаленное, то во время отправки пакетов с локальной на удаленную собылие отправки всяко должно происходить раньше, оно же никуда не доставляется. А тут почему-то не всегда так. Есть какие-то тонкости?
Цитата(xvr @  22.6.2009,  19:44 Найти цитируемый пост)
Если по дороге стоит маршрутизатор, то пакет вполне могут вообще порубить в капусту  smile  

Маршрутизатор рассматривать не будем, т.к. в таком случае толком фильтр не построишьsmile
PM MAIL   Вверх
xvr
Дата 23.6.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Avashah @ 23.6.2009,  08:57)
Стоп, стопsmile Давайте разберемся: если у нас два открытых устройства - локальное и удаленное, то во время отправки пакетов с локальной на удаленную собылие отправки всяко должно происходить раньше, оно же никуда не доставляется.

Доставляется - из драйвера в приложение. Удаленное событие (приемки) тоже доставляется - от TCP/IP стека (через которое оно идет) опять же до приложения.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1390 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.