winpcap 使用 问题及编程

来源:互联网 发布:excel设置不重复数据 编辑:程序博客网 时间:2024/05/16 13:57

下面资料全部来源于网络,我只是作了小小的整理。

 

开发包下载地址http://www.winpcap.org/archive/

中文文档地址http://www.ferrisxu.com/WinPcap/html/index.html

windump使用手册地址:http://www.winpcap.org/windump/docs/manual.htm

相关资料

 https://support.riverbed.com/software/software_cascadeairpcap.htm

http://www.winpcap.org/contact.htm

http://www.ferrisxu.com/WinPcap/html/index.html

如何编译

http://www.ferrisxu.com/WinPcap/html/index.html

使用WPCAP包时出现LINK : fatal error LNK1104: cannot open file "Iphlpapi.lib

在工程-->设置--->link 中的 对象/库模块的内容中把 Iphlpapi.lib 去掉就ok了

NOTE: remember to include WPCAP and HAVE_REMOTE among your
// preprocessor definitions.

 

我们经常用到的是#pragma   comment(lib,"*.lib")这类的。例如:#pragma   comment(lib,"Ws2_32.lib")表示链接Ws2_32.lib这个库。和在vc的工程设置里写上链入Ws2_32.lib的效果一样,不过这种方法写的程序别人在编译你的代码的时候就不用再设置工程settings了。

pcap-stdinc.h(76) : error C2054: expected '(' to follow '_W64

  error C2085: 'uintptr_t' : not in formal parameter list

  error C2628: '_W64' followed by 'int' is illegal (did you forget a ';'?)

解决方法

在pcap.h 文件头增加如下定义:

#define _W64
#include <pcap/pcap.h>

也就是在#include <pcap/pcap.h>定义前面加上#define _W64 就可以了!

解决了 开发环境:VS6.0;

 

 

Winpcap提供了以下强大的功能:

1.捕获原始的数据包

2.设置filter,只捕获自己敢兴趣的数据包

3.方便的把捕获的数据包输出到文件和从文件输入

4.发送原始的数据包

5.统计网络流量

6.…..(其它还有很多,我不知道了)



二.Winpcap的安装使用方法

1.到http://winpcap.polito.it下载winpcap的安装包,程序员开发包。

2.执行安装包,这样你的机子就能运行winpcap程序了

3.解压开发包,在VC的option的include和lib中加入winpcap的

include和lib

4. 在你的程序中加入#include <pcap.h>, #include <remote-ext.h>.然后在工程的setting中加入预定义宏:WPCAP,HAVE_REMOTE.导入wpcap.lib库

5.就可以编写wpcap程序了



三.Winpcap的一些基本的功能的实现

一)捕获数据包

1. 枚举所有的可用的设备[pcap_findalldevs_ex](可选)

2. 通过名字打开一个设备[pcap_open()]

在这里可以打开一个文件,只是在打开这个文件之前需要通过pcap_createsrcstr创建相应的name string

3. 设置Filter[pcap_compile, pcap_setfilter] (可选)

4. 捕获数据

有几种捕获数据的方法(捕获数据的数据都是最原始的数据包,即包含数据链路层的数据头)

a. 是以回调的方式[ pcap_loop,pcap_dispatch() ].

这两种方法基本相同,底层收集数据包,当满足一定的条件(timeout 或者缓冲区满),就会调用回调函数,把收集到的原始数据包s,交给用户。他们返回的数据缓冲区包含多个包

b. pcap_next_ex()的方式

每当一个包到到达以后,pcap_next_ex就会返回,返回的数据缓冲区里只包涵一个包。



二)发送包

Winpcap中有发送单个包和发送多个包的方法。这里只说说发送单个包

1. 通过名字打开一个设备[pcap_open]

2. 自己构造一个原始数据包(这个数据包会不经过任何处理就发送出去,所以必须把包中的各个字段设置好。另外这个数据包是包含数据链路层报头的)

3. 使用pcap_sendpacket()发送数据包

三)统计网络流量

1. 通过名字打开一个设备[pcap_open]

通过 read_timeout来设置统计的时间间隔

2. 设置filter[pcap_compile, pcap_setfilter] (可选)

3. 设置设备的为统计模式[ pcap_setmode(MODE_STAT);]

4. 开始统计,pcap_loop/pcap_dispatch()

5.在回调函数中的参数中就包含了统计信息