表6 程序中使用Winpcap数据结构(变量)表
函数名 |
参数 |
说明 |
pcap_open_live(*devicename, 65536,1,-1,errbuf); |
Devicename-设备名称
65536-捕获数据包最大长度
1- 设为混杂模式,这样可以捕获到所有的包
-1 超时,表示读一个包后多久返回,-1表示立即返回,无超时
errbuf-错误处理缓冲区 |
打开一个网络设备,该函数返回该设备的pcap_t指针 |
pcap_close(fp); |
fp-设备指针 |
关闭已打开的网络设备 |
pcap_findalldevs(&alldevs, errbuf); |
alldevs-pcap_if_t结构变量
errbuf-错误处理缓冲区 |
返回系统中所有的网络设备
|
pcap_next_ex( fp, &header, &pkt_data); |
fp-设备指针
header-数据包头
pkt_data-数据包内容 |
该函数从网络设备中读取一个数据包
返回值为1:成功
-1:发生错误
0:超时 |
表7 程序中使用的Winpcap函数表
三、 程序开发简介
为了实现程序的功能,需要定义如下一个结构:
struct packetstru
{
unsigned short datalen; //数据报长度
unsigned char data[2000]; //数据内容
unsigned long tick; //捕获时间
int clearflag; //清除标志 0-不清除 1-清除
int showflag; //显示标志 0-不显示 1-显示
struct packetstru *next; //指向下一数据包
};
该结构定义了一个单链表,每个捕获到的数据包都保存在该链表中。
函数convertip用于将字符串表示的IP地址转换成4个unsigned char值
函数clear_packetlist用于从数据包链表中清除clearflag为1的记录
函数GetMacAddress 用于取source表示的网络设备MAC地址
数据包捕获在如下的线程中完成
|