winpcap开发包使用中的问题总结。

好久没写博客了,今天写点吧。

       这里主要讨论一下winpcap开发中可能遇到的问题,如果能帮助您解决一些困难,将是我的荣幸。

随便转载,转载请注明出处http://blog.csdn.net/leotangcw/

欢迎大家和我交流Email:tangchengwen@163.com

      winpcap开发包在使用中还是会有一些容易被忽略的问题的,由于这些问题可能让您在开发中产生一些莫名奇妙的结果。

    首先,我们从winpcap的环境配置中可能出现的错误开始。

    winpcap开发环境需要是windows操作系统,而且必须安装winpcap驱动才可以调试您的程序。

如果您的程序调试出现类式如下问题:can't find wpcap.dll.............等找不到动态链接库的毛病,请先下载安装winpcap    http://www.winpcap.org/install/bin/WinPcap_3_1.exe

如果编译的时候出现Cannot open include file: 'pcap.h': No such file or directory等类式找不到文件的错误,请察看是否加入了winpcap开发包的include文件夹。VC6下的加入方法是Tools->options->Directories里面加入下载的winpcap开发包解压以后的include文件夹.

如果链接的时候出现fatal error LNK1104: cannot open file "wpcap.lib"等问题,请察看是否加入了winpcap开发包的lib文件夹.VC6下的加入方法是Tools->options->Directories的lib里面加入下载的winpcap开发包解压以后的lib文件夹.

如果链接的时候出现error LNK2001: unresolved external symbol _pcap_findalldevs等问题,请察看link中是否加入了wpcap.lib.VC6下的加入方法是Project->Settings->Link的Objects/library modules里面加入wpcap.lib。

接下来是使用winpcap开发包中的一些函数的问题。

      1。用pcap_lookupnet时发现网卡的IP和掩码都是0.0.0.0并且无法捕捉。出现这个问题很多是因为使用了pcap_lookupdev这个函数。最好不要使用pcap_lookupdev这个函数,这个函数也是winpcap开发手册中推荐使用的,因为在实际使用中我们会发现很多机器在查找网卡时都能找到一个虚拟的网卡,而且这个很多时候都在第一个位置,这样向下一步提交设备句柄的时候就已经传错了。推荐您使用pcap_findalldevs返回一个网卡列表,然后找到您需要的正常网卡。这样也适合向多网卡移植。

      2。在使用了pcap_findalldevs,并且调试时发现已经是正常网卡,可是还是无法捕获。出现这个问题请您在调试时看看是否网卡的前面还有如:rpcap://这样的字段,这可能是因为您没有注意pcap_findalldevs,pcap_findalldevs_ex,pcap_open,pcap_open_live这几个函数的区别的原因,请您参考winpcap开发手册,里面有这样的字段The following formats are not allowed as 'source' strings:

  • rpcap:// [to open the first local adapter]
  • rpcap://hostname/ [to open the first remote adapter]

在上面的2种找网卡,和打开方式中,有的打开是没有rpcap://这种字段的,有的却有,有没有这个字段,后面的操作是不一样的,有的需要使用pcap_createsrcstr()来创建正确的字段,所以您一定要注意了。

    3。以上都没有问题,可是还是抓不到包,好像winpcap没有工作。请您察pcap_open或pcap_open_live函数中的延迟参数设置,一般设到1000(ms),因为如果您是在主线程下捕获,延迟设置过小(一般200ms以下就不稳定了)会使winpcap无法工作,多线程下没有这个问题,设到1都可以正常工作。

   4。在MFC下开发的问题,不要使用在Dos下开发时常用的pcap_loop而要选用pcap_next_ex等替代函数,这样才不会有回掉函数的那个问题。可以参看winpcap开发手册其中有如下说明:

 The callback-based capture mechanism of pcap_loop() is elegant and it could be a good choice in some situations. However, handling a callback is sometimes not practical -- it often makes the program more complex especially in situations with multithreaded applications or C++ classes.

恩,就写到这里吧,其他的问题现在我还没有遇到,如果有谁遇见了新的问题请发到这里,我们一起讨论。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
什么是WinPcap WinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库. 大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets。 这是一种简单的实现方式,因为操作系统已经妥善处理了底层具体实现细节(比如协议处理,封装数据包等等),并且提供了一个与读写文件类似的,令人熟悉的接口。 然而,有些候,这种“简单的方式”并不能满足任务的需求,因为有些应用程序需要直接访问网络的数据包。也就是说,那些应用程序需要访问原始数据包,即没有被操作系统利用网络协议处理过的数据包。 WinPcap产生的目的,就是为Win32应用程序提供这种访问方式; WinPcap提供了以下功能 捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的 在数据包发送给某应用程序前,根据用户指定的规则过滤数据包 将原始数据包通过网络发送出去 收集并统计网络流量信息 以上这些功能需要借助安装在Win32内核的网络设备驱动程序才能实现,再加上几个动态链接库DLL。 所有这些功能都能通过一个强大的编程接口来表现出来,易于开发,并能在不同的操作系统上使用。这本手册的主要目标是在一些程序范例的帮助下,叙述这些编程接口的使用。 如果您现在就想开始摸索这些功能,您可以直接进入 WinPcap用户手册. 哪些程序在使用WinPcap WinPcap可以被用来制作许多类型的网络工具,比如具有分析,解决纷争,安全和监视功能的工具。特别地,一些基于WinPcap的典型应用有: 网络与协议分析器 (network and protocol analyzers) 网络监视器 (network monitors) 网络流量记录器 (traffic loggers) 网络流量发生器 (traffic generators) 用户级网桥及路由 (user-level bridges and routers) 网络入侵检测系统 (network intrusion detection systems (NIDS)) 网络扫描器 (network scanners) 安全工具 (security tools) 什么是WinPcap做不到的 WinPcap能 独立地 通过主机协议发送和接受数据,如同TCP-IP。这就意味着WinPcap不能阻止、过滤或操纵同一机器上的其他应用程序的通讯:它仅仅能简单地"监视"在网络上传输的数据包。所以,它不能提供类似网络流量控制、服务质量调度和个人防火墙之类的支持

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值