Kolejność wysyłania danych „Pole kontroli ramki” ramki 802.11?
Poniżej znajduje się format bitowy pola FC dla danych QoS:
00|01|0001 01000010
Pierwsze 2 bity reprezentują wersję, następny typ 2 bitów, następny podtyp 4 bitów, z ToDS = 0, FromDS = 1, Bit ochrony = 1.
Więc w jakiej kolejności powyższe dane są przesyłane przez interfejs w powietrzu? (tj. od lewej do prawej lub od prawej do lewej)
Widzę wireshark łapiący dane jako „8842„(w ostatnim segmencie, gdzie pokazuje surowe dane pakietowe).
Ale jeśli napiszę następujący kod, aby wydrukować dane pola 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);
}
Dane wyjściowe to:
FC = 4288
Moje drugie pytanie brzmi: czy nie powinno to być drukowane8842 zamiast4288?
Aktualizacja: Aktualizuję to pytanie, aby mieć większą jasność co do moich wątpliwości.
Powiedzmy, że chcę wysłać pakiet danych QoS, którego pole FC ma następujący format:
00|01|0001 01000010
Więc powinienem napisać:
mac_header->fc = 0x1142 /* value if read from left to right */
Lub
mac_header->fc = 0x4211
Lub
mac_header->fc = 0x4288 /* value if read from right to left */
Lub
mac_header->fc = 0x8842
Mój jest małą maszyną endian.