【发布时间】:2015-07-06 21:59:01
【问题描述】:
以下是 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
我的是一个小端机器。
【问题讨论】:
-
查找网络字节顺序。它应该是大端。