我有一个NDIS 6过滤器驱动程序在Windows和更高版本的系统上工作。
我把它绑定到NativeWiFi Filter下面,这样我就可以看到802.11 packets而不是fake Ethernet packets。
并且我已经在基于:NDIS_PACKET_TYPE_802_11_RAW_DATA的包过滤器中设置了NDIS_PACKET_TYPE_802_11_RAW_MGMT和https://msdn.microsoft.com/en-us/library/windows/hardware/ff554833(v=vs.85).aspx,这样我就可以从小型端口接收Raw 802.11 Packets指示。
然后我把我的无线适配器换成了Monitor Mode。
到目前为止,我的过滤器驱动程序可以接收所有的802.11 control and management数据包。
我的问题是如何确定802.11原始数据包在驱动程序中是否有FCS (帧检查序列,4字节)
我之所以问这个问题,是因为我将Radiotap header (http://radiotap.org/)添加到数据包中,而无线电台有一个名为Flags的字段,该字段指定802.11数据包是否有FCS。
我在笔记本电脑上用无线适配器Qualcomm Atheros AR9485WB-EG Wireless Network Adapter进行的实验表明,Beacon和Reassociation Response包都有FCS,而其他802.11包都没有FCS。而无线电头中的错误Flags将导致Wireshark显示格式错误的数据包。这就是为什么我需要确定FCS的可用性在我的司机。
我的代码如下所示,我想知道如何编写if条件。
// [Radiotap] "Flags" field.
if (TRUE) // The packet doesn't have FCS. We always have no FCS for all packets currently.
{
pRadiotapHeader->it_present |= BIT(IEEE80211_RADIOTAP_FLAGS);
*((UCHAR*)Dot11RadiotapHeader + cur) = 0x0; // 0x0: none
cur += sizeof(UCHAR) / sizeof(UCHAR);
}
else // The packet has FCS.
{
pRadiotapHeader->it_present |= BIT(IEEE80211_RADIOTAP_FLAGS);
*((UCHAR*)Dot11RadiotapHeader + cur) = IEEE80211_RADIOTAP_F_FCS; // 0x10: frame includes FCS
// FCS check fails.
if ((pwInfo->uReceiveFlags & DOT11_RECV_FLAG_RAW_PACKET_FCS_FAILURE) == DOT11_RECV_FLAG_RAW_PACKET_FCS_FAILURE)
{
*((UCHAR*)Dot11RadiotapHeader + cur) |= IEEE80211_RADIOTAP_F_BADFCS; // 0x40: frame failed FCS check
}
cur += sizeof(UCHAR) / sizeof(UCHAR);
}有什么方法吗?谢谢!
发布于 2016-04-13 21:17:15
我用我的笔记本电脑进行的无线适配器Qualcomm Atheros AR9485WB-EG无线网络适配器的实验表明,信标和再社交响应包都有FCS,而所有其他802.11包都没有FCS。
不,它没有。当我看到同样的捕获,并强制"FCS在末端“标志,我发现很多帧除了这些帧有一个FCS,Wireshark报告为有效。不要假设,仅仅因为一个帧没有显示“格式错误”错误,它就没有FCS;“格式错误”错误是因为Wireshark认为FCS是帧数据,并试图剖析大于FCS的4个字节的项。对于数据帧,802.11分解器不分解有效载荷,如果有效负载有自己的长度字段(如IPv4和IPv6帧那样),则将使用该长度,而FCS将在有效载荷后被视为额外数据,而不会导致“格式错误的帧”错误。
您应该尝试的是检查uReceiveFlags是否有DOT11_RECV_FLAG_RAW_PACKET集,如果有,假设框架有FCS,否则假设它没有。
请记住,在监视器模式下,无法完全接收到的帧仍然可以提供给主机,因此监视器模式中的一些“格式错误”错误可能是由于例如被无线电切断的帧,所以不要假设“格式错误”错误意味着帧不应该有"FCS at end“标志集。
https://stackoverflow.com/questions/36566978
复制相似问题