NDIS IM драйвер и модем (WAN), помогите
От: mav123  
Дата: 20.05.07 19:14
Оценка:
Приветствую, All!

Есть NDIS Intermediate Driver (обычный passthru из примеров, немного доработанный для сниффанья пакетов). Возникла проблема с тем, что драйвер видит все модемные WAN подключения как один адаптер NDISWANIP, но мне нужно идентифицировать конкретное модемное WAN подключение, а точнее его айпишник в процессе работы. Для получения IP-адресов адапетров я использую функцию GetAdaptersInfo из юзермода, а затем, сравнивая мак-адреса, полученные из драйвера с мак-адресами, полученными из GetAdaptersInfo нахожу айпишник адаптера.

Такой подход работает с Ethernet-адаптерами, но не с модемными подключениями.

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

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

Я вижу 2 пути решения задачи:
1. Изначально енумить все модемные подключения, которые зарегистрированы в системе и выяснять их мак-адреса, если это возможно.


2. Получать какое-то уведомление от системы (не важно, в кернел моде или в юзер моде), что установлено или разорвано модемное соединение. После этого уже вызывать GetAdaptersInfo.

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

Что можете посоветовать по данному вопросу? Как идентифицировать модемные соедниения?
Апдейт: В кернел-моде нашел статус-коды NDIS_STATUS_WAN_LINE_UP и
NDIS_STATUS_WAN_LINE_DOWN а также структуры NDIS_MAC_LINE_UP NDIS_MAC_LINE_DOWN, которые передаються в мой обработчик ProtocolStatus. Теперь коннект/дисконнект модема я отловить могу Но, остается вопрос как из этих структур вытащить мак-адрес, от которого этот модем будет слать пакеты?

также нашел функции RasEnumConnections и RasEnumEntries (в юзермоде), но иноформации они дают очень мало

Что посоветуете ?

Re: NDIS IM драйвер и модем (WAN), помогитеВ документации упоминаются структуры NDIS_MAC_LINE_UP и NDIS_WAN_LINE_UP и написано что он передаются при вызове статуса NDIS_STATUS_WAN_LINE_UP. Так где правда? В структуре NDIS_WAN_LINE_UP уже есть мак-адрес псевдосетевухи, но как его увязать с модемным соединением, не понятно
Re: NDIS IM драйвер и модем (WAN), помогите
От: TarasCo  
Дата: 21.05.07 06:47
Оценка:
1. По поводу МАС адресов в NDIS_WAN_LINE_UP — они генерируются динамически на время установления WAN соединения ( модемного или какого-то еще ) и имеют смысл только на время установления соединения
2. Модемные соединения c разными провайдерами имеют смысл только на уровне RAS/TAPI. Для NDIS — никакой разницы нет, и установить на уровне NDIS какое именно RAS соединение используется если и возможно, то только по косвенным признакам ( например, перехватывая OID_TAPI_DIAL и по номеру телефона узнать название RAS соединения; только этот OID нельзя в NDIS IM увидеть IMHO ).
3. Из NDIS_WAN_LINE_UP можно узнать имя WAN устройства — т.е можно отличать допустим модем от VPN соединения.
Да пребудет с тобою сила
Re[2]: NDIS IM драйвер и модем (WAN), помогите
От: mav123  
Дата: 21.05.07 08:59
Оценка:
TarasCo, спасибо за ответ!

TC>3. Из NDIS_WAN_LINE_UP можно узнать имя WAN устройства — т.е можно отличать допустим модем от VPN соединения.

Я думал, что в этой строке будет название модема или хотябы какая-то адекватная ссылка на модем. Но ничего подобного.
Имя устройства — GUID, который тоже генерируется динамически. Единственая польза от этого имени устройства, что я могу
в юзермоде вызвать GetAdaptersInfo и в списке будет псевдосетевая с таким именем.

Покопавшись в инете, выяснил что виндовая утилита ipconfig.exe все-таки умеет увязывать имя модемного провайдера и имя псевдостевухи через недокументированную функцию NhGetInterfaceNameFromGuid из iphlpapi.dll. Кто что-нибудь знает об этой функции? Или что она делает?
Re[3]: NDIS IM драйвер и модем (WAN), помогите
От: Аноним  
Дата: 21.05.07 09:03
Оценка:
M>Покопавшись в инете, выяснил что виндовая утилита ipconfig.exe все-таки умеет увязывать имя модемного провайдера и имя псевдостевухи через недокументированную функцию NhGetInterfaceNameFromGuid из iphlpapi.dll. Кто что-нибудь знает об этой функции? Или что она делает?

Дизассемблер IDA + отладочные символы спасут мир
Re[3]: NDIS IM драйвер и модем (WAN), помогите
От: TarasCo  
Дата: 21.05.07 09:45
Оценка:
А в этом разделе реестра нет интересующего Вас GUID а?
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
Да пребудет с тобою сила
Re[4]: NDIS IM драйвер и модем (WAN), помогите
От: mav123  
Дата: 21.05.07 13:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Дизассемблер IDA + отладочные символы спасут мир

Видимо таки прийдется дизасмить, выбора нет
Re[4]: NDIS IM драйвер и модем (WAN), помогите
От: mav123  
Дата: 21.05.07 13:26
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>А в этом разделе реестра нет интересующего Вас GUID а?

TC>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}

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