ter 被用来指定一个过滤器程序。 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: 获取到离线记录文件的最后一个报文 6 四、课程设计框架 1. 核心流程图: 7 本程序是 VC 下基于对话框的窗口程序。界面如下: 图1 主要设计流程如下 1.在 OnInitialDialog 中获取并显示网卡信息 2. 在用户点击开始监听按钮时: a) 验证用户有效输入( 验证用户是否输入有效的监控时间,是否选择合适的过滤器,以及是否已选择网卡) b) 以混杂模式打开网卡 c) 根据用户在列表框中的选择编译并设置过滤器 d) 开始抓取报文, 将结果添加到统计链表。并随时检测是否超时。 e) 抓取完成之后,将结果输出到列表控件界面 f) 在用户关闭窗口或者开始再次监控时提示是否将结果输入日志文件( 在用户再次选择监控时,需要清空已有数据) g) 用户关闭窗口时, 提示保存日志并释放打开的所有适配器信息