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

    2022年WinPcap的体系架构 .pdf

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

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

    2022年WinPcap的体系架构 .pdf

    深度剖析 WinPcap之(四)WinPcap的体系架构(1)WinPcap 是 Win32 平台下用于数据包捕获与网络分析的一个架构。它包含一个内核层数据包过滤器,一个底层动态链接库(packet.dll),与一个高层并独立于系统的库(wpcap.dll)。1.1 WinPcap 的主要组成WinPcap 的各个主要组成部分如图2-1 所示。图 2-1 WinPcap的主要组成首先,为了访问网络上传输的原始数据,一个捕获系统需要绕过操作系统的协议栈。这需要一部分程序运行于操作系统的内核中,来与网络接口驱动直接交互。该部分与操作系统密切相关,WinPcap的解决方案是实现一个叫做Netgroup Packet Filter(NPF)的设备驱动程序,并对Windows 95、Windows 98、Windows ME、Windows NT 4、Windows 2000 与 Windows XP等不同操作系统提供不同版本的驱动程序。这些驱动程序提供了数据包捕获与发送的基本特性,同时也提供诸如一个可编程的过滤系统与一个监控引擎之类的更高级特性。第一个特性可用于限制一个捕获会话,只捕获特定的网络数据包(比如,可以只捕获一个特定主机生成的 ftp数据包)。第二个特性提供了一个强大但简单的方式,来获取网络流量的统计信息(比如,可以获取网络负载或两个主机间所交换数据的数量)。其次,捕获系统必须导出一个接口,使得用户层应用程序可使用内核驱动所提供的特性。WinPcap 提供两个不同的库:packet.dll与 wpcap.dll。第一个库提供一个底层的API,可用来直接访问驱动程序的函数,提供一个独立于微软的不同操作系统的编程接口。第二个库名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 8 页 -导出了更强大的、更高层的捕获函数接口,并提供与UNIX 捕获库 libpcap的兼容性。这些函数使得数据包的捕获能独立于底层网络硬件与操作系统。1.2 数据包捕获的基本过程WinPcap 从网络上捕获一个数据包,然后递送给应用程序,所调用的组件如图2-2,图 2-3所示。图 2-2 NPF 结构1.2.1 网卡与 NIC 设备驱动现代 NIC 板载内存的数量通常限制为几千字节。在不依赖主机工作站的能力下,这些内存在全连接速度(full link speed)下需要满足数据包的接收与发送。此外,NIC 在数据包被存储在板载内存中时,就执行一些初步的的检查,诸如 CRC错误、短以太网帧,因此无效帧可以立即被丢弃。在一个有效数据包被NIC 接收后,将对总线控制器产生一个总线数据传输请求。此时,NIC控制了总线,传输数据包到工作站主内存中的NIC 缓冲区中(参见图2-3),释放总线,产生一个硬件中断给高级可编程中断控制器(Advanced Programmable Interrupt Controller,APIC)芯片。该芯片叫醒操作系统的中断处理例程(OS interrupt handling routine),其触发 NIC 设备驱动程序的中断服务程序(ISR)。一个写的好的设备驱动程序的ISR 只做很少的事情。最基本的事情,它要检查该中断是否是它自己要处理的的(在x86 机器中一个中断可被多个设备共享),并做出应答。接着,ISR名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 8 页 -调度一个较低优先级的函数(称作延迟过程调用,DPC),该函数稍后处理硬件请求与告知上层驱动程序(如协议层的驱动程序,数据包捕获驱动程序)一个数据包被接收了。当没有中断被挂起时CPU将处理 DPC例程。当 NIC 设备驱动程序正在执行处理时,来自 NIC 的中断被禁用,因为在处理下一个服务前一个数据包的处理必须完成。此外,既然中断的产生是一个耗费很大的操作,现代 NIC 允许多个数据包被送入一个中断的上下文中,因此上层驱动程序每次激活是要能够处理多个数据包的。图 2-3 从 NIC 到应用程序的路径1.2.2 数据包捕获驱动数据包捕获组件通常对其它的软件模块(如协议栈)是透明的,并不对标准的系统行为带来影响。它们仅仅在系统中插入一个钩子通常使用一个回调函数tap()只要一个新的数据包从网络上到来,它们就能够被告知。tap()函数所作的第一步就是对数据包执行过滤。在 Win32 平台下数据包捕获组件通常作为一个网络协议驱动程序被实现。1.2.3 用户层的接口支持必须导出一个接口,使得用户层应用程序可使用数据包捕获组件所提供的功能,一般通过给用户提供易于使用的库来实现。WinPcap 提供 packet.dll与 wpcap.dll两个库,这些库使得应用程序对数据包捕获功能的使用能独立于底层网络硬件与操作系统。1.3 WinPcap 驱动内部说明WinPcap 的结构如图2-4 所示,NPF是 WinPcap的组件,用来处理网络上传输的数据包,并对用户层导出数据包捕获、发送与分析的能力。下面将描述NPF与操作系统与其基础结构体的交互。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 8 页 -图 2-4 NPF 的结构1.3.1 NPF与 NDIS 网络驱动程序接口规范(NDIS)标准,定义了网络适配器(或者,更好的说法是管理网络适配器的驱动程序)与协议驱动程序(如TCP/IP 就为一个实现实例)之间的通信。NDIS的主要目的是扮演一个包装层,允许协议驱动程序不依赖特定适配器或特定Win32 操作系统来发送和接收网络(LAN或 WAN)上的数据包。NDIS支持三种类型的网络驱动程序:1)网络接口卡或NIC 驱动程序NIC 驱动直接管理网络接口卡(network interface cards,NIC)。NIC 驱动程序在其下面直接与硬件打交道,在其上面提供一个接口,允许高层(驱动)在网络上发送数据包,处理中断,复位网卡,停止 NIC,请求与设置驱动的操作特性。NIC驱动即可为微端口(miniports),也可为遗留的全NIC 驱动。微端口驱动程序微端口驱动程序仅实现特定的硬件操作来管理NIC,包括发送与接收NIC 上的数据。对所有底层 NIC 驱动程序通用的操作,诸如同步管理,是由 DICS提供的。微端口不直接调用操作系统的例行程序;它们与操作系统的接口是NDIS.微端口不保持绑定的跟踪。它仅把数据包向上传递给NIDIS,并由 NDIS确定这些数据包传递给合适的协议。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 8 页 -全 NIC 驱动程序全 NIC 驱动程序被编制为即执行特定硬件操作,也执行所有同步与排队这些通常由NDIS完成的操作。全NIC 驱动程序,例如,需要维护它们自己的绑定信息以标识所接收的数据。2)中间层驱动程序中间层驱动程序是一个上层驱动程序(诸如协议驱动程序)与微端口驱动程序之间的接口。对上层驱动程序而言,一个中间层驱动程序看起来像一个微端口驱动程序。对一个微端口驱动程序而言,一个中间层驱动程序看起来像一个协议驱动程序。一个中间层协议驱动程序可以位于另一个中间层驱动程序的顶部,尽管这样的分层对系统性能有负面影响。开发中间层驱动程序的典型原因,是在一个已有的遗留协议驱动程序与一个微端口驱动程序之间介质转换任务,而该微端口驱动程把NIC 作为一种对协议驱动程序而言是未知的新介质类型来管理。例如,一个中间层驱动程序能够从LAN协议转换到ATM协议。一个中间层驱动程序不能与用户层的应用程序通信,只能与其它NDIS驱动程序进行通信。3)传输层驱动程序或协议驱动程序.一个协议驱动程序实现一个网络协议栈,诸如 IPX/SPX 或 TCP/IP,它在一个或多个网络接口卡上提供服务。一个协议驱动程序对其上面应用程序层的客户提供服务,同时与一个或多个 NIC 驱动程序或其下面的中间层NDIS驱动程序连接。NPF作为一个协议驱动程序实现。从性能的角度这可能并不是最好的选择,但是其允许与MAC层具有合理的独立,同时也能完全访问原始流量。NPF在 NDIS栈中的位置如图2-5 所示。图 2-5 NDIS 中的 NPF名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 8 页 -正常情况下与操作系统的交互为异步。这意味着驱动提供了一个回调函数集,在一些操作需要 NPF处理时被系统调用。NPF为应用程序的所有I/O 操作:open、close、read、write、ioctl等导出对应的回调函数。同样与 NDIS的交互也是异步的。如一个新数据包到来的事件就通过一个回调函数(此时为Packet_tap())通知 NPF。此外,NDIS与 NIC 驱动程序的交互总是依靠非阻塞函数发生:当NPF调用一个NDIS 函数,该调用立即返回;当处理结束后,NDIS 调用一个特定的NPF回调函数(也叫完成函数)来通告该函数已经完成。驱动程序为任何底层的操作,如发送数据包,对 NIC 设置或请求参数等,导出一个回调函数。1.3.2 NPF的主要功能NPF能够执行许多操作:捕获、监视、转储到磁盘、数据包发送。下面将简短的描述这些操作。1.3.2.1 数据包捕获NPF最重要的操作是数据包的捕获。在一个捕获过程中,驱动程序利用一个网络接口嗅探数据包,并把它们完整无缺的递送给用户层应用程序。捕获过程依赖两个主要组件:1)数据包过滤器一个数据包过滤器决定一个到来的数据包是否需要被接收与复制到一个应用程序。大多数使用 NPF的应用程序拒收比它所接收多得多的数据包,因此对于普遍较好的性能,一个通用与有效率的数据包过滤器是关键。一个数据包过滤器是一个布尔值输出的函数,对一个数据包而言函数的值为true,捕获驱动器将复制数据包到应用程序,如果是false数据包将被丢弃。NPF数据包过滤器有一点复杂,因为它决定的不仅仅只是数据包是否应该保留,同时也包括应该保留的字节数。NPF驱动器所采用过滤系统来自于BSD数据包过滤器(BPF),一个虚拟处理器能够执行过滤程序,该程序采用伪汇编程序表达并在用户层创建。应用程序采用一个用户定义的过滤器(例如,获得所有的UDP数据包),利用wpcap.dll,并编译它们到一个BPF程序(例如,如果数据包是IP,同时协议类型字段值为17,那么返回true)。接着,应用程序使用BIOCSETF的 IOCTL 把过滤器传给内核。到此为止,该程序对进来的所有数据包执行过滤,并只接受遵循过滤条件的数据包。不像传统的解决方案,NPF不解释过滤器,但是它执行它们。为了性能的原因,在使用过滤器之前,NPF把它给 JIT 编译器,该编译器把它转换成一个本地80X86 的函数。当一个数据包被捕获后,NPF调用该本地函数,而不是调用该过滤器的解释器,这使得处理过程很快。该优化的背后观念与JAVA jitters的一个优化非常相似。2)一个循环缓冲区来存储数据包并避免丢包名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 8 页 -存储在缓冲区的一个数据包带有一个包头,该头维护如时间戳、包大小的信息。此外,为了提高应用程序访问数据的速度,数据包之间填充了一些填充数据。在单个读操作中,一组数据包能从NPF复制到应用程序。这提高了性能,因为最小化了读的次数。当一个新的数据包到来时,缓冲区已满,该包被丢弃,因此造成掉包。为了最大化多功能性(maximum versatility),内核与用户层的缓冲区在运行时能够被改变。packet.dll与 wpcap.dll提供实现该功能的函数。用户缓冲区的大小非常重要,因为它决定了在单个系统调用内,能够从内核空间复制到用户空间的最大数据量。另一方面,在单个调用中能够复制的最小数据量也非常重要的。该变量如果为一个巨大的数值,内核在把数据复制到用户层前需要等待几个数据包的到来。这保证了低数量的系统调用,也就是,低的处理器占用,这对诸如嗅探器的应用程序是一个很好的设置。在另一方面,一个小的数值意味着只要应用程序准备好接收数据包,内核就将复制数据包。这对于实时应用程序是极好的(如ARP重定向器(redirectors)或网桥)方案,这些程序需要内核做出更好的响应。从这些方面看来,NPF具有一个可配置的特性,允许用户在最好的效率与好的响应度(或任何中间情况)之间做出选择。库 wpcap.dll包括两个系统调用,能够用来设置读超时时间与内核能够传输到应用程序的数据的最小数量。缺省状态下,读超时时间为1 秒,内核与应用程序之间数据复制的最小数量为 16K。1.3.2.2 数据包发送NPF允许把原始数据包发送到网络上。为发送数据,一个用户层应用程序在NPF设备上执行一个 WriteFile()系统调用。该数据被发送到网络,并不对数据作任何协议封装,因此应用程序将不得不构建每个数据包的不同协议头。应用程通常不需要生成FCS,它通常由网络适配器硬件计算,并在发送到网络前自动添加到一个数据包的尾部。正常情况下,网络数据包的发送率并不是非常高,因为每个数据包都需要一个系统调用。因为该原因,WinPcap添加了使用一次写系统调用就能把单个数据包发送多次的功能。通过IOCTL调用(控制码为pBIOCSWRITEREP),用户层应用程序能够设置单个数据包发送的次数。例如,该值设为1000,应用程序所写的每个原始数据包在驱动设备文件上都将会发送1000次。能够用该特性可为测试的目的生成高速的网络流量:上下文切换的负载不再出现,因此性能显著性的变好。1.3.2.3 网络监视WinPcap 提供一个内核层的可编程模块,能够对网络流量计算简单的统计信息。该模块背后的思想如图2-4 所示:统计信息不需要复制数据包到应用程序就能被收集,从监视引擎获取统计结果简化了接收与显示。这允许避免捕获的大部分工作耗费在内存与CPU时钟上。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 8 页 -监视引擎由一个分类器与紧接分类器的一个计数器所组成。数据包使用NPF的过滤引擎被分类,这提供了一种配置方式来选择一个网络流量的子集。经过过滤器的数据到计数器,计数器保存一些变量,如数据包的数目与过滤器接收到字节的数量,并根据网络所接收的数据包的数据来更新这些变量。这些变量在固定时间间隔时传递给用户层应用程序,用户可以配置时间间隔的周期。该模式下在内核与用户空间中没分配缓冲区。1.3.2.4 转储到磁盘WinPcap 提供转储到磁盘的能力,可以在内核模式下把网络数据直接存储到磁盘。图 2-6 数据包捕获与内核层转储在传统的系统中,图 2-6 中黑色箭头所表示的就是把数据包存储到磁盘的流程。每个数据包被复制几次,正常情况下,分配4 个缓冲区:一个是捕获驱动程序的,一个是应用程序保持所捕获的数据,一个是应用程序写文件所用的stdio函数(或类似)使用的,最后一个是文件系统的。当 NPF的内核层网络流量记录特性(traffic logging feature)激活时,捕获驱动程序直接访问文件系统,这样红色虚线箭头所表示的就是把数据包直接存储到磁盘的流程。只有两个缓冲区与一次复制是必须的,系统调用的数目彻底减少,因此性能显著的更好。当前,转储到磁盘的功能采用广泛使用的libpcap格式。为了选择存入磁盘的数据包,也提供了在网络流量转储过程前就被过滤的特性。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 8 页 -

    注意事项

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

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




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

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

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

    收起
    展开