文档库

最新最全的文档下载
当前位置:文档库 > winpcap函数

winpcap函数

1.int pcap_findalldevs(pcap_if_t **, char *)

说明:用来获得网卡的列表

参数:指向pcap_if_t**类型的列表的指针的指针; char型指针,当打开列表错误时返回错误信息

返回值: 为int型,当显示列表失败时返回-1

pcap_if_t 是pcap_if 重命名而来:typedef struct pcap_if pcap_if_t;

pcap_if结构体如下:

struct pcap_if

{

struct pcap_if *next; /*多个网卡时使用来显示各个网卡的信息*/

char *name; /* name to hand to "pcap_open_live()" */

char *description; /* textual description of interface, or NULL 就是网卡的型号、名字等*/

struct pcap_addr *addresses; //pcap_addr 结构体

bpf_u_int32 flags; /* PCAP_IF_ interface flags 接口标志*/

};

pcap_addr 结构体如下:

struct pcap_addr

{

struct pcap_addr *next;

struct sockaddr *addr; /* address */

struct sockaddr *netmask; /* netmask for that address 子网掩码*/

struct sockaddr *broadaddr; /* broadcast address for that address 广播地址*/

struct sockaddr *dstaddr; /* P2P destination address for that address P2P目的地址 */ };

举例:

pcap_if_t *alldevs;

pcap_if_t *d;

char errbuf[64];

if (pcap_findalldevs(&alldevs, errbuf) == -1)/* 这个API用来获得网卡的列表*/

{

fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);

exit(1);

}

for(d=alldevs;d;d=d->next)/* 显示列表的响应字段的内容*/

{

printf("%d. %s", ++i, d->name);

if (d->description)

printf(" (%s)\n", d->description);

else

printf(" (No description available)\n");

}

用pcap_findalldevs不能获得网卡的MAC,有两种方法可以实现,一、向自己发送arp包,二、使用IPHelp的API 可以获得。

2. void pcap_freealldevs(pcap_if_t *)

winpcap函数

(共9页)