каждый. Я делаю некоторые изменения в 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 мне следует обновить, чтобы обеспечить наибольшую совместимость?
Я боюсь, что 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):
Заметьте, кстати, что, если ваша цель — поддерживать режим мониторинга на устройствах 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 более легким драйвером фильтра или что-то подобное, а не водитель транспорта.)
В дополнение к тому, что сказал Гай … XP не может и никогда не поддерживал NDIS 6, поэтому ваше требование создать драйвер NDIS 6 с совместимостью с XP является невыполнимым требованием. Вы должны изменить требование; любой из вариантов Гая хорош (откажитесь от поддержки XP или поддерживайте параллельные драйверы 5.1 и 6.0).
С архитектурной точки зрения захват пакетов должен выполняться в LWF NDIS 6 (без использования драйвера протокола с пакетами обратной связи). Я предлагаю начать с чистого, пустого LWF (см. образец) и добавление функциональности захвата пакетов из WinPcap.