校园网拨号器的C语言实现(二)——Winpcap安装
没想到安装Winpcap竟是个体力活,还真的折腾了好久。。(我的系统中已经装有VC6)
winpcap中文教程chm下载地址http://download.csdn.net/detail/stargate08/2686898
VC6平台下的安装步骤:
- 到http://www.winpcap.org/install/default.htm下载winpcap的安装包。并安装。
- 到http://www.winpcap.org/devel.htm程序员开发包。(注意要和安装包的版本匹配)
- 解压开发包,在工程中加入winpcap的include和lib(在VC的tools-option-目录的include和lib,Eclipse的project-properties-c/c++
build-settings中的GCC C Compiler-Includes和MinGW C Linker-Libraries)。可能需要添加ws2_32.lib。 - 新建Win32 Console Application,把Winpcap教程的第一个例子(获取设备列表)复制进来。在main()前面加上void或者int。
- 在VC在project-setting-CC++中加入预定义宏:WPCAP,HAVE_REMOTE,在project-setting-连接导入wpcap.lib库;Eclipse在project-properties-c/c++ build-settings中的GCC C Compiler-Symbols中中加入预定义宏:WPCAP,HAVE_REMOTE,在project-properties-c/c++build-settings-MinGW C Linker-Libraries中添加wpcap.lib和ws2_32.lib。
- 编译可能仍会报错,我的报错如下:
D:\Program Files\Microsoft Visual Studio\VC98\Include\Include\pcap-stdinc.h(79) : error C2054: expected '(' to follow '_W64'
D:\Program Files\Microsoft Visual Studio\VC98\Include\Include\pcap-stdinc.h(79) : error C2085: 'uintptr_t' : not in formal parameter list
D:\Program Files\Microsoft Visual Studio\VC98\Include\Include\pcap-stdinc.h(88) : error C2628: '_W64' followed by 'int' is illegal (did you forget a ;'?)
D:\Program Files\Microsoft Visual Studio\VC98\Include\Include\pcap-stdinc.h(88) : error C2085: 'intptr_t' : not in formal parameter list
D:\Program Files\Microsoft Visual Studio\VC98\Include\Include\pcap\bpf.h(67) : error C2085: 'bpf_int32' : not in formal parameter list
解决方法:在pcap.h头文件中前面增加:#define _W64 - 编译过程中会有很多奇怪的错误,这篇文章总结的还不错:http://blog.csdn.net/zhangyang0402/article/details/3789718
- 经过上述的操作,就可以跑通Winpcap教程中的除了第2个以外的所有例子了。其实第2个例子对我要实现的工程没有什么影响。
- 运行第二个例程(获取已安装设备的高级信息)会有以下报错:
D:\wpdpack\examples-pcap\iflist\iflist.c(152) : error C2065: 'socklen_t' : undeclared identifier
D:\wpdpack\examples-pcap\iflist\iflist.c(152) : error C2146: syntax error : missing ';' before identifier 'sockaddrlen'
D:\wpdpack\examples-pcap\iflist\iflist.c(152) : error C2065: 'sockaddrlen' : undeclared identifier
D:\wpdpack\examples-pcap\iflist\iflist.c(161) : warning C4013: 'getnameinfo' undefined; assuming extern returning int
D:\wpdpack\examples-pcap\iflist\iflist.c(167) : error C2065: 'NI_NUMERICHOST' : undeclared identifier
Error executing cl.exe.
http://blog.csdn.net/nemo2011/article/details/6752540中提到了解决方法,和大多数解决方法相同,都要安装SDK。。。但是我安装SDK失败。。而且和本工程关系不大,就没有折腾这个了。我找到的SDK的下载地址为http://www.microsoft.com/en-us/download/details.aspx?id=8442#top,仍不知道为什么安装失败。。
另外又尝试了一下Visual Studio 2012平台下的Winpcap安装,基本上和VC平台下一样的,具体就不再赘述,但会遇到新问题:
“ConsoleApplication1.exe”(Win32): 已加载“C:\Users\hp\Documents\Visual Studio 2012\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe”。已加载符号。
“ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
“ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。无法查找或打开 PDB 文件。
“ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。
“ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcp110d.dll”。已加载符号。
“ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr110d.dll”。已加载符号。
程序“[8124] ConsoleApplication1.exe”已退出,返回值为 0 (0x0)。
解决方法:
- 点 调试->选项和设置
- 右边勾上 启用源服务器支持
- 左边点 符号->把微软符号服务器勾
- 运行的时候等一下 莫慌!!问题解决
或者更简单的解决方法:在main函数末尾加上getchar();就OK啦~
VS下可以运行成功Winpcap中所有的例程。

浙公网安备 33010602011771号