如何确定802.11原始数据包在NDIS 6筛选器驱动程序中是否具有FCS(4字节)?
我有一个NDIS 6过滤器驱动程序,可以在Windows Vista和更高版本的系统上运行 我已将其绑定到如何确定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控制和管理数
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”旗集