WinPcap_中文技术文档

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

WinPcap中文技术文档4.0.1作者:TheWinPcapTeam作者主页:模块WinPcap用户指南o定义o输出函数o过滤串表达式的语法o使用WinPcap编程oWinPcap教程:循序渐进教您使用WinPcap获取设备列表获取已安装设备的高级信息打开适配器并捕获数据包不用回调方法捕获数据包过滤数据包分析数据包处理脱机堆文件发送数据包收集并统计网络流量WinPcap核心资料oNPF驱动核心指南NPF结构与定义NPF函数oPacket.dll--数据包驱动APIo如何编译WinPcap远程捕获o输出结构与定义o外部函数.对于提供远程捕获的函数引用,请参阅WinPcap输出函数章节的Windows-specificExtensions.o核心数据结构与定义介绍本手册提供了WinPcap编程接口的描述及其源代码。它与详尽的WinPcap核心资料一起,为编程人员提供了详细的函数与结构的描述,同时也提供了若干教程和程序范例。您可以点击页面顶部的导航链接,或者使用页面左边的树形控件,来跳转到您感兴趣的内容。本文档使用theDoxygendocumentationsystem创建,您可以登录阅览相关内容。什么是WinPcapWinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库.大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets。这是一种简单的实现方式,因为操作系统已经妥善处理了底层具体实现细节(比如协议处理,封装数据包等等),并且提供了一个与读写文件类似的,令人熟悉的接口。然而,有些时候,这种“简单的方式”并不能满足任务的需求,因为有些应用程序需要直接访问网络中的数据包。也就是说,那些应用程序需要访问原始数据包,即没有被操作系统利用网络协议处理过的数据包。WinPcap产生的目的,就是为Win32应用程序提供这种访问方式;WinPcap提供了以下功能捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的在数据包发送给某应用程序前,根据用户指定的规则过滤数据包将原始数据包通过网络发送出去收集并统计网络流量信息以上这些功能需要借助安装在Win32内核中的网络设备驱动程序才能实现,再加上几个动态链接库DLL。所有这些功能都能通过一个强大的编程接口来表现出来,易于开发,并能在不同的操作系统上使用。这本手册的主要目标是在一些程序范例的帮助下,叙述这些编程接口的使用。如果您现在就想开始摸索这些功能,您可以直接进入WinPcap用户手册.哪些程序在使用WinPcapWinPcap可以被用来制作许多类型的网络工具,比如具有分析,解决纷争,安全和监视功能的工具。特别地,一些基于WinPcap的典型应用有:网络与协议分析器(networkandprotocolanalyzers)网络监视器(networkmonitors)网络流量记录器(trafficloggers)网络流量发生器(trafficgenerators)用户级网桥及路由(user-levelbridgesandrouters)网络入侵检测系统(networkintrusiondetectionsystems(NIDS))网络扫描器(networkscanners)安全工具(securitytools)什么是WinPcap做不到的WinPcap能独立地通过主机协议发送和接受数据,如同TCP-IP。这就意味着WinPcap不能阻止、过滤或操纵同一机器上的其他应用程序的通讯:它仅仅能简单地监视在网络上传输的数据包。所以,它不能提供类似网络流量控制、服务质量调度和个人防火墙之类的支持。本手册的目标本手册的目的是提供一个全面而简单的方法来让您浏览WinPcap的设计文档。你会找到两个主要部分:WinPcap用户指南和WinPcap核心资料.第一部分内容主要适合那些需要利用WinPcap开发应用程序的编程人员:它包含了WinPcapAPI的所有函数和数据结构的信息,说明部分解释了如何编写一个数据包过滤器,而另一个页面则解释了如何将它包含到应用程序中。一个教程也提供了若干个程序范例,您可以使用它来循序渐进地学习WinPcapAPI的基本使用方法,不过有时候,它也会提供一些高级应用的代码片断。第二部分内容主要为WinPcap的开发、维护人员,以及那些希望了解系统工作原理的人士而准备。它描述了WinPcap的主要设计方法,并解释了它是如何工作的。另外,它阐述了完整的设备驱动的数据结构及源代码,packet.dll的接口以及底层的WinPcap的API。如果您想了解WinPcap内部发生了什么,或者您想去扩展它,那么请您阅读此部分内容。附加文档最新最及时的文档,请访问特别地,如果您对WinPcap的系统结构和核心内容感兴趣,我们建议您阅读下列内容FulvioRisso,LorisDegioanni,AnArchitectureforHighPerformanceNetworkAnalysis,Proceedingsofthe6thIEEESymposiumonComputersandCommunications(ISCC2001),Hammamet,Tunisia,July2001LorisDegioanni,MarioBaldi,FulvioRissoandGianlucaVarenni,ProfilingandOptimizationofSoftware-BasedNetwork-AnalysisApplications,Proceedingsofthe15thIEEESymposiumonComputerArchitectureandHighPerformanceComputing(SBAC-PAD2003),SaoPaulo,Brasil,November2003LorisDegioanni,DevelopmentofanArchitectureforPacketCaptureandNetworkTrafficAnalysis,GraduationThesis,PolitecnicoDiTorino(Turin,Italy,Mar.2000)术语为了文献的一致性,我们会使用术语数据包(packet),尽管用术语帧(frame)会更加准确,因为捕获过程是在数据链路层完成的,并且数据链路首部也包含在被捕获的数据中。本文档中使用的术语Win9x表示与Windows95同一体系的微软操作系统,如Windows98和WindowsME。术语WinNTx表示基于NT内核的操作系统,从WindowsNT4开始,包含了Windows2000,WindowsXP,WindowsServer2003等附注我们主要会致力于开发基于WindowsNT/2000/XP/2003版本的WinPcap及其相关文档。这一选择是基于这样一个事实,大多数WinPcap用户都工作在NTx系统上,而且9x技术已经被微软放弃。此外,我们假定,使用PC机来完成类似网络分析这样高级任务的用户,都会安装高级的操作系统。鉴于这个原因,本文档将参考WinNTx的驱动和API。Win9x版本在概念上很类似,不过有时在执行上有些不同。在有些场合,Win9x版本的API缺少一些高级功能。这本手册会给出一个完整的API描述,并会指出那些只有WinNTx才得到支持的函数。LastModified:Sunday,July23,2007WinPcap教程:循序渐进教您使用WinPcap本节将向您展示如何使用WinPcapAPI的一些特性。这部分教程细化成若干节课,以循序渐进的方式介绍给读者,让读者从最基本的部分(获得设备列表)到最复杂的部分(控制发送队列并收集和统计网络流量)来了解如何使用WinPcap进行程序开发。有时,我们会给出一些简单使用的代码片断,但同时,我们提供完整程序的链接:所有的源代码包含一些指向手册其他地方的链接,这可以让您很方便地通过点击鼠标来跳转到您想查看的函数和数据结构的内容中去。范例程序都是用纯C语言编写,所以,掌握基本的C语言编程知识是必须的,而且,这是一部关于处理原始网络数据包的教程,因为,我们希望读者拥有良好的网络及网络协议的知识。获取设备列表通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。libpcap和WinPcap都提供了pcap_findalldevs_ex()函数来实现这个功能:这个函数返回一个pcap_if结构的链表,每个这样的结构都包含了一个适配器的详细信息。值得注意的是,数据域name和description表示一个适配器名称和一个可以让人们理解的描述。下列代码能获取适配器列表,并在屏幕上显示出来,如果没有找到适配器,将打印错误信息。#includepcap.hmain(){pcap_if_t*alldevs;pcap_if_t*d;inti=0;charerrbuf[PCAP_ERRBUF_SIZE];/*获取本地机器设备列表*/if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL/*authisnotneeded*/,&alldevs,errbuf)==-1){fprintf(stderr,Errorinpcap_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((Nodescriptionavailable)\n);}if(i==0){printf(\nNointerfacesfound!MakesureWinPcapisinstalled.\n);return;}/*不再需要设备列表了,释放它*/pcap_freealldevs(alldevs);}有关这段代码的一些说明首先,pcap_findalldevs_ex(),和其他libpcap函数一样,有一个errbuf参数。一旦发生错误,这个参数将会被libpcap写入字符串类型的错误信息。第二要记住,不是所有的操作系统都支持libpcap提供的网络程序接口,因此,如果我们想编写一个可移植的应用程序,我们就必须考虑在什么情况下,description是null。本程序中,我们遇到这种情况时,会打印提示语句Nodescriptionavailable。最后要记住,当我们完成了设备列表的使用,我们要调用pcap_freealldevs()函数将其占用的内存资源释放。让我们编译并运行我们的第一个示例程序吧!为了能在Unix或Cygwin平台上编译这段程序,需要简单输入:gcc-otestprogtestprog.c-lpcap在Windows平台上,您需要创建一个工程,并按照使用WinPcap编程里的步骤做。然而,我们建议您使用WinPcapdeveloper'spack(详情请访问WinPcap网站,),因为它提供了很多已经配置好的范例,包括本教程中的所有示例代码,以及在编译运行时需要的包含文件(include)和库(libraries)jiash假设我们已经完成了对程序的编译,那让我们来运行它吧。在某台WinXP的电脑上,我们得到的结果是:1.\Device\NPF_{4E273621-5161-46C8-895A-48D0E52A0B83}(RealtekRTL8029(AS)EthernetAdapter)2.\Device\NPF_{5D24AE04-C486-4A96-83FB

1 / 203
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功