如何使用libpcap嗅探PPP数据包?
我可以从 eth0 接口捕获数据包,并嗅探 ip 数据包,如下所示
/* IP header */
struct sniff_ip {
u_char ip_vhl; /* version << 4 | header length >> 2 */
u_char ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
u_char ip_ttl; /* time to live */
u_char ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src,ip_dst; /* source and dest address */
};
那么,如果需要从 PPP 接口捕获数据包,如何定义标头结构?
我只是注意到,在这种情况下,标头的长度是 32 个字节。
I can capture packets from eth0 interface, and sniff ip packets as follows
/* IP header */
struct sniff_ip {
u_char ip_vhl; /* version << 4 | header length >> 2 */
u_char ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
u_char ip_ttl; /* time to live */
u_char ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src,ip_dst; /* source and dest address */
};
So if need to capture packets from PPP interface, how to define the header struct?
I just notice that, the length of header is 32 bytes in this case.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果当您使用 libpcap 在 PPP 设备上捕获时,
pcap_datalink()
例程返回DLT_PPP
,则您可以按照条目指示的方式定义标头tcpdump.org 链路层标头类型中的 LINKTYPE_PPP
/DLT_PPP
页面:If, when you capture on the PPP device with libpcap, the
pcap_datalink()
routine returnsDLT_PPP
, then you define the header in the fashion indicated by the entry forLINKTYPE_PPP
/DLT_PPP
in the tcpdump.org link-layer header types page: