Проблема совместимости между версией NDIS и версией Windows

каждый. Я делаю некоторые изменения в WinPcap, библиотеке захвата пакетов. Мой начальник хочет, чтобы я перенес версию NDIS WinPcap из NDIS 4 в NDIS 6. И требование совместимости — Windows XP / Vista / 7/8 (32-битная и 64-битная). Я обнаружил, что последняя версия NDIS — 6.3, но я боюсь, что NDIS 6.3 больше не поддерживает XP, это правда? Также я обнаружил на веб-сайте WinPcap, что текущий WinPcap 4.1.3 уже поддерживает Windows XP / 2003 / Vista / 2008 / Win7 / 2008R2 / Win8 (x86 и x64). Это правильно? Какую версию NDIS мне следует обновить, чтобы обеспечить наибольшую совместимость?

1

Решение

Я боюсь, что NDIS 6.3 больше не поддерживает XP, это правда?

Если вы имеете в виду «будет ли драйвер, использующий NDIS 6.3, работать в Windows XP», ответ будет «нет» и всегда будет «нет»; это не случай «больше».

Данная версия Windows поддерживает данную версию NDIS (не наоборот). «NT 5.x», то есть Windows 2000, Windows XP и их серверные эквиваленты, поддерживают NDIS 5; драйвер NDIS 6 (даже NDIS 6.0) не будет работать в этих версиях Windows. Для драйвера NDIS 6 требуется NT 6.x, то есть Windows Vista и более поздние версии.

Если вы посмотрите на Документация Microsoft MSDN по сетевым драйверам, вы заметите, что в нем есть раздел «Сетевые драйверы, начиная с Windows Vista» и раздел «Сетевые драйверы до Windows Vista»; первый раздел предназначен для NDIS 6, а второй — для NDIS 5. (NDIS 4, я полагаю, считается слишком старым, чтобы докучать документированию; я не знаю, в чем были различия между NDIS 4 и NDIS 5, или поддерживает ли WinPcap NDIS 4.)

Варианты, если вы хотите поддерживать NDIS 6 в WinPcap (например, для поддержки режима мониторинга на устройствах Wi-Fi):

  • создать версию WinPcap, которая не поддерживает Windows 2000 или Windows XP или их серверные версии и поддерживает только NDIS 6;
  • сделать отдельные версии драйвера WinPcap и библиотеки packet.dll для «NT 5» (W2K / WXP и их серверные версии) и «NT 6» (Vista, 7, 8 и их серверные версии), дать две версии пакета. dll того же API (например, с версией «NT 5», возвращающей указание ошибки при попытках перевести интерфейс в режим монитора), и иметь wpcap.dll (т. е. часть «libpcap» в WinPcap), использующую этот API и попросите установщика выяснить, какой из них установить (что означает, что вам придется переустанавливать WinPcap, чтобы получить функции NDIS 6, если вы обновляете систему «NT 5» до «NT 6», например, обновление Windows XP до Windows Vista, 7, или 8) или как-нибудь запустить правильный код драйвера при загрузке драйвера, если это возможно.

Заметьте, кстати, что, если ваша цель — поддерживать режим мониторинга на устройствах NDIS, вы ОЧЕНЬ СИЛЬНО Рекомендуется реализовать API, которые уже существуют в libpcap для режима монитора, т.е. pcap_create()/pcap_activate() API для открытия устройства, pcap_set_rfmon() API для запроса режима монитора и pcap_can_set_rfmon() API для проверки возможности включения режима монитора, так как эти API — это то, что ожидают такие программы, как tcpdump и Wireshark.

Обратите внимание также, что pcap_create()/pcap_activate() В настоящее время API не обрабатывают удаленный захват пакетов, поэтому вам придется либо избавиться от этой возможности, либо подождать, пока я (или кто-то) добавлю эти возможности в эти API.

Отметим также, что сообщалось, что, хотя NDIS 6 имеет API-интерфейсы для поддержки режима мониторинга, не все устройства Wi-Fi имеют драйверы NDIS 6, не все те, у кого есть драйверы NDIS 6, имеют драйверы NDIS 6, которые поддерживают Native Wi-Fi ( и, следовательно, не имеют драйверов NDIS 6, которые поддерживают режим монитора), и даже те, которые делать драйверы NDIS 6, поддерживающие Native 802.11, не обязательно должны иметь драйверы NDIS 6 без ошибок, обеспечивающих хорошую работу Native 802.11.

И, кроме того, обратите внимание также, что заголовок «радиоинформации», предоставляемый родными драйверами 802.11 в режиме монитора, отличается от всех существующих заголовков «радиоинформации», поддерживаемых pcap и pcap-ng, и вам потребуется запросить новый LINKTYPE_/DLT_ значение для этого заголовка «радиоинформации» от [email protected]. У Wireshark уже есть диссектор, так как он может считывать записи 802.11 из Microsoft Network Monitor; tcpdump понадобится.

(Если вы делаете это по какой-то другой причине, такой как добавление поддержки устройств PPP или исправление кода, чтобы получить описание устройства производителя, для этого также может потребоваться сделать драйвер NDIS 6 более легким драйвером фильтра или что-то подобное, а не водитель транспорта.)

4

Другие решения

В дополнение к тому, что сказал Гай … XP не может и никогда не поддерживал NDIS 6, поэтому ваше требование создать драйвер NDIS 6 с совместимостью с XP является невыполнимым требованием. Вы должны изменить требование; любой из вариантов Гая хорош (откажитесь от поддержки XP или поддерживайте параллельные драйверы 5.1 и 6.0).

С архитектурной точки зрения захват пакетов должен выполняться в LWF NDIS 6 (без использования драйвера протокола с пакетами обратной связи). Я предлагаю начать с чистого, пустого LWF (см. образец) и добавление функциональности захвата пакетов из WinPcap.

1

По вопросам рекламы [email protected]