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 *)