CozyShark开发日志 1章节

WinPcap是一个基于Win32平台用于捕获网络数据包并进行分析的开源库。

本阶段枚举出当前设备列表,输出设备信息之后,输入网卡的序号进行监听。

通过pcap_open()函数打开选择的设备。

  • snaplen设为0xFFFF,比所有的MTU值都大,所以我们可以保证获取所有数据。
  • flags设为混杂模式,用来捕获所有的数据包。
  • to_ms设置为1000,表示超时时间为1s。

WinPcap提供了两种方式来获取数据包

  1. 使用pcap_dispatch()或pcap_loop(),通过提供的回调函数获取数据包,
  2. 使用pcap_next_ex()获取数据包

若采用回调函数的方式获取数据包,回调函数会在收到每个新的数据包并收到一个通用状态时被调用。
回调函数的类型为:

void(*)(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)

回调函数有三个参数:

  • user为用户自定的参数,可以用来保存一些附加信息
  • pkt_header结构体中有一些信息,如数据包的长度、数据包的时间戳
  • pkt_data是收到的数据包

回调的方式并不一定适合所有的场景,WinPcap提供了pcap_next_ex()函数,用来获取数据包。
只有当使用了pcap_next_ex()函数,才能收到一个数据包,代码中就采用了这样的方式实现Tester。

本阶段初步实现了使用WinPcap捕获网络设备的数据包,但是还是需要封装一套自己的易用的接口出来才可以。

原文地址:https://www.cnblogs.com/kingwl/p/5500098.html