首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定802.11原始数据包是否在NDIS 6过滤器驱动程序中具有FCS (4字节)?

如何确定802.11原始数据包是否在NDIS 6过滤器驱动程序中具有FCS (4字节)?
EN

Stack Overflow用户
提问于 2016-04-12 07:55:03
回答 1查看 1.4K关注 0票数 0

我有一个NDIS 6过滤器驱动程序在Windows和更高版本的系统上工作。

我把它绑定到NativeWiFi Filter下面,这样我就可以看到802.11 packets而不是fake Ethernet packets

并且我已经在基于:NDIS_PACKET_TYPE_802_11_RAW_DATA的包过滤器中设置了NDIS_PACKET_TYPE_802_11_RAW_MGMThttps://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进行的实验表明,BeaconReassociation Response包都有FCS,而其他802.11包都没有FCS。而无线电头中的错误Flags将导致Wireshark显示格式错误的数据包。这就是为什么我需要确定FCS的可用性在我的司机。

我的代码如下所示,我想知道如何编写if条件。

代码语言:javascript
复制
    // [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);
    }

有什么方法吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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“标志集。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36566978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档