Visual Studio 2005 Express 下的 WinPcap 配置
1、安装 Visual Studio 2005 Express Edition 和 Paltform SDK。 如 何安装Visual Studio 2005 Express在这里就不赘述了,很简单的。由于VC Express没有自带 Platform SDK,所以需要自己下载安装(如果不安装 psdk的话,就会出现 找不到 winsock2.h 的编译错误)。由于微软现在官网提供的psdk下载比较麻烦,需要windows正版验证,再加上体积比较大,所以我这里就不用,我用的psdk是在这里 下载的: XPSP2 PSDK Full Download with Local Install 还有一个,不知道能不能安装在xp上,有兴趣的兄弟可以自己试试 Windows Server 2003 PSDK Full Download with Local Install 似乎这两个链接在官网上是找不到的 下载、解压、安装,然后再配置 VC++: tools --> options --> Projects and Solutions --> VC++ Directories : 把以下路径添加到相应的下拉节点中去:(其中psdk是你的sdk安装目录)
安装后按要求重启,如果没安装这个包,程序即使编译成功也不能运行,会提示找不到 winpcap.dll 3、下载 WinPcap Developer's Packs 解压后会得一个目录WpdPack四个子目录: docs Examples-pcap Examples-remote Include Lib 然后配置VC++ tools --> options --> Projects and Solutions --> VC++ Directories :
4、新建一个 win32->win32 console application 工程,然后配置工程属性:
注意,如果不添加 #include "remote-ext.h" 也是会报错的~ 6、链接错误: anothertest.obj : error LNK2019: unresolved external symbol __imp__WSASetLastError@4 referenced in function _WspiapiGetNameInfo@28 anothertest.obj : error LNK2019: unresolved external symbol __imp__inet_ntoa@4 referenced in function _WspiapiLegacyGetAddrInfo@16 anothertest.obj : error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function _WspiapiLegacyGetAddrInfo@16 anothertest.obj : error LNK2019: unresolved external symbol __imp__getservbyname@8 referenced in function _WspiapiLegacyGetAddrInfo@16 anothertest.obj : error LNK2019: unresolved external symbol __imp__htons@4 referenced in function _WspiapiLegacyGetAddrInfo@16 anothertest.obj : error LNK2019: unresolved external symbol __imp__inet_addr@4 referenced in function _WspiapiParseV4Address@8 anothertest.obj : error LNK2019: unresolved external symbol __imp__WSAGetLastError@0 referenced in function _WspiapiQueryDNS@24 anothertest.obj : error LNK2019: unresolved external symbol __imp__gethostbyname@4 referenced in function _WspiapiQueryDNS@24 anothertest.obj : error LNK2019: unresolved external symbol __imp__gethostbyaddr@12 referenced in function _WspiapiLegacyGetNameInfo@28 anothertest.obj : error LNK2019: unresolved external symbol __imp__getservbyport@8 referenced in function _WspiapiLegacyGetNameInfo@28 anothertest.obj : error LNK2019: unresolved external symbol __imp__ntohs@4 referenced in function _WspiapiLegacyGetNameInfo@28 解决该问题,需要只需把ws2_32.lib添加到wpcap.lib Packet.lib后面(见上面第4条) http://www.blogjava.net/JafeLee/archive/2007/09/27/148719.html ----------------------------------------------------------- 网络编程学习日记(1)_WinPcap和VC的配置 2008-08-21 13:34
-=------------------------------------------------------- 测试成功的代码: #pragma comment(lib,"wpcap.lib") ------------------------------------------------ 说明:WinPcap共有安装程序和开发包 静态链接库目录(Lib)
1.运行WinPcap 程序,出现"无法找到组件"对话框错误:
解决方法:安装WinPcap
2.在VC6.0中编译WinPcap程序,出现下面错误:
解决方法: 目录中的Lib目录 4.Build 基于WinPcap的应用程序,出现链接错误: Linking...
解决方法: wpcap.lib 前面有空格 http://blog.csdn.net/zhangyang0402/archive/2009/01/15/3789718.aspx --------------------------------------------------------------------------------------------- 在winpcap3.1beta4的文档中 有个获取设备列表的例子程序 其中使用到了pcap_findalldevs_ex()函数,在文档中是这样介绍这个函数的: This function is a superset of the old 'pcap_findalldevs()', which is obsolete, and which allows listing only the devices present on the local machine. Vice versa, pcap_findalldevs_ex() allows listing the devices present on a remote machine as well. 简单说pcap_findalldevs_ex()是pcap_findalldevs()的一个超集, 他不仅可以获取本地的设备列表,还可以获取远程计算机的社别列表,但是在将pcap_findalldevs()换成 pcap_findalldevs_ex()的过程中却出现了意想不到的错误
#include <cstdlib> #include <iostream> #include <pcap.h> using namespace std; int main(int argc, char *argv[]) { pcap_if_t *alldevs; pcap_if_t *d; int i=0; char errbuf[PCAP_ERRBUF_SIZE]; if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==0){ while(!(alldevs==NULL)){ cout<<"设备"<<i<<"的名称"<<(alldevs->name)<<endl; cout<<"设备"<<i<<"的描述"<<(alldevs->description)<<endl; alldevs=alldevs->next; i++; } } system("PAUSE"); return EXIT_SUCCESS; } 使用dev c++编译,出现以下错误 F:/IT学习/c++/301/main.cpp In function `int main(int, char**)': 在网上查了一下,有人说这是wincap的一个失误,忘记把该函数的声明文件包含进去了 我打开pcap.h看了一下,确实没有pcap_findalldevs_ex函数的声明 不死心 找个文本搜索工具,在dev c++的include文件夹中搜索pcap_findalldevs_ex,[在此之前我已经把wincap的头文件全部拷入了该目录,呵呵,有些.....] 结果真让我查到了,该函数的名称在remote-ext.h找到了 我看了一下,嘿嘿,就是他了 该代码,包含该文件 #include <cstdlib> #include <iostream> #include <pcap.h> #include <remote-ext.h> using namespace std; int main(int argc, char *argv[]) { pcap_if_t *alldevs; pcap_if_t *d; int i=0; char errbuf[PCAP_ERRBUF_SIZE]; if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==0){ while(!(alldevs==NULL)){ cout<<"设备"<<i<<"的名称"<<(alldevs->name)<<endl; cout<<"设备"<<i<<"的描述"<<(alldevs->description)<<endl; alldevs=alldevs->next; i++; } } system("PAUSE"); return EXIT_SUCCESS; } 再次编译,竟然还有错误 F:/IT学习/c++/301/main.o(.text+0x15b) In function `main': 想起来了,使用dev c++的时候常遇到的问题 加载dll 打开工程选项->参数->连接器->加入库或者对象 找到wpcap.lib,确定 然后再编译,通过 这是我机器上的运行结果 设备0的名称rpcap:///Device/NPF_GenericNdisWanAdapter 呵呵,有些乱啊 好在通过了 现在看来,如果使用不到pcap_findalldevs_ex的高级特性的化 仅仅是想获取一下设备列表的话 还是使用原先的pcap_findalldevs()函数吧 简单易用,相信也不会发生这样的错误 呵呵 当然,这只是测试代码 http://blog.csdn.net/bingdian37/archive/2006/08/07/1034873.aspx
转自:http://hi.baidu.com/kuangxiangjie/blog/item/19e2c23f7505a7ca7c1e7160.html |
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2008anzhuangwenti/2020/0722/1920.html