linux抓包库libpcap,linux下libpcap抓包分析.doc

linux下libpcap抓包分析

HYPERLINK "/Seiyagoo/archive/2012/04/28/2475618.html" linux下libpcap抓包分析

一、首先下载libpcap包 HYPERLINK "/" \l "latest-release" /#latest-release

然后安装,安装完成后进入安装根目录的tests文件夹,编译运行findalldevstest.c(编译时加上-lpcap),查看是否发现所有网络设备。

二、下载wireshark观察抓包软件的各种功能

三、熟悉libpcap工作原理:

四、了解libpcap抓包基本流程:

H

五、编程实现

未完待续。。。?

?

PS:整理了一下libpcap常用的数据类型定义

libpcap的类型定义:

0)、typedef int bpf_int32

1)、typedef u_int bpf_u_int32

??? 32bit 的无类型整形;

2)、typedef pcap pcap_t

??? Descriptor of an open capture instance(一个打开的捕获实例的描述符?)这个结构对用户是不透明的。

3)、typedef pcap_dumper pcap_dumper_t

libpcap保存文件的描述符。

4)、typedef pcap_if pcap_if_t

网卡链表的一个元素;

5)、typedef pcap_addr pcap_addr_t

网卡地址的表示;

6)、typedef void (*pcap_handler)(u_char *args, const struct pcap_pkthdr *header, ? ?const u_char *packet);

??? 其中agrs是从pcap_dispatch()函数传递过来的第四个形参 ,一般我们自己的包捕捉程序不需要提供它,总是为NULL ;header指向pcap_pkthdr结构,该结构位于真正的物理帧前面,用于消除不同链路层支持的差异 ;packet指向所捕获报文的物理帧。

?

libpcap结构体

Libpcap库函数所必须的数据结构定义主要包含在pcap.h和pcap-int.h两个头文件中

1)、pcap结构在pcap-int.h头文件中被定义:?编程时需要涉及到的成员有:int fd; 打开设备的描述符;u_char *buffer; 是指向所捕获到数据的缓冲区指针struct pcap{?? int fd; /* 文件描述字,实际就是 socket */

??? int selectable_fd; /* 在 socket 上,可以使用 select() 和 poll() 等 I/O 复用类型函数 */

??? int snapshot; /* 用户期望的捕获数据包最大长度 */

??? int linktype; /* 设备类型 */

??? int tzoff;???????? /* 时区位置,实际上没有被使用 */

??? int offset;?????? /* 边界对齐偏移量 */

??? int break_loop; /* 强制从读数据包循环中跳出的标志 */

??? struct pcap_sf sf; /* 数据包保存到文件的相关配置数据结构 */

??? struct pcap_md md; /* 具体描述如下 */

???

??? int bufsize; /* 读缓冲区的长度 */

??? u_char buffer; /* 读缓冲区指针 */

??? u_char *bp;

??? int cc;

??? u_char *pkt;

??? /* 相关抽象操作的函数指针,最终指向特定操作系统的处理函数 */

??? int?? (*read_op)(pcap_t *, int cnt, pcap_handler, u_char *);

??? int?? (*setfilter_op)(pcap_t *, struct bpf_program *);

??? int?? (*set_datalink_op)(pcap_t *, int);

??? int?? (*getnonblock_op)(pcap_t *, char *);

??? int?? (*setnonblock_op)(pcap_t *, int, char *);

??? int?? (*stats_op)(pcap_t *, struct pcap_stat *);

??? void (*close_op)(pcap_t *);

??? /*如果 BPF 过滤代码不能在内核中执行,则将其保存并在用户空间执行 */

??? struct bpf_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值