Есть такая штука, ознакомится можно Network Drivers: Windows 2000 DDK 1.1 About a Filter-hook Driver, на codeproject есть пример, http://www.wasm.ru/article.php?article=netfilter тоже немного описано, и пример есть. Поиск по форуму тоже ничего не принес: http://wasm.ru/forum/index.php?action=vthread&forum=12&topic=7628 - ни одного ответа! Я не очень буду удивлен, есть и в моем топике не будет ни одного ответа. Вопросы: 1. есть ли еще информация касательно этой темы? 2. вроде все сделал правильно, использую события для определения окончания запроса устройству, как на codeproject, в других примерах этого нет - поэтому фильтр ставится через раз. Все вроде-бы хорошо, но не получается анализировать пакеты: то они пустые - в них одни нули, то они не полные. Может это из-за фаервола? Или я чего-то непонимаю? Нужна информация как правильно анализировать пакеты. 3. еще проблема получения приложением данных от драйвера, если приложение должно реагировать в реальном времени. Используя совместно обьект событие, драйвер получая пакет, передает его приложению - не выход, так как оно просто не успевает обработать посылку, как тут же приходит новая. Копить в буфере несколько пакетов, а потом передавать - тоже не то, так как нереалтайм. Цель - простейший сниффер, с разбором пакетов в юзер-моде.
Вот выдержка из DDK It is not recommended to implement a firewall-hook driver (or firewall driver) for Microsoft® Windows® XP and later versions of the operating system. Если firewall включен в XP, то и облом, т.к. может стоять только один hook. Далее в том же DDK To provide firewall functionality on Windows XP and later, you should create an NDIS intermediate miniport driver to manage packets sent and received across a firewall. For information on creating an NDIS intermediate miniport driver, see NDIS Intermediate Drivers. Т.к. сниффер тот же firewall (различия в операциях над пакетами) то делай выводы По 2-му пункту только предположение Эти пакеты могут быть испорчены в каналах, служебные пакеты виндов и прочее, а драйвер их всё равно принимает и отдает выше стоящим модулям, которые отсеиваются ими. По 3-му пункту предположений нет
Во-первых хотелось бы узнать версию твоей винды. 1. На wasm.ru и codeproject есть рабочие примеры. 2. Возможно не запущен драйвер IpFilterDriver - его надо запускать вручную. А данных внутри пакета может и не быть - тебе приходит только заголовок. Хотя у меня на Win2k SP4 есть и данные. 3. Данные в реальном времени передать не удастся - callback-функция работает на IRQL == 2. Но для сниффера этого и не надо. Пакеты можно разобрать и потом. А вообще этот интерфейс предназначен для файрволов. Простейший же сниффер можно написать используя Winsock2. Пример есть на sources.ru.
ясное дело, что драйвер запущен, не обязательно это делать вручную, с этим проблем нет. Используя rawsockets можно, но фаерволы блокируют это. Тестировал на Win2k SP4 - данные есть, но они искаженные.
Saint German Так ) чтоб ловить пакеты на совем компе можно и фаервол вырубить ) проблема чтоли ? ради науки вырубить фаервол . Да кстати ну создашь ты Ndis protocol driver ! и что ? ты думаешь он будет получать все пакеты приходящие на интерефейс ? А счего ты взял что твой протокольный драйвер будет самым нижним в списке этих протокольных драйверов ? А Фаервол я уверен стоит самым первым и хрен каму отдаст какой нить пакет (PS смотри картинку в DDK есть схема "Intermediate Driver in the NDIS Driver Stack" очень наглядно все паказано) Ниже всех могут быть только реальные пацаны (с) 90210 а вообще если на счет доков то я вот читаю DDK и смотрю сорцы (packet из win2000 и ndisuio из winXP) и неплохо.. все проясняется потихонечку ..
Задача не вырубить фаервол, это действительно можно сделать, но речь не о том. Просто пытаюсь сделать сниффер, и оперативно реагировать на некотроые пакеты в юзер-моде, причем он не перехватывающий запросы к tdi или ndis, а используя этот (IpFilterDriver) интерфейс. Задача научиться анализировать пакеты, понять как устроены аналоги, сделать лучше.