winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
下面将详细介绍如何在VS2013使用winpcap开发网络应用程序。
1.首先,从http://www.winpcap.org/下载winpcap.exe和Developer's Pack.。安装winpcap.exe,并将Developer's Pack进行解压。
2.配置VS2013。在VS2013中新建一个空工程。具体设置如下:
(1)项目 →属性→配置属性→点击C/C++目录,点击展开的目录General,在右侧的Additional Include Directories中添加Include目录(Include目录在WpdPack中)
(2)项目 →属性→配置属性→点击C/C++目录,在右边的Preprocessor Definition加上WPCAP,HAVE_REMOTE,WIN32;
(3)项目 →属性→配置属性→点击Linker目录,点击展开的目录General,在右边的Additional Library Directories中添加lib目录(Lib目录在WpdPack中)
(4)项目 →属性→配置属性→点击Linker目录下的Input,在右侧的Additional Dependencies中添加wpcap.lib和Packet.lib。
下面给一个简单地例子:
1 #include "pcap.h" 2 3 main() 4 { 5 pcap_if_t *alldevs; 6 pcap_if_t *d; 7 int i = 0; 8 char errbuf[PCAP_ERRBUF_SIZE]; 9 10 /* 获取本地机器设备列表 */ 11 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1) 12 { 13 fprintf(stderr, "Error in pcap_findalldevs_ex: %s\n", errbuf); 14 exit(1); 15 } 16 17 /* 打印列表 */ 18 for (d = alldevs; d != NULL; d = d->next) 19 { 20 printf("%d. %s", ++i, d->name); 21 if (d->description) 22 printf(" (%s)\n", d->description); 23 else 24 printf(" (No description available)\n"); 25 } 26 27 if (i == 0) 28 { 29 printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); 30 return; 31 } 32 33 /* 不再需要设备列表了,释放它 */ 34 pcap_freealldevs(alldevs); 35 system("pause"); 36 }