-->

如何确定802.11原始数据包是否在NDIS 6过滤驱动FCS(4字节)?(How to deter

2019-11-04 05:00发布

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

我已绑定它下面NativeWiFi Filter ,所以我可以看到802.11 packets ,而不是fake Ethernet packets

而且我已经设置了NDIS_PACKET_TYPE_802_11_RAW_DATANDIS_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/ )的数据包和radiotap有场名为Flags是指定的802.11数据包是否有FCS与否。

我与我的笔记本电脑用无线网卡实验Qualcomm Atheros AR9485WB-EG Wireless Network Adapter显示, BeaconReassociation Response包有FCS和所有其他802.11数据包没有之一。 而错误Flags在radiotap头会导致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);
    }

任何方法? 谢谢!

Answer 1:

我与我的笔记本电脑用无线网卡高通Atheros AR9485WB-EG无线网络适配器的实验表明,信标和关联响应包有FCS和所有其他802.11数据包没有之一。

不,没有。 当我看着相同的捕获,并迫使“FCS年底”标志上,我发现比其他帧帧的LOT有一个FCS Wireshark的报告为有效。 不要以为,仅仅因为一个框架并没有表现出“畸形框架”的错误,它没有一个FCS; 在“格式错误的帧”的错误是由于Wireshark的思维FCS的帧数据,并试图解剖比4个字节的FCS的较大的物品。 对于数据帧,802.11剥离不解剖有效载荷,并且如果有效载荷有其自身的长度字段,如IPv4和IPv6框架做,该长度将被使用,而FCS将被视为后的额外数据有效载荷,而不是引起“格式错误的帧”错误。

你应该尝试是检查是否uReceiveFlagsDOT11_RECV_FLAG_RAW_PACKET集,如果是这样,假设框架具有FCS,否则假定它没有。

和记住的是,在监控模式下,不能被完全接收仍然可以提供给主机的帧,所以在监视模式一些“格式错误的帧”的错误可能是由于,例如,所述框架由所述无线电剪短,所以不要以为一个“畸形框架”的错误意味着该框架不应该有“FCS年底”标志设置。



文章来源: How to determine whether a 802.11 raw packet has FCS (4bytes) in a NDIS 6 filter driver?