函数名称: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.3', `src or dst port ftp-data'. 假如 不指定 方向修饰子, 就使用 缺省的 src or dst . 对于 `null' 链路层 (就是说 象 slip 之类的 点到点 协议), 用 inbound 和 outbound 修饰子 指定 所需的 传输方向. proto 协议修饰子 需要 匹配 指定的协议. 能够使用的 协议 有: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp 和 udp. 例如, `ether src foo', `arp net 128.3', `tcp port 21'. 假如 不指定协议修饰子, 就使用 任何 符合 类型 的 协议. 例如, `src foo' 指 `(ip 或 arp 或 rarp) src foo' (注意后者不符合语法), `net bar' 指 `(ip 或 arp 或 rarp) net bar', `port 53' 指 `(tcp 或 udp) port 53'. [`fddi' 实际上 是 `ether' 的 别名; 分析器 把 他们 视为 ``用在 指定 网络接口 上的 数据链路层....