考虑使用简单的 C 代码来使用 WinPcap 发送单个原始数据包
。与构建数据包标头相关的行以以下注释开头:/* 假设在以太网上,将 mac 目标设置为 1:1:1:1:1:1 */
因此您可能会猜测,为了发送原始 WiFi 数据包,您应该相应地更改此代码块。
然而,事实并非如此。您可以发送原始 WiFi 数据包,而无需更改该代码的一行,只需填写正确的 MAC 地址即可。 捕获数据包
时也是如此,数据包将具有以太网标头,而不是 WiFi 标头。经过一番搜索,这个问题似乎与 Windows 在将数据包传递到 WinPcap 时模拟“假以太网”有关。不幸的是我找不到更多关于它的细节。
第一期
第二期
这个“假以太网”是如何工作的?
网络适配器本身向主机提供带有假以太网标头的数据包(将 802.11 MAC、LLC 和 SNAP 标头转换为以太网标头,对于某些数据包,还提供 LLC 标头,后面可能跟着 SNAP 标头),或者驱动程序这样做。
这仅适用于数据框;在此模式下捕获时不显示管理和控制帧。 802.11报头的源MAC地址和目的MAC地址成为以太网报头中的源MAC地址和目的MAC地址; TA 和 RA 字段被丢弃,帧控制和报头中的其他字段也被丢弃。如果该帧具有 OUI 全零的 SNAP 标头,表示“PID 是以太网类型”,则 SNAP 标头中的 PID 将成为以太网标头的类型/长度字段中的值;否则,帧中数据的长度,包括 LLC 标头及其后面的所有内容(但不包括 FCS)将成为类型/长度字段中的值。第一种情况下 SNAP 标头之后的所有内容以及第二种情况下 MAC 标头之后的所有内容都将成为以太网有效负载。
是否可以绕过它或禁用它?
是的,但您必须在计算机上安装特殊软件。
某些形式的特殊软件有“Fedora”和“Ubuntu”等名称。不幸的是,当尝试在您的计算机上运行 Windows 应用程序时,它们可能会导致问题。 :-)
不幸的是,当您尝试发送数据包时,尝试在而不用Linux替换Windows的情况下做到这一点并不像安装Microsoft网络监视器并用它捕获流量那么容易。不幸的是,Microsoft 的“Native WiFi”的“网络监视器操作模式”文档指出,在该模式下,“驱动程序无法自行发送数据包或通过调用其 MiniportSendNetBufferLists 函数发送数据包。”也许有一些方法可以像本页上的图表中的某些用户模式框一样连接到 Wi-Fi 驱动程序,但是要找到它们,您可能必须从 Microsoft 的顶级文档开始Native 802.11 无线 LAN 页面并向下操作。