Radiotap信息

在Linux系统中用wireshark或tcpdump抓无线网卡数据包,每一数据帧前面都有一个叫radiotap的协议头,它包含了信号强度、噪声强度、信道、时间戳等信息。radiotap比传统的Prism或AVS头更有灵活性,成为ieee802.11事实上的标准。支持radiotap的系统较多,如Linux、FreeBSD、NetBSD、OpenBSD,还有Windows(需使用AirPcap)。它的头部定义如下:

struct ieee80211_radiotap_header {
    u_int8_t        it_version;     /* set to 0 */
    u_int8_t        it_pad;
    u_int16_t       it_len;         /* entire length */
    u_int32_t       it_present;     /* fields present */
} __attribute__((__packed__));

it_version:表示版本号,当前为0。
it_pad:没有使用,仅仅是为了结构体对齐。
it_len:表示长度,包括了radiotap头部和数据两部分,如果不需要了解radiotap,则可以直接跳到ieee802.11头部。
it_present:表示radiotap数据的位掩码。radiotap的数据紧跟其头部。当其中的位掩码为true时,表示有对应的数据,可以认为每一比特表示一种类型。比如bit5为1表示有通道数据,则可以获取到信号强度,反之就是没有对应的数据。因此,radiotap的长度其实是不固定的。bit31为1表示还有多个it_present。
radiotap的每个类型都是有严格顺序的,数据的字序是小端格式(little endian byte-order)——包括头部的it_len和it_present。
目前应用比较广的解析库是radiotap-library,在horst软件和Linux内核中都使用到。关于每个类型的解释,可以参考radiotap.h文件的ieee80211_radiotap_type注释。

posted on 2019-12-10 16:12  sudochen  阅读(211)  评论(0编辑  收藏  举报

导航