WinPcap使用
- 格式:pdf
- 大小:1.60 MB
- 文档页数:47
使用Winpcap示例程序的时候解疑使用Winpcap示例程序的时候,会出现很多错误(转)WINPCAP编程环境设置2008-05-19 12:41一、WINPCAP编程环境设置在正式WinPcap编程之前,要配置运行环境。
1、运行环境设置Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:wpcap.dll Packet.dll WanPacket.dll pthreadVC.dll 这四个动态链接库在WinPcap驱动程序里。
如果没有这个驱动程序,需要到WinPcap官方网站上下载,下载地址为: 如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。
也可以不安装WinPcap驱动程序。
但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32目录下。
(似乎有些问题)2、配置编程环境。
1> 从上下载WINPCAP SDK -WpdPack,WinPcap SDk里面包含库文件,头文件,文档文件和一些例子。
解压到一个指定的目录。
解压缩后把Include目录添加到IDE的包含文件中(VC6.0 T ools->Option->Directory; VS 2003/2005 工具->选项->项目和解决方案/项目->VC++目录); lib目录添加为新的库文件目录(VC6.0Tools->Option->Directory; VS 2003/2005 工具->选项->项目和解决方案/项目->VC++目录)如下图所示。
2> 如果一个源文件使用了WinPcap提供的库函数,那么就需要在该文件开始的位置添加pcap.h包含文件(或者在引用的文件中),即#include “pcap.h”也许会出现下面的错误:fatal error C1083: 无法打开包括文件:“pcap.h”: No such file or directory这个错误表明找不到pcap.h文件,这个头文件在驱动程序安装完成后也是没有的,它是开发包里面的一个头文件,所以,如果要运行程序还需要到官方网站上去下载WinPcap SDK,并按步骤1添加到项目中。
winpcap过滤规则
Winpcap过滤规则有:
1.基于协议的过滤。
使用协议限定符,协议限定符可以为ip、arp、
rarp、tcp、udp等。
2.基于MAC地址的过滤。
使用限定符ether(代表以太网地址)、
当MAC地址仅作为源地址时表达式为ether src mac_addr,仅作为目的地址时表达式为ether dst mac_addr,既作为源地址又作为目的地址时表达式为ether host mac_addr。
3.基于IP地址的过滤。
使用限定符host(代表主机地址)。
当IP
地址仅作为源地址时过滤表达式应为src host ip_addr,仅作为目的地址时过滤表达式为dst host ip_addr,既作为源地址又作为目的地址时表达式为host ip_addr。
此外,还有基于端口的过滤。
WinNetCap使用手册目录WinNetCap的安装 (2)WinNetCap使用方法 (3)功能按钮使用 (4)菜单栏使用 (5)数据查看 (5)WinNetCap的安装1.点击选择“next”;如图1-11-12.选择你要安装的路径然后点击“next”;如图1-21-23.然后一直点击“next”即可安装成功。
WinNetCap使用方法点击图标打开WinNetCap界面;如图1-3在右边会显示本机器上的IP地址,虚拟机上的也会显示。
可以根据自己需要选择监控的IP1-3注意:有时候可能弹出如图1-4一样的错误窗口只要将其拉至边上就可以,不要点击“确定”否则会退出工具。
1-4功能按钮使用当点击“文件”下方的开始等一些按钮;如图1-51-5开始:点击“开始”后会显示所抓到的数据包;如图1-61-6暂停:暂停抓包是占时停止显示所抓到的数据,当点击开始时候会将暂停过程中其他数据包都显示出来。
停止:停止抓包则是不在抓取数据。
清除数据:将所有显示的数据包删除。
关于:显示WinNetCap版本信息。
帮助:打开帮助文件。
保存当前记录:保存所选中的数据。
保存所有记录:将所有数据保存。
如图1-7菜单栏使用文件:单击“文件”里面会显示“保存当前记录”、“保存所有记录”、“退出程序”。
功能跟“保存当前记录”、“保存所有记录”按钮一样。
查看:查看可以看到“网络进程”。
与“任务管理器”类似。
抓包:抓包里面包含了“开始”、“暂停”、“停止”、“清楚数据”4个功能。
与功能按钮一样。
设置:可以编辑抓包条件,只有当启用抓包选中时候才可以使用。
关于与帮助和功能按钮一样。
数据查看当前网络流量:显示当前网络的速度。
抓包计时:记录总共抓包时间。
过滤数据包:在“设置”里面可以设置部分数据不显示,这些不显示的数据总数会在这里显示。
当前抓取:当要查看某一条数据大小时候,鼠标单击所要查看的数据,在这里就会显示此条数据的大小。
总共抓取:显示所抓取的所有数据包的总共大小。
因为项目需要,而且以前从没用过Winpcap,所以不得不从头学起。
以前虽然看过winsocket,但是,Winpcap的第一个程序,我花了很长时间才编译通过。
对于初学者来说,不太好做的可能是编译程序之前应该做什么事。
我就大体说一下我的过程。
首先先大体介绍下Winpcap。
winpcap(windows packet capture)windows平台下一个免费,公共的网络访问系统。
开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
它提供了以下的各项功能:1> 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;2> 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;3> 在网络上发送原始的数据包;4> 收集网络通信过程中的统计信息。
具体介绍参见/view/696423.htm这里有Winpcap的详细介绍。
下面说一下你在编译Winpcap之前要做的事情。
1 下载Winpcap安装包,地址/install/default.htm。
2 然后到/devel.htm下载WinPcap developer's pack包,解压,里面有配置好的例子和include library。
3 在VC6.0菜单中,点Tolls->Options->Directories中的include files 和library files中添加包里面的include和library。
然后我们就来编写一个最简单的Winpcap程序——获取已连接的网络适配器列表。
首先新建一个工程,选择Win32 Console Application,工程名我们设为winpcap.然后这这个工程中新建一个C++源文件,名字winpcap。
在里面填写如下代码:#include <pcap.h>main( )pcap_if_t *alldevs;pcap_if_t *d;int i=0;char errbuf[PCAP_ERRBUF_SIZE];if (pcap_findalldevs(&alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); exit(1);}for(d= alldevs; d != NULL; d= d->next){printf("%d. %s", ++i, d->name);if (d->description)printf(" (%s)\n", d->description);elseprintf(" (No description available)\n");}if (i == 0){printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return -1;}pcap_freealldevs(alldevs);return 0;}运行之前我们要手动给它添加一个动态链接库wpcap.lib,方法是在菜单Project中点Settings,然后在选项中选Link,在library modules 后面填上wpcap.lib,注意和前面的要有空格隔开。
【网络程序设计】winpcap网络开发库入门Phinecos(洞庭散人)
专注于开源技术的研究与应用 Winpcap网络开发库入门
Winpcap是一个强大的网络开发库,可以实现许多功能:获取可用的网络适配器;获取指定适配器信息(比如名称和描述信息);捕获指定网卡的数据封包;发送数据封包;过滤捕获的包以获取特定包等。
首先到下载安装winpcap 驱动和DLL组件。
然后到下载winpcap开发包,解压到指定目录,
这里我解压到C:\WpdPack_4_0_2\WpdPack,可以看到里面包含了:Lib,Include ,文档和
示例程序。
首先创建一个C++控制台程序,设置如下:
1) 在“Configuration Properties -> C/C++ ->
General”中,在Additional Include
Directories加入Include路径(“C:\WpdPack_4_0_2\WpdPack\Include”)。
2) 在 “Configuration Properties -> Linker -> General”
中,在Additional Library
Directories中加入 winpcap 库文件路
径 ( “C:\WpdPack_4_0_2\WpdPack\Lib” ) 。
WinPcap 教程: 循序渐进教您使用WinPcap本节将向您展示如何使用WinPcap API的一些特性。
这部分教程细化成若干节课,以循序渐进的方式介绍给读者,让读者从最基本的部分(获得设备列表)到最复杂的部分(控制发送队列并收集和统计网络流量)来了解如何使用WinPcap进行程序开发。
有时,我们会给出一些简单使用的代码片断,但同时,我们提供完整程序的链接:所有的源代码包含一些指向手册其他地方的链接,这可以让您很方便地通过点击鼠标来跳转到您想查看的函数和数据结构的内容中去。
范例程序都是用纯C语言编写, 所以,掌握基本的C语言编程知识是必须的,而且,这是一部关于处理原始网络数据包的教程,因为,我们希望读者拥有良好的网络及网络协议的知识。
用Microsoft Visual C++ 创建一个使用wpcap.dll 的应用程序,需要按一下步骤:∙在每一个使用了库的源程序中,将pcap.h 头文件包含(include)进来。
∙如果你在程序中使用了WinPcap中提供给Win32平台的特有的函数,记得在预处理中加入WPCAP 的定义。
(工程->设置->c/c++->预处理程序定义中添加WPCAP)∙如果你的程序使用了WinPcap的远程捕获功能,那么在预处理定义中加入HAVE_REMOTE。
不要直接把remote-ext.h直接加入到你的源文件中去。
(工程->设置->c/c++->预处理程序定义中添加HAVE_REMOTE)∙设置VC++的链接器(Linker),把wpcap.lib库文件包含进来。
wpcap.lib可以在WinPcap 中找到。
∙设置VC++的链接器(Linker),把ws2_32.lib库文件包含进来。
这个文件分布于C的编译器,并且包含了Windows的一些socket函数。
本教程中的一些范例程序,会需要它。
获取设备列表通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。
windows写程序抓数据链路层报文以Windows写程序抓取数据链路层报文数据链路层报文是在计算机网络中传输的一种数据格式,它承载了网络层数据并通过物理链路进行传输。
在Windows操作系统中,我们可以编写程序来抓取数据链路层报文,以便进行网络分析和故障排查。
本文将介绍如何使用Windows平台上的工具和编程语言来实现这一目标。
一、使用Wireshark进行数据链路层报文抓取Wireshark是一个开源的网络协议分析工具,它可以在Windows 平台上运行,并能够捕获和分析网络数据包。
以下是使用Wireshark进行数据链路层报文抓取的步骤:1. 下载并安装Wireshark软件;2. 打开Wireshark,并选择要抓取数据链路层报文的网络接口;3. 设置过滤器,以便只捕获数据链路层报文;4. 开始抓取数据链路层报文;5. 停止抓取,并分析捕获到的数据链路层报文。
二、使用WinPcap库进行数据链路层报文抓取WinPcap是Windows平台上的一个网络数据包捕获库,它提供了一组API接口,可以用于编写程序来抓取数据链路层报文。
以下是使用WinPcap进行数据链路层报文抓取的步骤:1. 下载并安装WinPcap库;2. 创建一个新的WinPcap项目;3. 初始化WinPcap库,并打开要抓取数据链路层报文的网络接口;4. 设置过滤器,以便只捕获数据链路层报文;5. 开始抓取数据链路层报文;6. 停止抓取,并分析捕获到的数据链路层报文。
三、使用C#编程语言进行数据链路层报文抓取在Windows平台上,我们可以使用C#编程语言来编写程序来抓取数据链路层报文。
以下是使用C#编程语言进行数据链路层报文抓取的步骤:1. 创建一个新的C#控制台应用程序项目;2. 导入相关的命名空间,如workInformation;3. 获取系统上的所有网络接口;4. 选择要抓取数据链路层报文的网络接口;5. 设置过滤器,以便只捕获数据链路层报文;6. 创建一个新的网络监听器,并注册数据接收事件;7. 开始监听网络接口,并捕获数据链路层报文;8. 停止监听,并分析捕获到的数据链路层报文。
Winpcap功能强大,效率高,使用方便,但是,使用前的准备工作要费一番功夫,步骤如下:步骤1:安装驱动程序。
下载WinPcap Driver和DLL并安装,安装后重启机器。
步骤2:下载wpdpack(Developer’s pack)。
解压后会看到其中包含了docs、Include、lib、Examples等文件夹。
步骤3:在VC中设定Include目录及Library目录。
具体做法:打开VC后,Tools->Option->Directories,在include files中添加……\wpdpack\Include 目录(步骤2中得到的);在Library files中添加……\wpdpack\Lib目录。
步骤4:Project->settings->Link,在Object/library modules中加上wpcap.lib。
然后测试下:#include "pcap.h"void main(){pcap_if_t *alldevs;pcap_if_t *d;int i=0;char errbuf[PCAP_ERRBUF_SIZE];/* 这个API用来获得网卡的列表 */if (pcap_findalldevs(&alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1);}/* 显示列表的响应字段的内容 */for(d=alldevs;d;d=d->next){printf("%d. %s", ++i, d->name);if (d->description)printf("\n\t\tDescription: (%s)\n", d->description);else printf(" (No description available)\n");}if(i==0){printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return;}/* We don't need any more the device list. Free it */pcap_freealldevs(alldevs);}以上是在vc6里面的测试winpcap 驱动简介winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。
WinpCap的详解(一)首先来百科一下Winpcap是一个什么东东。
Winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。
它有如下几个功能:1、捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据;2、在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;3、在网络上发送原始的数据包;4、收集网络通信过程中的统计信息。
从上面的功能来看,这个库文件提供了许多的API函数,可以让我们捕获网络上的数据包以及统计网络通信的信息。
为了更直观的反应这个库文件的作用,我们来看看利用这个库文件写出来的一个应用软件,wireshark。
界面如下图所示,这个界面只是捕获数据的一个小界面,里面有很多的设置,有兴趣可以下载一个试试。
他能统计在一个局域网的所有网络信息。
这里面重要一点,需要提醒的是:winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据包。
也就是说,winpcap不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。
也就是说,WinpCap主要功能不能截取网络中的数据,他只能监听里面的数据。
对于WinpCap的结构以及原理,我们自然可以不用理会啦,我们只需要知道他的用途就行啦!一、安装WinpCap1、首先我们来看看如何安装WinpCap这个库,首先是下载WinpCap安装文件,这里有许多的版本,可以在官网上下载,,这里重点提醒一下,特别需要注意一下版本,如果你的版本是4.02,那么你的安装包也必须下载对应的版本,这里特别注意下,你可以下载当前比较稳定的版本。
下载之后安装就ok啦!这里我用的是WinpCap4.02.2、下载WinpCap Develop's Packs,这里我也提供相同的版本WpdPack4.02.3、解压后会得一个目录WpdPack四个子目录:docsExamples-pcapExamples-remoteIncludeLib然后配置VC++tools --> options --> Projects and Solutions --> VC++ Directories :Include files :WpdPackPath\includeLibrary files:WpdPackPath\lib4、经过上面的步骤之后,你的WinpCap应该就安装成功啦,之后就是运行一下里面提供的例程啦,如果有什么问题,就对应的把问题在网上查一查,总体来说有以下几个问题:第一个就是需要在工程的链接库上添加wpcap.lib链接库;第二个就是你的SDK太老了,需要添加更新你的SDK,相应的到官方网站上下载适合你电脑的SDK。
实验6 利用WinPcap技术捕获数据包实验目的:通过掌握WinPcap函数库的结构和功能,实现在windows环境下对网卡进行编程,进行网络数据包的捕获。
实验准备:(1)winpcap简介WinPcap 是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows 操作平台上来实现对底层包的截取过滤。
WinPcap 为用户级的数据包提供了Windows 下的一个平台。
WinPcap 是 BPF 模型和 Libpcap 函数库在Windows 平台下网络数据包捕获和网络状态分析的一种体系结构,这个体系结构是由一个核心的包过滤驱动程序,一个底层的动态连接库 Packet.dll 和一个高层的独立于系统的函数库 Libpcap 组成。
底层的包捕获驱动程序实际为一个协议网络驱动程序,通过对 NDIS 中函数的调用为 Win95、Win98、WinNT、和 Win2000 提供一类似于 UNIX 系统下 Berkeley Packet Filter 的捕获和发送原始数据包的能力。
Packet.dll 是对这个 BPF 驱动程序进行访问的 API 接口,同时它有一套符合 Libpcap 接口(UNIX 下的捕获函数库)的函数库。
WinPcap的结构图如图1。
WinPcap 包括三个部分:第一个模块NPF(Netgroup Packet Filter),是一个虚拟设备驱动程序文件。
它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作系统特有的代码。
第二个模块packet.dll为win32平台提供了一个公共的接口。
不同版本的Windows系统都有自己的内核模块和用户层模块。
Packet.dll用于解决这些不同。
调用Packet.dll的程序可以运行在不同版本的Windows平台上,而无需重新编译。
第三个模块 Wpcap.dll是不依赖于操作系统的。
它提供了更加高层、抽象的函数。
循序渐进学习使用WINPCAP(八)尽管WinPcap从名字上来看表明它的主要目的是捕获数据包,但是它还为原始网络提供了一些其它的功能,其中之一就是用户可以发送数据包,这也就是本节的主要内容。
需要指出的是原来的libpcap并不提供数据包的发送功能,这里所说的功能都是WinPcap的扩展功能,所以并不能够工作在UNIX下。
用pcap_sendpacket来发送一个数据包下面的代码是一个最简单的发送数据的方法。
打开一个适配器后就可以用pcap_sendpacket()来手工发送一个数据包了。
这个函数需要的参数:一个装有要发送数据的缓冲区,要发送的长度,和一个适配器。
注意缓冲区中的数据将不被内核协议处理,只是作为最原始的数据流被发送,所以我门必须填充好正确的协议头以便正确的将数据发送。
#include "pcap.h"int main(int argc, char **argv){pcap_t *fp;char error[PCAP_ERRBUF_SIZE];u_char packet[100];int i=0,inum;pcap_if_t *alldevs,*d;/* 获得网卡的列表*/if (pcap_findalldevs(&alldevs, error) == -1){ fprintf(stderr,"Error in pcap_findalldevs: %s\n", error);exit(1);}/* 打印网卡信息*/for(d=alldevs; d; d=d->next){ printf("%d. %s", ++i, d->name);if (d->description) printf(" (%s)\n", d->description);else printf(" (No description available)\n");}if(i==0){ printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return -1;}printf("Enter the interface number (1-%d):",i);scanf("%d", &inum);//输入要选择打开的网卡号if(inum < 1 || inum > i) //判断号的合法性{ printf("\nInterface number out of range.\n");pcap_freealldevs(alldevs); /* Free the device list */return -1;}/* 找到要选择的网卡结构*/for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);/* 打开选择的网卡*/if((fp = pcap_open_live(d->name, 100, 1, 1000, error) ) == NULL){fprintf(stderr,"\nError opening adapter: %s\n", error);return -1;}/* 假设网络环境为ethernet,我门把目的MAC设为1:1:1:1:1:1*/packet[0]=1; packet[1]=1; packet[2]=1;packet[3]=1; packet[4]=1; packet[5]=1;/* 假设源MAC为2:2:2:2:2:2 */packet[6]=2; packet[7]=2; packet[8]=2;packet[9]=2; packet[10]=2; packet[11]=2;/* 填充发送包的剩余部分*/for(i=12;i<100;i++){ packet[i]=i%256;}/* 发送包*/pcap_sendpacket(fp,packet, 100);return 0;}发送队列:pcap_sendpacket()只是提供一个简单的直接的发送数据的方法,而发送队列提供一个高级的强大的和最优的机制来发送一组数据包,队列实际上是一个装有要发送数据的一个容器,它有一个最大值来表明它所能够容纳的最大比特数。