使用 WinPcap 的原始 WiFi 数据包

Raw WiFi Packets with WinPcap

考虑使用 WinPcap send a single raw packet 的简单 C 代码。与构建数据包相关的行 header 以以下注释开头:

/* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */

因此您可能会猜到,为了发送原始 WiFi 数据包,您应该相应地更改此代码块。

然而,事实并非如此。您可以发送原始 WiFi 数据包而无需更改该代码的一行,只需填写正确的 MAC 地址即可。当 capturing packets 而不是 WiFi headers 时,数据包将具有以太网 headers 时也是如此。

经过一些搜索,这个问题似乎与 Windows 在将数据包传递给 WinPcap 时模拟 'fake ethernet' 有关。不幸的是,我找不到更多关于它的细节。

第一期
这个 'fake ethernet' 是如何工作的?是否可以绕过它或禁用它?

第2期
是否可以完全控制 WiFi headers? (即使这需要 WinPcap 以外的东西)

How this 'fake ethernet' works?

要么是网络适配器本身向带有假以太网 headers 的主机提供数据包(将 802.11 MAC、LLC 和 SNAP headers 转换为以太网 header 并且对于某些数据包,LLC header 可能后跟 SNAP header),或者 driver 这样做。

这仅适用于数据帧;在此模式下捕获时不会显示管理和控制帧。 802.11header的源和目的MAC地址成为以太网header中的源和目的MAC地址; TA 和 RA 字段被丢弃,header 中的帧控制和其他字段也是如此。如果帧有一个 OUI 为全零的 SNAP header,即 "the PID is an Ethernet type",则 SNAP header 中的 PID 将成为以太网 type/length 字段中的值 header;否则,帧中数据的长度,包括 LLC header 及其后的所有内容(但不包括 FCS)成为 type/length 字段中的值。第一种情况下 SNAP header 之后的所有内容以及第二种情况中 MAC header 之后的所有内容都成为以太网有效负载。

Is it possible to bypass it or disable it?

可以,但是您必须在您的计算机上安装特殊软件。

某些形式的特殊软件的名称如"Fedora"和"Ubuntu"。不幸的是,它们可能会在您的计算机上尝试 运行 Windows 应用程序时出现问题。 :-)

不幸的是,当您尝试 发送 数据包时,尝试这样做 将 Windows 替换为 Linux 不像安装 Microsoft Network Monitor 和捕获流量那么容易。不幸的是,Microsoft's documentation for "Network Monitor Operation Mode" for "Native WiFi" says that, in that mode, "The driver cannot send packets either on its own or through a call to its MiniportSendNetBufferLists function." Perhaps there are ways of connecting to the Wi-Fi driver the same way some of the user-mode boxes in the diagram on this page do, but, to find them, you might have to start at Microsoft's top-level documentation page for Native 802.11 Wireless LAN 继续努力。