1

每个人。我正在对数据包捕获库 WinPcap 进行一些修改。我的老板要我把 WinPcap 的 NDIS 版本从 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 以保持最广泛的兼容性?

4

2 回答 2

4

恐怕 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。)

如果您想在 WinPcap 中支持 NDIS 6(例如,支持 Wi-Fi 设备上的监控模式),您的选择是:

  • 制作不支持 Windows 2000 或 Windows XP 或其服务器版本且仅支持 NDIS 6 的 WinPcap 版本;
  • 为“NT 5”(W2K/WXP 及其服务器版本)和“NT 6”(Vista、7、8 及其服务器版本)制作单独版本的 WinPcap 驱动程序和 packet.dll 库,给出两个版本的数据包。 dll 相同的 API(例如,对于“NT 5”版本,返回尝试将接口置于监控模式的失败指示),并使用该 API 让 wpcap.dll(即 WinPcap 的“libpcap”部分) ,并让安装程序确定要安装哪一个(这意味着如果您将“NT 5”系统升级到“NT 6”,例如将 Windows XP 升级到 Windows Vista,则必须重新安装 WinPcap 才能获得 NDIS 6 功能, 7 或 8) 或以某种方式在加载驱动程序时运行正确的驱动程序代码,如果可能的话。

请注意,顺便说一句,如果您的目标是在 NDIS 设备上支持监控模式,那么强烈建议您实现 libpcap 中已经存在的用于监控模式的 API,即用于打开设备的pcap_create()/ API,用于请求监控模式,以及用于检查是否可以打开监控模式的 API,因为这些 API 是 tcpdump 和 Wireshark 等程序所期望的。pcap_activate()pcap_set_rfmon()pcap_can_set_rfmon()

另请注意,pcap_create()/ pcap_activate()API 当前不处理远程数据包捕获,因此您要么必须摆脱该功能,要么等待我(或某人)将这些功能添加到这些 API。

另请注意,据报道,虽然 NDIS 6 具有支持监视模式的 API,但并非所有 Wi-Fi 设备都具有 NDIS 6 驱动程序,并非所有具有 NDIS 6 驱动程序的设备都具有支持本机 Wi-Fi 的 NDIS 6 驱动程序(因此没有支持监视器模式的 NDIS 6 驱动程序),甚至那些确实有支持本机 802.11 的 NDIS 6 驱动程序的 NDIS 6 驱动程序也不一定有没有使本机 802.11 工作正常的错误的 NDIS 6 驱动程序。

此外,还要注意,本机 802.11 驱动程序在监视模式下提供的“无线电信息”标头与 pcap 和 pcap-ng 支持的所有现有“无线电信息”标头不同,您需要请求一个来自 tcpdump-workers@lists.tcpdump.org 的“无线电信息”标头的新LINKTYPE_/DLT_值。Wireshark 已经有一个解析器,因为它可以从 Microsoft Network Monitor 读取 802.11 捕获;tcpdump 将需要一个。

(如果您出于其他原因这样做,例如添加对 PPP 设备的支持或修复代码以获取供应商的设备描述,则可能还需要使 NDIS 6 驱动程序成为轻量级过滤器驱动程序或类似的东西,而不是运输司机。)

于 2013-06-11T07:56:49.023 回答
1

补充一下 Guy 所说的... XP 不能也从未支持 NDIS 6,因此您创建具有 XP 兼容性的 NDIS 6 驱动程序的要求是不可能的。您必须更改要求;Guy 的任何一个选项都很好(放弃 XP 支持,或者维护并行的 5.1 和 6.0 驱动程序)。

在架构上,数据包捕获应该在 NDIS 6 LWF 中完成(而不是使用带有环回数据包的协议驱动程序)。我建议从一个干净的空 LWF(参见示例)开始,然后添加 WinPcap 的数据包捕获功能。

于 2013-06-11T17:52:14.100 回答