图2 设计总流程图
2.2功能模块设计
主要分为以下四个模块:查看网卡信息、查看传输速度、数据包的捕获与过滤、UDP数据包统计等,模块实现功能如下:
(1)查看网卡信息:查看适配器列表描述及高级信息(本地环回接口、协议族、IP、子网掩码、广播地址)。
(2)查看传输速度:显示通过网卡的数据包传输速度。
(3)数据包的捕获与过滤:数据包的捕获与分析主要针对Ethernet、ARP、IP、TCP、UDP、ICMP,同时判断是否为基于TCP、UDP的服务(其中包括NetBIOS、FTP、SSH、Telnet、SMTP、TFTP、HTTP、POP3、SOCKS)以及实现对数据包的过滤分析。
(4)统计数据包:统计UDP数据包的数量。
图3 功能模块
3.程序各模块的实现
首先需要配置环境:下载WinPcap安装包及开发包,安装WinPcap安装包,解压开发包,在VC++6.0环境下,在主界面里执行:工程—设置—C++(预处理程序定义)加入“,WPCAP” 、连接—对象/库模块 加入“ wpcap.lib ws2_32.lib”
在 工具—选项—目录 添加 include files 指向winpcap库文件的 include文件夹,添加 library files 指向winpcap库文件的lib文件夹。同时注释掉以下内容:
typedef _W64 unsigned int uintptr_t;
...
typedef _W64 int intptr_t;
因微软已经不再对 VC++6 支持了,最新的 SDK 已经不能在 VC6 上使用。但一些环境需要下载相应的SDK,下载Microsoft Platform SDK,同时添加指向(置顶)。
通过调用WinPcap的低级动态链接库(Packet.dll)和高级系统无关库(Wpcap.dll)均可实现基于以太网协议的数据包的分析,但考虑到高级系统无关库可以跨平台的特性,本设计着重研究基于Wpcap.dll的以太网数据获取和分析方法。基本流程分为四步:获取网卡详细信息、数据包捕获及过滤、UDP数据包的统计。
3.1获取网卡设备信息
主要借助于pcap_findalldevs 或者pcap_findalldevs_ex函数来实现对设备列表的访问。通过调用WinPcap的pcap_findalledvs函数获取网卡设备信息,函数会自动搜索本地可用的网卡,并将网卡信息以列表的方式返回给用户。查看结构体pcap_if_t与pcap_addr_t的定义可知,当访问到设备列表时,通过访问其数据成员即可获得本地环回接口、协议族、IP、子网掩码、广播地址等相关信息。运行结果如图4所示。图4 网卡详细信息