我有一个NDIS 6过滤器驱动程序在Windows Vista和更高版本的系统工作。
我已绑定它下面NativeWiFi Filter
,所以我可以看到802.11 packets
,而不是fake Ethernet packets
。
而且我已经设置了NDIS_PACKET_TYPE_802_11_RAW_DATA
和NDIS_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
显示, Beacon
和Reassociation 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);
}
任何方法? 谢谢!