函数名称:int pcap_compile(pcap_t *p, struct bpf_program *fp,char *str, int optimize, bpf_u_int32 netmask) 函数功能:该函数用于将str 指定的规则整合到fp 过滤程序中去,并生成过滤程序入口地址,用于过滤选择期望的数据报
参数说明: pcap_t *p:pcap_open_live 返回的数据报捕获的指针; struct bpf_program *fp:指向一个子函数用于过滤,在 pcap_compile()函数中被赋值; char *str:该字符串规定过滤规则; int optimize:规定了在结果代码上的选择是否被执行; bpf_u_int32 netmask:该网卡的子网掩码,可以通过pcap_lookupnet()获取; 返回值: 如果成功执行,返回 0,否则返回-1; 过滤规则由一个或多个 原语 (primitive) 组成,如果为” ” 则表示不进行任何过滤
原语 通常 由 一个 标识 (id, 名称或数字), 和 标识 前面的 一个或多个 修饰子(qualifier) 组成
修饰子 有 三种 不同的类型: type 类型修饰子 指出 标识名称 或 标识数字 代表 什么 类型的东西
能够使用的 类型 有 host, net 和 port
例如, `host foo', `net 128
3', `port 20'
假如 不指定 类型修饰子, 就使用 缺省的 host
dir 方向修饰子 指出 相对于 标识 的 传输方向 (数据是 传入还是传出 标识)
能够使用的 方向 有 src, dst, src or dst 和 src and dst
例如, `src foo', `dst net 128