Winpcap主要数据结构
1) typedef struct _ADAPTER ADAPTER //描述一个网络适配器;
2) typedef struct _PACKET PACKET //描述一组网络数据报的结构;
3) typedef struct NetType NetType //描述网络类型的数据结构;
4) typedef struct npf_if_addr npf_if_addr //描述一个网络适配器的ip地址;
5) struct bpf_hdr //数据报头部;
6) struct bpf_stat //当前捕获数据报的统计信息。
Winpcap主要函数
1)int pcap_findalldevs ( pcap_if_t ** alldevsp, char * errbuf) 功能:列出当前所有可用的网络设备(网卡) 所在头文件:pcap.h 参数说明: pcap_if_t ** alldevsp 指向pcap_if_t结构列表的指针的地址。实际使用时,声明一个pcap_if_t结构的指针(pcap_if_t * alldevsp),然后把该地址作为参数传入即可(&alldevsp)。
char * errbuf 错误缓冲区,要求长度至少为PCAP_ERRBUF_SIZE 字节 返回值: -1:出错,将会向错误缓冲中填充错误信息,错误信息为ASCII码,可以直接打印出来。 0:正确返回,可以使用alldevsp访问所有网络硬件
pcap_if的结构
Struct pcap_if {
struct pcap_if *next;
char *name;
chat *description;
struct pcap_addr address;
u_int flags;
}
也可以用pcap_if_t 代替pcap_if
2) pcap_t * pcap_open_live ( char * device, int snaplen, int promisc, int to_ms, char * errbuf ); 获取一个包捕捉句柄,类似文件操作函数使用的文件句柄。
device指定网络接口设备名。
snaplen指定单包最大捕捉字节数。
promisc指定网络接口进入混杂模式。
to_ms指定毫秒级读超时,0可能代表永不超时。
errbuf包含失败原因。
如果调用失败返回NULL, 。
2) pcap_t * pcap_open_live ( char * device, int snaplen, int promisc, int to_ms, char * errbuf ); 获取一个包捕捉句柄,类似文件操作函数使用的文件句柄。
device指定网络接口设备名。
snaplen指定单包最大捕捉字节数。
promisc指定网络接口进入混杂模式。
to_ms指定毫秒级读超时,0可能代表永不超时。
errbuf包含失败原因。
如果调用失败返回NULL。
3)void pcap_close ( pcap_t *p )该函数用于关闭pcap_open_live()获取的包捕捉句柄,释放相关资源。
4)int pcap_lookupnet ( char * device, bpf_u_int32 * netp, bpf_u_int32 * maskp, char * errbuf ); 该函数用于获取指定网络接口的IP地址、子网掩码。
5)int pcap_compile ( pcap_t * p, struct bpf_program * fp, char * str, int optimize, bpf_u_int32 netmask ); 该函数用于解析过滤规则串,填写bpf_program结构。str指向过滤规则串。
6)int pcap_setfilter ( pcap_t * p, struct bpf_program * fp ); 该函数用于设置pcap_compile()解析完毕的过滤规则,完全可以自己提供过滤规则,无须pcap_compile()介入
7) int pcap_dispatch ( pcap_t * p, int cnt, pcap_handler callback,
u_char * user ); 捕捉报文以及分发报文到预先指定好的处理函数(回调函数)。
pcap_dispatch()接收够cnt个报文便返回,如果cnt为-1意味着所有报文集中在一个缓冲区中。如果cnt为0,仅当发生错误、读取到EOF或者读超时到了(pcap_open_live中指定)才停止捕捉报文并返回。