WinPcap初学(1)

系统 2455 0

    WinPcap的使用说明网上也有不少,这里仅作学习过程的记录。
    首先,从官方下载了较新的开发包 WpdPack_4_0_2 ,里面有不少的例子。不过都是VC6.0的,而我想要开发的环境是VS2008。解压后有5个文件夹,其中Lib和Include两个要包含在工程中。方法如下:1)项目->属性->配置属性->链接器->常规->附加库目录,加入Lib所在路径;2)项目->属性->配置属性->链接器->输入->附加依赖项,加入wpcap.lib与Packet.lib两个静态链接库;3)项目->属性->配置属性->C/C++->常规->附加包含目录,加入Include所在路径。
    接着,我参考了 http://www.smatrix.org/bbs/read.php?tid=358&fpage=4 里头的步骤开始获取网络驱动。结果很不幸地出现了一些莫名其妙的错误:1>c:\program files\microsoft sdks\windows\v6.0a\include\netioapi.h(155) : error C2146: 语法错误 : 缺少“;”(在标识符“PhysicalMediumType”的前面)。错误发生在    NDIS_PHYSICAL_MEDIUM PhysicalMediumType 这一句上。网上有一些解析,说这是因为VS2008对ntddndis.h里头的定义比较新,WinPcap的头文件在对ntddndis.h的编译过后没有获得相应的定义,固NDIS_PHYSICAL_MEDIUM不是一个结构或类,所以就产生了缺少“;”这样奇怪的错误。把netioapi.h里的#include <ntddndis.h>改为#include "ntddndis.h"后终于通过编译,改为" "后项目则从包括的文件中先查找头文件的定义,若找不到再从默认路径中查找。(网上查到的解析是: <>先去系统目录中找头文件,如果没有在到当前目录下找。而""首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 )因此我猜想Include文件夹里头的ntddndis.h有NDIS_PHYSICAL_MEDIUM的定义。再查看了一下Include文件夹里的ntddndis.h,也没发现,但在查看c:\program files\microsoft sdks\windows\v6.0a\include\下的ntddndis.h时竟然发现有NDIS_PHYSICAL_MEDIUM的定义!!! 是不是我对系统目录的概念理解有误呢?假如把Include里的头文件删了,再改回<>可以通过编译的话,那么就说明在用<>的情况下查找的顺序应该是先查Include文件夹再查默认路径。一试之下竟然应验了。于是再去搜了一个尖括号与双引号的区别,这个解析得比较清晰: 引号时,系统先在引用被包含文件的源文件所在的文件目录中寻找要包含的文件,若找不到,再按系统指定的标准方式检索其他目录。尖括号时,不检查原文件所在的文件目录,而直接按系统标准方式检索文件目录 。这样子就能解析发生了什么问题,因为发生错误的是在netioapi.h的头文件里,而这个头文件是在c:\program files\microsoft sdks\windows\v6.0a\include\下,所以在用<>时项目没有直接查与netioapi.h同一目录下的ntddndis.h,而是直接查到了Include头上。
    把错误排除了之后,程序正常运行,我的电脑装了个1000M网卡,所以搜出了3个驱动,第一个是VPN的,然后才是两个物理网卡。

WinPcap初学(1)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论