将一个能被核心态(kernel-level)过滤器引擎解释的程序中的高层过滤表达式(Рfiltering expression)进行转化。pile()被用来将字符串str编译进过滤器程序(fp),程序(fp)pile()赋值的指针。optimize控制是否对目标代码(resulting code)mask表明IPv4掩码,它仅在检查过滤器程序中的IPv4广播地址的时候被使用。返回-1表示发生了错误,此时,pcap_geterr()将被用来显示错误信息。Р Р设置过滤器Рint pcap_setfilter(pcap_t* p,struct bpf_program* fp)Р把一个过滤器同一次抓包关联起来。pcap_setfilter被用来指定一个过滤器程序。fp是一个指向bpf_program结构体的指针,pile()执行的结果。当失败时返回-1,此时,pcap_geterr()被用来显示错误信息;返回0表示成功。Р4.抓包:Р接下来就是最后一步抓包,Winpcap提供的抓包接口主要有Рpcap_next_ex和pcap_loop两种Рpcap_loop直接由数据包捕获驱动所调用,它在底层抓取到包时,直接调用用户传入的处理函数Р本程序使用另一个函数pcap_next_ex:Р pcap_next_ex(pcap_t* p,struct pcap_pkthdr** pkt_header,const u_char** pkt_data)Р功能: 从interface或离线记录文件获取一个报文Р参数: p: 已打开的捕捉实例的描述符Р pkt_header: 报文头Р pkt_data: 报文内容Р返回值: 1: 成功 0: 获取报文超时Р -1: 发生错误 -2: 获取到离线记录文件的最后一个报文Р课程设计框架Р核心流程图: