我尝试使用libpcap编写一个简单的数据包嗅探器。当我捕获数据包时,我尝试做的第一件事是识别所使用的数据链路协议,并找到该协议的报头大小,以便找到IP数据包。问题是,有时libpcap返回作为数据链路层协议的LINUX_SLL,这被描述为“Linux cooked”有谁知道那个协议的报头的格式吗?或者至少知道报头的大小?
odopli941#
或者查看new tcpdump.org "link-layer header types" page以了解链路层类型的描述。
pnwntuvh2#
我想这会解决你的问题:http://wiki.wireshark.org/SLL更好的是,使用Wireshark读取pcap,它会显示字段类型及其大小。
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 */ };
字符串
3条答案
按热度按时间odopli941#
或者查看new tcpdump.org "link-layer header types" page以了解链路层类型的描述。
pnwntuvh2#
我想这会解决你的问题:http://wiki.wireshark.org/SLL
更好的是,使用Wireshark读取pcap,它会显示字段类型及其大小。
olmpazwi3#
字符串