2

libtrace を使用してネットワーク パケットを解析していますが、エンディアンの問題があると思います。

Radiotap パケットの libtrace 定義は次のとおりです。

typedef struct libtrace_radiotap_t {
    uint8_t     it_version; /**< Radiotap version */
    uint8_t     it_pad; /**< Padding for natural alignment */
    uint16_t    it_len; /**< Length in bytes of the entire Radiotap header */
    uint32_t    it_present; /**< Which Radiotap fields are present */
} PACKED libtrace_radiotap_t;

そこで、libtrace_packet_tこの Radiotap 構造体に my をキャストし、結果を確認します。

link = (char *) trace_get_packet_buffer(packet, &linktype, NULL);

if (linktype != TRACE_TYPE_80211_RADIO)
    return;

rtap = (libtrace_radiotap_t *) link;

printf("%d %d %d %d\n", rtap->it_present, rtap->it_pad, rtap->it_len,
       rtap->it_present);

リトル エンディアンの開発マシンでは、pcap ファイル内のパケットからの Radiotap データは次のようになります。

806959 0 72 806959

どちらが正しい。私の開発マシンは、pcap ファイルから表示されると予想されるデータを正常に解析しています。

ビッグ エンディアンの製品ボックスで実行すると、異なる値が表示されます。

793775104 0 18432 793775104

同じ pcap ファイル内の同じパケット。Radiotap の値が異なります。問題は、2 つのマシンの異なるエンディアンにあると思われます。ただし、シングルバイトでrtap.it_versionあるuint8_tため、エンディアンの問題の影響を受けないはずですよね?

4

2 に答える 2