欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    WinPcap编程0.pdf

    • 资源ID:70332965       资源大小:169.35KB        全文页数:11页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    WinPcap编程0.pdf

    WinPcapWinPcapWinPcapWinPcap 编程编程WinPcap 是一个开源的、运行于 Win32 平台下的体系结构,它的主要功能是进行数据包捕获和网络分析。它允许应用程序通过协议栈捕获和传输网络数据包,也包括内核级别的数据包过滤、网络静态引擎和支持远程数据包捕获等有用的功能。WinPcap 由两部分组成:1.驱动程序:扩展操作系统功能提供低层次的网络访问2.动态链接库:运行在 Win32 平台上的应用程序可以非常方便地访问网络低层次的数据。Ethereal 是大名鼎鼎的捕获数据包专业软件,它的运行是在 WinPcap 的支持之下的,如果没有安装 WinPcap,Ethereal 也无法正常捕获数据包。在正式 WinPcap 编程之前,要配置运行环境。Win32 平台下 WinPcap 应用程序需要以下四个动态链接库才能正常运行:wpcap.dllPacket.dllWanPacket.dllpthreadVC.dll这四个动态链接库在 WinPcap 驱动程序里。如果没有这个驱动程序,需要到 WinPcap 官方网站上下载,下载地址为:www.WinPcap.org如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。被过滤广告也可以不安装 WinPcap 驱动程序。但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32 目录下或者接下来配置编程环境。如果一个源文件使用了 WinPcap 提供的库函数,那么就需要在该文件开始的位置添加 pcap.h包含文件(或者在引用的文件中),即#include“pcap.h”也许会出现下面的错误:fatal error C1083:无法打开包括文件:“pcap.h”:No such file or directory这个错误表明找不到 pcap.h 文件这个头文件在驱动程序安装完成后也是没有的,它是开发包里面的一个头文件所以,如果要运行程序还需要到官方网站上去下载 WinPcap SDKWpdPackWinPcap SDk 里面包含库文件,头文件,文档文件和一些例子。解压缩后把 Include 目录添加到 IDE 的包含文件中(VC6.0 Tools-Option-Directory;VS2003/2005 工具-选项-项目和解决方案/项目-VC+目录)error LNK2019:无法解析的外部符号_pcap_findalldevs_ex,该符号在函数 XXX 中被引用如 果 发 生 上 面 的 错 误 就 表 明 缺 少 库 文 件,需 要 添 加 wpcap.lib 到 工 程 中(VC6.0Project-Settings-Link-Object/library modules;VS 2003/2005 项目-添加现有项-所有文件)error C2065:“PCAP_SRC_IF_STRING”:未声明的标识符error C3861:“pcap_findalldevs_ex”:找不到标识符error C2065:“PCAP_OPENFLAG_PROMISCUOUS”:未声明的标识符error C3861:“pcap_open”:找不到标识符新的版本里 WinPcap 支持远程数据包获取,发生上面的错误很有可能是新的版本导致不兼容的问题,所以还应当添加一个头文件 remote-ext.h,即#include remote-ext.h如果还有问题,可以到 WinPcaP 官方网站上找FAQ。一般情况下应该没有问题了。接下来,开始动手做抓包分析吧。WinpcapWinpcapWinpcapWinpcap 简介简介一Winpcap 简介Winpcap 是 UNIX 下的 libpcap 移植到 windows下的产物,他是一个 free and open source 的项目。Winpcap 工作于驱动(Driver)层,所以能以很高的效率进行网络操作。Winpcap 提供了以下强大的功能:1捕获原始的数据包2设置 filter,只捕获自己敢兴趣的数据包3方便的把捕获的数据包输出到文件和从文件输入4发送原始的数据包5统计网络流量6.(其它还有很多,我不知道了)二Winpcap 的安装使用方法1到 http:/winpcap.polito.it 下载 winpcap 的安装包,程序员开发包。2执行安装包,这样你的机子就能运行 winpcap 程序了3解压开发包,在 VC 的 option 的 include 和 lib 中加入 winpcap 的include 和lib4.在你的程序中加入#include,#include.然后在工程的 setting 中加入预定义宏:WPCAP,HAVE_REMOTE.导入 wpcap.lib 库5就可以编写 wpcap 程序了三Winpcap 的一些基本的功能的实现一)捕获数据包1.枚举所有的可用的设备pcap_findalldevs_ex(可选)2.通过名字打开一个设备pcap_open()在这里可以打开一个文件,只是在打开这个文件之前需要通过 pcap_createsrcstr 创建相应的name string3.设置 Filterpcap_compile,pcap_setfilter(可选)4.捕获数据有几种捕获数据的方法(捕获数据的数据都是最原始的数据包,即包含数据链路层的数据头)a 是以回调的方式 pcap_loop,pcap_dispatch().这两种方法基本相同,底层收集数据包,当满足一定的条件(timeout 或者缓冲区满),就会调用回调函数,把收集到的原始数据包 s,交给用户。他们返回的数据缓冲区包含多个包b.pcap_next_ex()的方式每当一个包到到达以后,pcap_next_ex 就会返回,返回的数据缓冲区里只包涵一个包。二)发送包Winpcap 中有发送单个包和发送多个包的方法。这里只说说发送单个包1 通过名字打开一个设备pcap_open2 自己构造一个原始数据包(这个数据包会不经过任何处理就发送出去,所以必须把包中的各个字段设置好。另外这个数据包是包含数据链路层报头的)3 使用 pcap_sendpacket()发送数据包三)统计网络流量1.通过名字打开一个设备pcap_open通过 read_timeout 来设置统计的时间间隔2.设置 filterpcap_compile,pcap_setfilter(可选)3.设置设备的为统计模式 pcap_setmode(MODE_STAT);4.开始统计,pcap_loop/pcap_dispatch()5在回调函数中的参数中就包含了统计信息,如下图:winpcapwinpcapwinpcapwinpcap 的一些认识的一些认识一Winpcap 简介Winpcap 是 UNIX 下的 libpcap 移植到 windows 下的产物,他是一个 freeandopensource的项目。Winpcap 工作于驱动(Driver)层,所以能以很高的效率进行网络操作。Winpcap 提供了以下强大的功能:1捕获原始的数据包2设置 filter,只捕获自己敢兴趣的数据包3方便的把捕获的数据包输出到文件和从文件输入4发送原始的数据包5统计网络流量6.(其它还有很多,我不知道了)二Winpcap 的安装使用方法1到 http:/winpcap.polito.it 下载 winpcap 的安装包,程序员开发包。2执行安装包,这样你的机子就能运行 winpcap 程序了3解压开发包,在 VC 的 option 的 include 和 lib 中加入 winpcap 的include 和lib4.在你的程序中加入#include,#include.然后在工程的 setting 中加入预定义宏:WPCAP,HAVE_REMOTE.导入 wpcap.lib 库5就可以编写 wpcap 程序了三Winpcap 的一些基本的功能的实现一)捕获数据包1.枚举所有的可用的设备pcap_findalldevs_ex(可选)2.通过名字打开一个设备pcap_open()在这里可以打开一个文件,只是在打开这个文件之前需要通过 pcap_createsrcstr 创建相应的namestring3.设置 Filterpcap_compile,pcap_setfilter(可选)4.捕获数据有几种捕获数据的方法(捕获数据的数据都是最原始的数据包,即包含数据链路层的数据头)a 是以回调的方式pcap_loop,pcap_dispatch().这两种方法基本相同,底层收集数据包,当满足一定的条件(timeout 或者缓冲区满),就会调用回调函数,把收集到的原始数据包 s,交给用户。他们返回的数据缓冲区包含多个包b.pcap_next_ex()的方式每当一个包到到达以后,pcap_next_ex 就会返回,返回的数据缓冲区里只包涵一个包。二)发送包Winpcap 中有发送单个包和发送多个包的方法。这里只说说发送单个包1通过名字打开一个设备pcap_open2自己构造一个原始数据包(这个数据包会不经过任何处理就发送出去,所以必须把包中的各个字段设置好。另外这个数据包是包含数据链路层报头的)3使用 pcap_sendpacket()发送数据包三)统计网络流量1.通过名字打开一个设备pcap_open通过 read_timeout 来设置统计的时间间隔2.设置 filterpcap_compile,pcap_setfilter(可选)3.设置设备的为统计模式pcap_setmode(MODE_STAT);4.开始统计,pcap_loop/pcap_dispatch()5在回调函数中的参数中就包含了统计信息,如下图:四.总结这些东西都是我在学习 winpcap 的过程中的一些经验和总结。由于我学习 winpcap 的时间很匆忙,只是按照 stepbystepguide 来学习的,所以我对于 winpcap 的理解也就只能局限与此,希望能在以后有机会深入学习/下面是一个应用 winpcap 写的一个网络流量统计的例子,/nettraffic.cppefinestheentrypointfortheconsoleapplication./#includestdafx.h#include#include#include#includeusingnamespacestd;/-/-Voiddispatcher_handler(u_char*user_data,conststructpcap_pkthdr*pkthdr,constu_char*pktdata);/-Int main(intargc,char*argv)inti;pcap_if_t*alldevs;pcap_if_t*dev;charerrorbufPCAP_ERRBUF_SIZE;intchoice;pcap_t*stathandle;WSADATAwsadata;structtimevaltimestamp;if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)cerrWSAStartupfailedWSAGetLastError()endl;return(-1);/enumalldeviceif(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errorbuf)=-1)WSACleanup();cerrpcap_findalldevs_exfailed!(errorbufnext)cout+itnameendl;if(i=0)WSACleanup();cerrnodevicefound!endl;return(-2);/letuserchoicewhile(1)coutchoice;if(choice=1&choice=i)break;cerrinputerror,youshallchoiceadevicefromuponlistendl;/movetothechoicedevicefor(i=0,dev=alldevs;inext);if(stathandle=pcap_open(dev-name,100,PCAP_OPENFLAG_PROMISCUOUS,500,NULL,errorbuf)=NULL)cerropendevicefailed!device:nameerrorbufendl;pcap_freealldevs(alldevs);WSACleanup();return(-3);coutisStatname.ts.tv_sec-tstamp.tv_sec)*1000000-tstamp.tv_usec+pkthdr-ts.tv_usec;Pps.QuadPart=(*(LONGLONG*)(pktdata)*1000000)/delay;Bps.QuadPart=(*(LONGLONG*)(pktdata+8)*1000000)/delay;structtm*ltime=localtime(&(pkthdr-ts.tv_sec);strftime(strtime,sizeof(strtime),%H:%M:%S,ltime);printf(%s:,strtime);printf(tPps=%I64utBps=%I64urn,Pps.QuadPart,Bps.QuadPart);tstamp=pkthdr-ts;要将 wpcap.lib 拷贝到(VS 安装目录)VClib 目录下首先要下载一个 WinPcap4.0.1,将其安装至电脑。Microsoft Visual C+创建一个使用 wpcap.dll 的应用程序,需要按一下步骤:在每一个使用了库的源程序中,将 pcap.h 头文件包含(include)进来。如果你在程序中使用了 WinPcap 中提供给 Win32 平台的特有的函数,记得在预处理中加入 WPCAP 的定义。如果你的程序使用了 WinPcap 的远程捕获功能,那么在预处理定义中加入HAVE_REMOTE。不要直接把 remote-ext.h 直接加入到你的源文件中去。设置 VC+的链接器(Linker),把 wpcap.lib 库文件包含进来。wpcap.lib 可以在WinPcap 中找到。设置 VC+的链接器(Linker),把 ws2_32.lib 库文件包含进来。这个文件分布于C 的编译器,并且包含了 Windows 的一些 socket 函数。本教程中的一些范例程序,会需要它。记住以下几点:要添加一个预处理定义,你需要打开 Project 菜单,选择 Settings,然后选择C/C+选项卡,在 General 类下,你必须在 Preprocessor Definitions 下的文本框中添加定义。要在一个 VC+6.0 工程中,添加一,个新的库,你必须打开 Project 菜单,选择Settings,然后选择 Link 选项卡,然后把新库的名字添加到 Object/Librarymodules 下的文本框中要向 VC+6.0 中添加一个新的库所在的路径,你必须打开 Tool 菜单,选择Options,然后选择 Directories 选项卡,在 Show directories 下拉框中选择Library files,并且将新的路径添加到 Directories 中去要向 VC+6.0 中添加一个新的包含文件所在的路径,你必须打开 Tool 菜单,选择 Options,然后选择 Directories 选项卡,在 Show directories 下拉框中选择 Include files,并且将新的路径添加到 Directories 中去。WINPCAPWINPCAPWINPCAPWINPCAP 编程环境设置编程环境设置一、WINPCAP 编程环境设置在正式 WinPcap 编程之前,要配置运行环境。1、运行环境设置Win32 平台下 WinPcap 应用程序需要以下四个动态链接库才能正常运行:wpcap.dllPacket.dll WanPacket.dll pthreadVC.dll这四个动态链接库在 WinPcap 驱动程序里。如果没有这个驱动程序,需要到 WinPcap 官方网站上下载,下载地址为:www.WinPcap.org如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。也可以不安装 WinPcap 驱动程序。但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32 目录下。(似乎有些问题)2、配置编程环境。1 从 WWW.WINPCAP.ORG 上下载 WINPCAP SDK-WpdPack,WinPcap SDk 里面包含库文件,头文件,文档文件和一些例子。解压到一个指定的目录。解压缩后把 Include 目录添加到 IDE 的包含文件中(VC6.0 Tools-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 添加到项目中。3 在程序中添加 wpcap.lib。如果出现下面错误error LNK2019:无法解析的外部符号_pcap_findalldevs_ex,该符号在函数 XXX 中被引用,如 果 发 生 上 面 的 错 误 就 表 明 缺 少 库 文 件,需 要 添 加 wpcap.lib 到 工 程 中(VC6.0Project-Settings-Link-Object/library modules;VS 2003/2005 项目-添加现有项-所有文件)如下图所示:4 新的版本里 WinPcap 支持远程数据包获取,所以还应当添加一个头文件 remote-ext.h,即#include remote-ext.h(记住这条语句要放在#include“pcap.h”之后,否则会出错!)否则会发生下面的错误error C2065:“PCAP_SRC_IF_STRING”:未声明的标识符error C3861:“pcap_findalldevs_ex”:找不到标识符error C2065:“PCAP_OPENFLAG_PROMISCUOUS”:未声明的标识符error C3861:“pcap_open”:找不到标识符5 或者不用添加#include remote-ext.h.在 VC.NET 提供的 IDE 环境中,可以通过执行“项目”菜单中的的“属性”进入该项目的属性配置页,通过选择“配置属性”树中的“C/C+预处理哭”选项就增加WPCAP和HAVE_REMOTE两个标号。如下图所示:6 如果还有问题,可以到 WinPcaP 官方网站上找FAQ。二、WINPCAP 编程入门利用 WINPCAP 捕获数据包一般要经过以下几个步骤1、获取网络接口列表通常,一个基于 WinPcap 的应用程序所要做的第一件事,就是获得适合的网络接口的列表.pcap_findalldevs()(或者 pcap_findalldevs_ex()函数就是干这活的:这个函数返回一个pcap_if 结构的列表,每个元素都记录了一个接口的信息.其中,name和 description 以人类可以阅读的形式,记录了设备的信息.2、获取设备的高级信息WinPcap 也可以为我们提供关于接口的更多信息.由 pcap_findalldevs()函数返回的pcap_if 结构也包含了一个 pcap_addr 结构的列表,它记录了以下信息:1.接口的地址列表2.接口的掩码列表(与地址列表一一对应)3.接口的广播地址列表(与地址列表一一对应)4.目标地址列表(与地址列表一一对应)3、打开一个接口并捕捉流量现在我们已经知道如何获取一个接口的有关信息了,我们可以来点真家伙了-打开一个接口并捕捉流量.接下来我们会编译一个程序,它将捕捉网络中所有的数据包并输出他们的一些相关信息。我们使用函数 pcap_open_live()来打开一个捕捉设备.这里,我们需要解释一下 snaplen,promisc 和 to_ms 参数.函数原型:pcap_t*pcap_open_live(char*device,intsnaplen,intpromisc,intto_ms,char*ebuf)snaplen 参数指定了要捕捉的数据包的部分.在某些操作系统中(如 xBSD 和 Win32),驱动程序提供了只捕捉每个数据包其中一部分的可能性:这样就降低了要处理的数据的量,从而提高了捕捉程序的效率.在例子中,我们使用一个高出 MTU 最大值的值(65536)以确保可以捕捉到成个数据包.promisc=1 表明接口将会被设置为混杂模式.一般情况下,接口只处理目标地址为自己的数据;到其他主机的数据包将会被忽略.然而当一个接口处于混杂模式时,它将会处理全部的流量:也就是说,在共享媒介,例如非交换型以太网(比如基于集线器的网络)中,WinPcap 可以捕捉到所有主机的数据包.混在模式是多数捕捉程序的默认模式,所以我们在例子中也采用这种模式.to_ms 用以设置 超时,单位是毫 秒.一个从接 口读取(Y-捕捉)的操作,(例如pcap_dispatch()或者 pcap_next_ex(),如果没有捕捉到数据包,那么在超过指定的时间以后就会返回.进一步说,如果接口处在静态模式中,to_ms 也定义了静态报告的间隔时间(参阅 Gathering Statistics on the network traffic以获取更多信息).设置 to_ms 为 0,则说明永远不会超时,如果没有数据包到达,那么捕捉操作将会永远不会返回,而将其值设置为-1 则会立刻返回.本文来自CSDN博客,转载请标明出处:http:/

    注意事项

    本文(WinPcap编程0.pdf)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开