Network programming 带有WinPcap的原始WiFi数据包

Network programming 带有WinPcap的原始WiFi数据包,network-programming,wifi,wireless,raw-sockets,winpcap,Network Programming,Wifi,Wireless,Raw Sockets,Winpcap,考虑使用WinPcap编写的简单C代码。与构建数据包头相关的行以以下注释开始: /*假设在以太网上,将mac目的地设置为1:1:1:1:1:1*/ 所以,您可能会猜测,为了发送原始WiFi数据包,您应该相应地更改这段代码 然而,情况并非如此。您可以发送原始WiFi数据包,而无需更改该代码的一行,只需填写正确的MAC地址即可。当数据包具有以太网报头而不是WiFi报头时,情况也是如此 经过一些搜索,似乎这个问题与Windows在将数据包传递到WinPcap时模拟“假以太网”有关。不幸的是,我找不到更

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

/*假设在以太网上,将mac目的地设置为1:1:1:1:1:1*/

所以,您可能会猜测,为了发送原始WiFi数据包,您应该相应地更改这段代码

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

经过一些搜索,似乎这个问题与Windows在将数据包传递到WinPcap时模拟“假以太网”有关。不幸的是,我找不到更多的细节

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

第二期
是否可以完全控制WiFi标头?(即使这需要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应用程序时,它们可能会导致问题。:-)


不幸的是,当您尝试发送数据包时,尝试在不将Windows替换为Linux的情况下发送数据包并不像安装Microsoft Network Monitor并用它捕获流量那样容易。不幸的是,他说,在这种模式下,“驱动程序不能单独发送数据包,也不能通过调用其MiniportSendNetBufferList函数发送数据包。”也许有一些方法可以连接到Wi-Fi驱动程序,就像图中的一些用户模式框一样,但要找到它们,您可能必须从开始,然后逐步向下。

在不将Windows替换为Linux的情况下尝试这样做,我正在尝试发送一个简单的信标数据包,以便该范围内的任何WiFi计算机都可以捕获它,而无需事先加入特定的网络连接。然而,听起来很简单,在Windows下有必要重新编写NIC驱动程序(奇怪)。你认为这种简单的信标包会比Linux更容易在Linux下进行编码吗?“你认为这种简单的信标包在Linux下比Windows更容易被编码吗?”除非有一些简单的方法来获取本地WLAN的用户模式部分使用的代码路径,是的,这会容易得多。即使您最终使用原始
pfu数据包
sockets,而不是在Linux上使用libpcap。听说过吗?它声称在Windows下启用监视器模式。显然,他们已经开发了一个与多个标准NIC兼容的NDIS驱动程序。或者他们实现了一个类似于WinPcap驱动程序的驱动程序,该驱动程序使用NDIS 6支持本机WLAN,底层NIC驱动程序已经支持它;从亚克力的网站快速看,这是我的猜测。不幸的是,这意味着它们将受到本机WLAN的限制,例如“它捕获数据包,但不支持发送数据包”。在这种情况下,您认为在WindowsXP下对上述信标分组进行编码是否更可行?(即:不重新编写驱动程序或内核)