Сетевой фильтр драйвер для мониторинга вх/исх пакетов
От: Suares  
Дата: 05.01.17 11:55
Оценка:
Здравствуйте!

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

    IP получателя и отправителя + их порты;
    ID процесса который создает соединение;
    Количество принятых и отправленных байтов;
    Продолжительность соединения;

Сейчас ищу подходящий драйвер из предоставленных примеров в гите.
Но пока безрезультатно. Подскажите пожалуйста на какой пример мне стоит обратить внимание?

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

И последний вопрос. Какой по Вашему мнению эстимейт такого фильтра драйвера?
Re: Сетевой фильтр драйвер для мониторинга вх/исх пакетов
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.01.17 12:26
Оценка: +1
Здравствуйте, Suares, Вы писали:

S>У меня есть задача по написанию сетевого фильтра драйвера для перехвата входящих и исходящих пакетов.

S>Для начала я бы хотел вытягивать такую информацию с пакетов:

Не надо ничего писать, все уже давно написано: https://www.winpcap.org/
Re: Сетевой фильтр драйвер для мониторинга вх/исх пакетов
От: -prus-  
Дата: 06.01.17 09:59
Оценка:
Здравствуйте, Suares, Вы писали:

S>Здравствуйте!


S>У меня есть задача по написанию сетевого фильтра драйвера для перехвата входящих и исходящих пакетов.

S>Для начала я бы хотел вытягивать такую информацию с пакетов:

S>

    S>IP получателя и отправителя + их порты;
    S>ID процесса который создает соединение;
    S>Количество принятых и отправленных байтов;
    S>Продолжительность соединения;
    S>

Тут зависит от задачи. Эту информацию легко получать на транспортном уровне, если реализовывать фильтр-дравйер транспортного уровня.
Если будете использовать NDIS, то там, по-крайней мере раньше, были трудности с получением информации о процессах, т.к. нотификаторы сетевого уровня вызывались в контексте произвольных процессах вроде. Плюс ко всему понятия сессии там нету, т.к. это сетевой уровень и вам придется реализовывать это самому.
Однако, в качестве эксперимента, можно попробовать сделать связку транспортного уровня и сетевого по паре IP + порты + протокол, например. Т.е. на транспортном уровне хранить таблицу id-процесса, IP + порты + протокол и при приходе сетевого пакета на уровне NDIS запрашивать у транспортного уровня информацию о процессе по IP + порты + протокол. Но, как вы понимаете, придется писать 2 фильтра — сетевой и транспортный и постоянно нужно следить за актуальностью таблицы на транспортном уровне (удалять записи,добавлять новые и тп).
Еще много зависит от ОС. Если вам нужно поддерживать начиная с XP, то придется делать TDI, NDIS. Если начиная с Vista, то там есть WFP, который вам может подойти.

Посмотрите еще проекты windivert и netfilter.
С уважением,
Евгений
Re: Сетевой фильтр драйвер для мониторинга вх/исх пакетов
От: ioni Россия  
Дата: 16.01.17 16:48
Оценка:
А что же никто wireshark не предложил
Re[2]: Сетевой фильтр драйвер для мониторинга вх/исх пакетов
От: Suares  
Дата: 17.01.17 09:15
Оценка:
Здравствуйте, ioni, Вы писали:

I>А что же никто wireshark не предложил


Неявно ссылка на шарк была в тех ресурсах, что со мною поделились.
Re[2]: Сетевой фильтр драйвер для мониторинга вх/исх пакетов
От: sr_dev  
Дата: 18.01.17 16:32
Оценка:
Здравствуйте, ioni, Вы писали:

I>А что же никто wireshark не предложил


ЕМНИП он WinPcap использует, упомянутый
Re: Сетевой фильтр драйвер для мониторинга вх/исх пакетов
От: sr_dev  
Дата: 18.01.17 16:35
Оценка:
Здравствуйте, Suares, Вы писали:


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

S>Если у Вас был опыт по написанию такого фильтра драйвера подскажите подводные камни которые меня ждут?

Сырыми сокетами (raw sockets) это можно сделать вообще без драйверов полностью в юзермоде
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.