Reihenfolge des Sendens von "Frame Control Field" -Daten eines 802.11-Frames?
Unten ist das Bitformat für das FC-Feld für QoS-Daten aufgeführt:
00|01|0001 01000010
Die ersten 2 Bits stellen die Version dar, der nächste 2-Bit-Typ, der nächste 4-Bit-Subtyp mit ToDS = 0, FromDS = 1, Protection-Bit = 1.
In welcher Reihenfolge werden die oben genannten Daten über die Funkschnittstelle gesendet? (d. h. von links nach rechts oder von rechts nach links)
Ich sehe, dass der Wireshark die Daten fängt als "8842"(im letzten Segment, in dem die Rohdaten des Pakets angezeigt werden).
Aber wenn ich den folgenden Code schreibe, um FC-Felddaten zu drucken:
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);
}
Die Ausgabe ist:
FC = 4288
Meine zweite Frage ist also, ob es nicht gedruckt werden soll8842 anstatt4288?
Aktualisieren: Ich aktualisiere die Frage, um klarer zu werden, woran ich zweifle.
Angenommen, ich möchte ein QoS-Datenpaket senden, dessen FC-Feld das folgende Format aufweist:
00|01|0001 01000010
Also muss ich schreiben:
mac_header->fc = 0x1142 /* value if read from left to right */
Oder
mac_header->fc = 0x4211
Oder
mac_header->fc = 0x4288 /* value if read from right to left */
Oder
mac_header->fc = 0x8842
Meins ist eine kleine Endian-Maschine.