Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定802.11原始数据包在NDIS 6筛选器驱动程序中是否具有FCS(4字节)?_C_Windows_Wifi_Driver_Ndis - Fatal编程技术网

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

如何确定802.11原始数据包在NDIS 6筛选器驱动程序中是否具有FCS(4字节)?,c,windows,wifi,driver,ndis,C,Windows,Wifi,Driver,Ndis,我有一个NDIS 6过滤器驱动程序,可以在Windows Vista和更高版本的系统上运行 我已将其绑定到nativewififilter下面,因此我可以看到802.11数据包,而不是伪以太网数据包 我已经在包过滤器中基于:,设置了NDIS\U数据包类型\u 802\u 11\u原始数据和NDIS\U数据包类型\u 802\u 11\u原始管理,因此我可以从微型端口接收RAW 802.11数据包指示 然后我将无线适配器切换到监控模式 现在,我的筛选器驱动程序可以接收所有的802.11控制和管理数

我有一个NDIS 6过滤器驱动程序,可以在Windows Vista和更高版本的系统上运行

我已将其绑定到
nativewififilter
下面,因此我可以看到
802.11数据包
,而不是
伪以太网数据包

我已经在包过滤器中基于:,设置了
NDIS\U数据包类型\u 802\u 11\u原始数据
NDIS\U数据包类型\u 802\u 11\u原始管理
,因此我可以从微型端口接收
RAW 802.11数据包
指示

然后我将无线适配器切换到
监控模式

现在,我的筛选器驱动程序可以接收所有的
802.11控制和管理
数据包

我的问题是如何确定802.11原始数据包在我的驱动程序中是否有FCS(帧检查序列,4字节)

我这样问是因为我正在向数据包添加
Radiotap头
(),并且Radiotap有一个名为
Flags
的字段,该字段指定802.11数据包是否具有FCS

我用装有无线适配器的笔记本电脑进行的实验表明,
信标
重新关联响应
数据包具有FCS,而所有其他802.11数据包都没有FCS。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);
    }
有什么办法吗?谢谢

我的笔记本电脑带有无线适配器Qualcomm Atheros AR9485WB-EG无线网络适配器的实验表明,信标和重新关联响应数据包具有FCS,而所有其他802.11数据包都没有FCS

不,没有。当我查看同一个捕获,并强制打开“结束时的FCS”标志时,我发现除这些帧外的许多帧都有Wireshark报告为有效的FCS。不要假设,仅仅因为帧没有显示“格式错误的帧”错误,它就没有FCS;“格式不正确的帧”错误是由于Wireshark认为FCS是帧数据,并试图剖析大于FCS 4字节的项。对于数据帧,802.11解析器不会解析有效负载,如果有效负载有自己的长度字段(如IPv4和IPv6帧),则将使用该长度,并且FCS将被视为有效负载后的额外数据,不会导致“帧格式错误”错误

您应该尝试的是检查
uReceiveFlags
是否设置了
DOT11\u RECV\u FLAG\u RAW\u PACKET
,如果设置了,则假设帧具有FCS,否则假设没有

请记住,在监控模式下,无法完全接收的帧可能仍会提供给主机,因此监控模式中的一些“错误帧”错误可能是由于,例如,该帧被无线电截短,因此不要假设“错误帧”错误意味着该帧不应具有“最后的FCS”旗集

我的笔记本电脑带有无线适配器Qualcomm Atheros AR9485WB-EG无线网络适配器的实验表明,信标和重新关联响应数据包具有FCS,而所有其他802.11数据包都没有FCS

不,没有。当我查看同一个捕获,并强制打开“结束时的FCS”标志时,我发现除这些帧外的许多帧都有Wireshark报告为有效的FCS。不要假设,仅仅因为帧没有显示“格式错误的帧”错误,它就没有FCS;“格式不正确的帧”错误是由于Wireshark认为FCS是帧数据,并试图剖析大于FCS 4字节的项。对于数据帧,802.11解析器不会解析有效负载,如果有效负载有自己的长度字段(如IPv4和IPv6帧),则将使用该长度,并且FCS将被视为有效负载后的额外数据,不会导致“帧格式错误”错误

您应该尝试的是检查
uReceiveFlags
是否设置了
DOT11\u RECV\u FLAG\u RAW\u PACKET
,如果设置了,则假设帧具有FCS,否则假设没有

请记住,在监控模式下,无法完全接收的帧可能仍会提供给主机,因此监控模式中的一些“错误帧”错误可能是由于,例如,该帧被无线电截短,因此不要假设“错误帧”错误意味着该帧不应具有“最后的FCS”旗集