Libpcap由二十多个C程序文件组成,按功能大致分为以下几个部分:
1) 打开,读取设备,设置过滤部分
2) 编译、优化、调试过滤部分
3) 脱机方式监听部分
4) 本地网络设置检测部分
5) 主控程序及版本部分
Libpcap数据包捕获程序流程:
1. 获取本地设备信息。
通过函数pcap_lookupdev寻找系统中可用的网络接口设备,返回一个表示网络适配器的字符串。
2. 打开设备开始监听会话
通过函数pcap_open_live()建立监听会话。
Pcap_t *pcap_open_live(char *device,int snaplen,int promisc,int to_ms,char *ebuf)
其中:
device为上一步中所提到的网络适配器的字符串,snaplen定义监听程序所捕获的最大字节数,promisc定义是否将网络适配器设置为混杂模式。to_ms定义读操作的时间。
Ebuf函数调用失败时返回错误信息字符串。
3. 设置过滤条件
编辑过滤字符串,设置过滤器,制定要捕获的主机、协议等,可以有效的捕获指定类型的数据。
通过函数pcap_compile将过滤字符串编译为二进制。常用的过滤字符串有“host 210.40. 7.129” 表示捕获主机210.40.7.129收发的数据帧,“tcp” 表示捕获协议类型为TCP的数据帧,“port 20” 表示捕获目的或源端口是20的数据帧等等,很多过滤字符串还能进行组合。
由pcap_setfilter()函数进行内核过滤器的设置生效。
4. 执行捕获循环
每捕获一个数据包后就调用用户的回调函数对数据包进行处理,以上功能可通过调用以下两个函数实现pcap_dispatch,pcap_loop,它们的功能基本相同,唯一的差别在于pcap_loop在读取超时时不会返回。