首先要读一下这一页的东西:http://www.winpcap.org/docs/docs_412/html/group__wpcapsamps.html
可以结合中文版本看http://www.ferrisxu.com/WinPcap/html/group__wpcapsamps.html
用 Microsoft Visual C++ 创建一个使用 wpcap.dll 的应用程序,需要按一下步骤:
记住以下几点:
因为我用的是4.1.2版本的winpcap,所以中文版本的文档中的例子并不适用,只能自己结合着英文文档去摸索了。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include "pcap.h" 4 5 int main() 6 { 7 pcap_if_t *alldevs; 8 pcap_if_t *d; 9 int i=0; 10 char errbuf[PCAP_ERRBUF_SIZE]; 11 12 /* 获取设备列表 */ 13 if (pcap_findalldevs(&alldevs, errbuf) == -1) 14 { 15 fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); 16 exit(1); 17 } 18 19 /* 打印列表 */ 20 for(d=alldevs;d;d=d->next) 21 { 22 printf("%d. %s", ++i, d->name); 23 if (d->description) 24 printf(" (%s)\n", d->description); 25 else printf(" (No description available)\n"); 26 } 27 28 if(i==0) 29 { 30 printf("\n没有发现接口!确保WinPcap安装.\n"); 31 return 0; 32 } 33 34 /* 不再需要设备列表了,释放它 */ 35 pcap_freealldevs(alldevs); 36 return 0; 37 }
输出结果:
1、pcap_if_t 是什么呢?从pcap.h中看到
typedef struct pcap_if pcap_if_t;
而pcap_if 在文档中是这样介绍的:
可以发现其实 pcap_if 是一个链表,而 pcap_if 有五个值,其中 next 是指向链表中下一个结构体的,name 是适配器的名字,description 是对适配器的描述,
addresses 是适配器分配到的 ip地址信息,flags 是一个接口标志,目前仅有一个标志是 PCAP_IF_LOOPBACK,代表环回接口。
再看下面这个重要的函数:
pcap_findalldevs ( pcap_if_t ** alldevsp, char* errbuf )
返回系统上可用的接口列表。
pcap_findalldevs()构造一个网络设备列表,可以打开pcap_open_live()。(请注意,可能会有网络设备,不能打开pcap_open_live过程()的调用pcap_findalldevs(),因为,例如,这一过程可能没有足够的权限打开捕捉;;如果是这样,这些设备不会出现在列表中。) alldevsp设置为指向列表的第一个元素,每个元素的列表是pcap_if_t类型。
简单的了解一下,pcap_open_live()是打开一个物理接口实时捕获,具体的可以去看一下文档。这个函数和以前版本是不同的。之前调用的是pcap_findalldevs_ex()函数,4.1.2版本的WinPcap换了函数。
pcap_freealldevs()函数是清空一个接口的列表,这个就不解释了。
原文:http://www.cnblogs.com/gdayq/p/5830764.html