通过winPcap,可以再window上轻松捕获网卡数据包,还可以发送链路层的Packet将,可以网卡对网卡通信,这样非常有用,比如网络中有一个嵌入式设备,初始ip为192.168.0.122, 但是主机PC的ip为192.168.1.13 这样ip不在同一段中,不能直接通信,这样就可以利用winPcap在主机PC上广播数据包,找到网络这的192.168.0.122设备,将其改为DHCP或者手动设置新的IP,这样,两个设备就可以直接通信了。
大家会觉得,手动改一下嵌入式设备好了,但是,你要知道,如果网络中有几百个这样的设备,或者网络环境发生变化,这工作量就不是一般的大了。
linux下的socket提供了原始套接字,可以不通过winPcap,而直接发送链路层的数据包,我的IP-Camera中已经加入了这个功能,arm端用的是linux的原始套接字,PC端用的是winPcap。在稍后的博文中,会贴出一部分主要代码,供大家参考
废话少说,还是先建工程
我的winpCap库路径如下,Solution为VS输出的宏,表示工程跟目录
$(SolutionDir)winPcap\Include
$(SolutionDir)winPcap\Lib
(1)执行下面的操作打开配置对话框:工具->选项->项目和解决方案->VC++目录
(2)在“显示以下内容的目录”下面选择“包含文件”,添加新的项:$(SolutionDir)winPcap\Include
(3)在“显示以下内容的目录”下面选择“库文件”,添加新的项:$(SolutionDir)winPcap\Include
(4)新建一个C++项目工程,然后配置工程属性:
(5)右键->属性->配置属性->C/C++->预处理器-> 预处理器定义,添加WPCAP HAVE_REMOTE (重要)
(6)右键->属性->配置属性->连接器->输入->附加依赖项,添加 wpcap.lib Packet.lib ws2_32.lib。
如果设置不对会出现
PCAP_SRC_IF_STRING PCAP_OPENFLAG_PROMISCUOUS 还有函数找不到的错误
注:最后编译release版本 步骤4~6还要重做一遍的,debug和release就是两种不同的项目配置