关于网络编程:带有WinPcap的原始WiFi数据包

Raw WiFi Packets with WinPcap

考虑简单的C代码,使用WinPcap发送单个原始数据包。与构建包头相关的行以以下注释开头:

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

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

但是,事实并非如此。您可以发送原始WiFi数据包,而无需更改该代码的一行,而只需填充正确的MAC地址即可。捕获数据包时也是如此,而不是WiFi标头,数据包将具有以太网标头。

进行一些搜索后,似乎此问题与Windows将数据包传递到WinPcap时模拟"伪以太网"有关。不幸的是我找不到更多的细节。

第一期
这种"假以太网"是如何工作的?是否可以绕过它或将其禁用?

第二期
是否可以完全控制WiFi标头? (即使这需要WinPcap以外的其他东西)


How this 'fake ethernet' works?

要么网络适配器本身向主机提供带有伪造的以太网报头的数据包(将802.11 MAC,LLC和SNAP报头转换为以太网报头,对于某些数据包,LLC报头可能跟着SNAP报头),或者驱动程序会这样做。

仅对数据帧执行此操作;在此模式下捕获时,管理和控制帧不会显示。 802.11标头的源和目标MAC地址成为以太网标头中的源和目标MAC地址; TA和RA字段被丢弃,帧控制和报头中的其他字段也被丢弃。如果帧的SNAP标头的OUI为全零,则表示" PID是以太网类型",则SNAP标头中的PID成为以太网标头的类型/长度字段中的值;否则,帧中数据的长度(包括LLC报头及其后的所有内容,但不包括FCS)将成为类型/长度字段中的值。在第一种情况下,在SNAP头之后的所有内容,在第二种情况下的在MAC头之后的所有内容,都成为以太网有效负载。

Is it possible to bypass it or disable it?

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

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

不幸的是,当您尝试发送数据包时,尝试在不使用Linux替换Windows的情况下做到这一点并不像安装Microsoft Network Monitor并捕获流量那样容易。不幸的是,Microsoft的"本机WiFi"的"网络监视器操作模式"文档指出,在这种模式下,"驱动程序无法自行发送数据包,也无法通过对其MiniportSendNetBufferLists函数的调用来发送数据包。"也许可以使用与该页面上的图中某些用户模式框相同的方式连接到Wi-Fi驱动程序,但是要找到它们,您可能必须从Microsoft的Native顶级文档页面开始802.11无线局域网并逐步解决问题。