pcap数据链路Linux_SLL

jhdbpxl9  于 11个月前  发布在  Linux
关注(0)|答案(3)|浏览(129)

我尝试使用libpcap编写一个简单的数据包嗅探器。当我捕获数据包时,我尝试做的第一件事是识别所使用的数据链路协议,并找到该协议的报头大小,以便找到IP数据包。问题是,有时libpcap返回作为数据链路层协议的LINUX_SLL,这被描述为“Linux cooked”有谁知道那个协议的报头的格式吗?或者至少知道报头的大小?

pnwntuvh

pnwntuvh2#

我想这会解决你的问题:http://wiki.wireshark.org/SLL
更好的是,使用Wireshark读取pcap,它会显示字段类型及其大小。

olmpazwi

olmpazwi3#

/*
 * A DLT_LINUX_SLL fake link-layer header.
 */
#define SLL_HDR_LEN 16      /* total header length */
#define SLL_ADDRLEN 8       /* length of address field */

struct sll_header {
    uint16_t sll_pkttype;       /* packet type */
    uint16_t sll_hatype;        /* link-layer address type */
    uint16_t sll_halen;     /* link-layer address length */
    uint8_t  sll_addr[SLL_ADDRLEN]; /* link-layer address */
    uint16_t sll_protocol;      /* protocol */
};

/*
 * A DLT_LINUX_SLL2 fake link-layer header.
 */
#define SLL2_HDR_LEN    20      /* total header length */

struct sll2_header {
    uint16_t sll2_protocol;         /* protocol */
    uint16_t sll2_reserved_mbz;     /* reserved - must be zero */
    uint32_t sll2_if_index;         /* 1-based interface index */
    uint16_t sll2_hatype;           /* link-layer address type */
    uint8_t  sll2_pkttype;          /* packet type */
    uint8_t  sll2_halen;            /* link-layer address length */
    uint8_t  sll2_addr[SLL_ADDRLEN];    /* link-layer address */
};

字符串

相关问题