При изучении NDIS что-то я запутался.. Для снифера трафика нужно создавать драйвер протокола, и при проходе через него пакета делать копию пакета и работать уже с копией или нужно создавать драйвер минипорта, и при прохоже через него пакета делать копию пакета и пересылать пакет дальше по цепочке драйверов? Или нужно создавать драйвер протокола и драйвер минипорта?
Предположительно имеется в виду драйвер NDIS IM (intermediate). Как следует из названия он вклинивается между драйвером протокола и минипорта, это должно происходить прозрачно для обоих. Таким образом для протокола он реализует интерфейс минипорта, а для драйвера минипорта интерфейс протокола. Это лучше созерцать на картинках (последняя) : http://msdn2.microsoft.com/en-us/library/ms800889.aspx Драйвер один но реализует несколько наборов интерфейсов.
Я как понимаю нужно работать с драйвером протокола и мипорта, т.к. это для того, что когда мой драйвер встанет между драйвером сетевой карты и драйвером TDI, т.е. промежуточным будет, чтобы не нарушить связь между ними.. Заглянув в исходники WinPCap, я не увидел там работы с минипортом, только с провайдером.. Вобщем странно как-то это.. Поизучав NDIS, я понял что перехватить можно пакет, по заголовку пакета можно узнать IP, порт, данные, протокол и др., но какая программа этот пакет послала или должна принять узнать ИМХО в NDIS нельзя.. Для этого лучше работать с TDI.. Прав ли я? Вот к примеру.. Если нужно перехватывать сообщения аськи. То в данных перехваченного пакета будет FLAP пакет аськи.. Но нам же нужно же как-то узнать, что перехваченный пакет принадлежит именно аське или qip-у, а не еще какой-то программе, иначе в данных будет не FLAP пакет а совсем другое..
Dmitry_177 Вот посмотри здесь выложен пример использования библиотеки WinPcap для создания простенького сетевого сниффера: http://www.codeproject.com/csharp/pktcap.asp А вот здесь пример перехвата пакетов всей сети и перевод сетевой карты в прослушивающий режим (PromiscuousMode): http://www.codeproject.com/csharp/sendrawpacket.asp Пользуйся на здоровье....
Dmitry_177 да ты прав, для того что бы знать процесс посылающий пакеты нужно использовать TDI драйвер.
Но с другой стороны клонов аськи тоже очень много.. Так что узнавать процесс я думаю мало чем поможет, если я к примеру буду сидеть на самодельной аське, назвав ее как-нибудь SuperICQ =) Как тогда лучше определять что это аськины пакеты? Может по порту?
А еще ведь FLAP-пакет может в нескольких пакетах придти.. В первом будет "0x2A", а в следующих пока не придет весь FLAP-пакет уже не будет.. Вот как можно определить что следующие пакеты это продолжение текущего FLAP-пакета?
WORD.B xx xx SEQUENCE The FLAP sequence number. It is chosen at random before every connection and increased with every packet. This number is positive; wrap to zero when it becomes negative. http://www.micq.org/ICQ-OSCAR-Protocol-v7-v8-v9/Packets/Basic-FLAP.html Но это уже относиться к деталям реализации FLAP. Если такой темы ещё нет, то я бы предложил создать новую (наверное было бы интересно покурить).