gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:17 26 4
gpt4 key购买 nike

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

我已将它绑定(bind)在 NativeWiFi 过滤器 下方,因此我可以看到 802.11 数据包 而不是 假以太网数据包

我已经在数据包过滤器中设置了 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 指示。

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

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

我的问题是如何在我的驱动程序中判断一个802.11原始数据包是否有FCS(帧校验序列,4字节)

我问这个是因为我正在向数据包添加 Radiotap header ( http://radiotap.org/ ),并且 radiotap 有一个名为 Flags 的字段,该字段指定 802.11 数据包是否是否有 FCS。

我在笔记本电脑上使用无线适配器 Qualcomm Atheros AR9485WB-EG 无线网络适配器 进行的实验表明,BeaconReassociation Response 数据包具有 FCS而所有其他 802.11 数据包都没有。 radiotap header 中错误的 Flags 将导致 Wireshark 为这些数据包显示 Malformed Packet。这就是为什么我需要确定 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);
}

有什么方法吗?谢谢!

最佳答案

My experiment with my laptop with a wireless adapter Qualcomm Atheros AR9485WB-EG Wireless Network Adapter shows that Beacon and Reassociation Response packets have FCS and all other 802.11 packets don't have one.

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

您应该尝试检查 uReceiveFlags 是否设置了 DOT11_RECV_FLAG_RAW_PACKET,如果是,则假定该帧具有 FCS,否则假定它没有。

请记住,在监控模式下,可能仍会向主机提供无法完全接收的帧,因此监控模式下的一些“Malformed frame”错误可能是由于例如帧被截短造成的通过 radio ,所以不要假设“格式错误的帧”错误意味着该帧不应该设置“结束时的 FCS”标志。

关于c - 如何在 NDIS 6 过滤器驱动程序中确定 802.11 原始数据包是否具有 FCS(4 字节)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36566978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com