WinPcap编程基础知识

 

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中指定)才停止捕捉报文并返回。

 

 

你可能感兴趣的:(数据结构,编程,网络,struct,null,callback)