下面是 QoS 数据的 FC 字段的位格式:
00|01|0001 01000010
前 2 位表示版本,后 2 位表示类型,后 4 位表示子类型,ToDS=0,FromDS=1,保护位=1。
那么,以上数据在空中通过接口发送的顺序是怎样的呢?(即从左到右或从右到左)
我看到wireshark 将数据捕获为“ 8842 ”(在最后一段显示原始数据包数据)。
但是,如果我编写以下代码来打印 FC 字段数据:
struct mgmt_header_t {
u_int16_t fc; /* 2 bytes */
u_int16_t duration; /* 2 bytes */
u_int8_t addr1[6]; /* 6 bytes */
u_int8_t addr2[6]; /* 6 bytes */
u_int8_t addr3[6]; /* 6 bytes */
u_int16_t seq_ctrl; /* 2 bytes */
};
void my_callback(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
int radiotapheader_length = (unsigned short int)(*(packet+2));
struct mgmt_header_t *mac_header = (struct mgmt_header_t *) (packet+radiotapheader_length);
printf("FC = %X\n", mac_header->fc);
}
输出是:
FC = 4288
所以我的第二个问题是,它不应该打印8842而不是4288吗?
更新:
我正在更新问题,以便更清楚我的疑问是什么。
比如说,我想发送一个 QoS 数据包,其 FC 字段格式如下:
00|01|0001 01000010
所以,我应该写:
mac_header->fc = 0x1142 /* value if read from left to right */
或者
mac_header->fc = 0x4211
或者
mac_header->fc = 0x4288 /* value if read from right to left */
或者
mac_header->fc = 0x8842
我的是一个小端机器。