这几天在做计算机网络实验,需要用到winpcap来编程。整个实验需要使用c++语言来实现,身边的同学选择的编辑器很多,有eclipes,有vs等等。我选择的是之前用过的codeblocks,那么如何在codeblocks中配置winpcap编程环境呢?首先,我使用的编译器是mingW,这也是很多同学都在用的,当然也有人选择vc或者其他的,我在这介绍的环境配置都是基于mingW的.
第一步,下载codeblocks,在网上看到的codeblocks自带的mingW编译器版本很低,不太好,我选择的是下载不带编译器的codeblocks,地址:http://www.codeblocks.org/downloads/26#windows 选择没有编译器的版本;
下载后就能安装了...
第二步,配置mingW编译器,下载地址:http://sourceforge.net/projects/mingw/files/latest/downloadsource=files
下载的是一个exe文件,安装完成之后你会发现出现一个下载库的窗口,叫Mingw Installation Manager,这里面有很多需要的文件,注意:大家可以发现最左边有Basic Steup和All Packages两个分类。第一个Basic Steup即为必须要安装的编译类库,All Packages即为所有的类库。为了保险起见,我把所有的类库都安装了。全部安装完之后即会显示绿色。安装后的mingW目录:
下面配置环境变量,我们需要配置这几个变量:
PATH=D:\MinGW\bin;
LIBRARY_PATH=D:\MinGW\lib;D:\MinGW\lib\gcc\mingw32\4.6.2;
C_INCLUDE_PATH=D:\MinGW\include;D:\MinGW\lib\gcc\mingw32\4.6.2\include;
CPLUS_INCLUDE_PATH=D:\MinGW\include;D:\MinGW\lib\gcc\mingw32\4.6.2\include\c++;D:\MinGW\lib\gcc\mingw32\4.6.2\include\c++\backward;D:\MinGW\lib\gcc\mingw32\4.6.2\include\c++\mingw32;
ok,到这里,mingw的安装就算完成了,
现在,我们需要在凑得codeblocks中添加mingW。打开codeblocks,
setting->compiler->global compiler setting->toolchain executables ,在compiler installation中选择mingw的安装目录,点击ok。
好啦,现在我们写一个C程序试试!
结果:
ok,现在mingw没问题了!
第三步,配置winpcap环境。
下载地址:http://www.winpcap.org/archive/
注意:我下载的是4.1.1版本的,据说最新版不靠谱...你需要下载4.1.1-WinPcap.exe和4.1.1-WpdPack.zip.
下载后,exe文件点击安装就行,而.zip文件需要解压到相关目录下,解压后的目录如图所示;
将lib文件夹下面的文件拷到mingw文件下面对应的lib文件夹,同时,将include文件夹下面的文件拷到mingw文件夹下面的include文件夹下.
接着,在codeblocks中引入winpcap的库。
在编译本程序的时候碰到了很多问题,这里想总结一下解决的办法。
之前在网上查找过很多博客,但是发现程序都是在VC下进行编译的,而我的codeblocks用的是MingW编译器进行编译的,之间会有很多区别,VC编译器如何解决我这里就不做介绍了,因为编写C程序还是比较习惯在codeblocks下,个人偏好。配置其实跟VC下的配置差不多,仍然是在Link Libraries下加入Packet.lib和wpcap.lib,这两个库文件是WinPcap提供的;另外,还要添加libws2_32.a这个库,这个库可以在MingW安装目录下的lib文件夹里面找到,VC下面是要添加ws2_32.lib这个库,大家千万不要搞混了,因为有看到很多博客上写的是配置codeblocks添加ws2_32.lib,当然如果是用VC的编译器就没问题,但如果用MingW编译器一般不会报错,但是会出现很多Warning,大家注意一下便是。
另外,在Search directories的Compiler目录下加入WinPcap的include目录,也可以把MingW安装目录下的include目录添加进去,添不添加关系不大,但是WinPcap的include目录一定是要包含进去的。同样,截图给大家看一下本机配置情况:
到这里基本的环境就配置好了,我们可以写一段代码测试一下:
#include <pcap.h>运行结果:
main( )
{
pcap_if_t *alldevs;
pcap_if_t *d;
int i=0;
char errbuf[PCAP_ERRBUF_SIZE];
if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
exit(1);
}
for(d= alldevs; d != NULL; d= d->next)
{
printf("%d. %s", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);
else
printf(" (No description available)\n");
}
if (i == 0)
{
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return -1;
}
pcap_freealldevs(alldevs);
return 0;
}
ok,大功告成!