- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于libpap的网络编程技术
第五章 基于libpcap的网络编程技术
5.1 常见的包捕获机制简介
包捕获就是利用以太网的介质共享的特性,通过将网络适配器设置为混杂模式的方法,接收到所有网络上的以太网帧。
包捕获的机制大致可以分为两类:一类是由操作系统内核提供的捕获机制。另一类是由应用软件或系统开发包捕获驱动程序提供的捕获机制。常见的包捕获机制如表5-1所示。其中最主要的是下列4种:
BPF(Berkeley Packet Filter)
DLPI(Data Link Provider Interface)
NIT(Network Interface Tap)
SOCK-PACKET类型套接口。
BPF由基于BSD的Unix系统内核所实现。DLPI是Solaris(和其他System V UNIX)系统的内嵌子系统。NIT是SUN OS4系统的一部分,但在Solaris /SUN OS5中被DLPI所取代。Linux核心则实现了SOCK-PACKET的包捕获机制。从性能上看,BPF比DLPI和NIT 好得多,SOCK-PACKET最弱。
表5-1 常用的包捕获机制
由于现在很多局域网为NT网,其网络传输方式大多采用以太网标准,所以涉及的编程也是在Windows环境下实现的。Windows操作系统没有提供包捕获机制,只提供了数量很少并且功能有限的API调用。在Windows环境下由于其自身的封装性,很难对其底层进行编程。
本章将对BSD系列的libpcap进行深入地介绍。
5.2 Libpcap与BPF
(1)libpcap概述
libpcap(Packet Capture library),即数据包捕获函数库。该库提供的C函数接口可用于捕获经过网络接口(只要经过该接口,目标地址不一定为本机)的数据包。它是由洛仑兹伯克利试验室的研究人员Steven McCanne和Van Jacobson于1993年在Usenix93会议上正式提出的一种用于Unix内核数据包过滤体制 。该函数库支持Linux、Solaris和BSD系统平台。采用libpcap可以捕获本地网络数据链路层上的数据。
libpcap库是基于BPF(Berkeley Packet Filter:BSD包过滤器)系统的。BPF是BSD系统在的TCP/IP软件在实现的时候所提供的一个接口,通过这个接口,外部程序可以得到到达本机的数据链路层网络数据,同时也可以设置过滤器,嵌入到网络软件中,获得过滤后的数据包。
(2)BPF结构及工作原理
BPF或者BSD Packet Filter是一种由steven McCanne和Van Jacobson提出的内核包捕获的体系结构,它使得UNIX下的应用程序通过一个高度优化的方法读取流经网
图5-1 BPF工作原理
络适配器的数据包。winpcap的核心网络驱动程序也是采用这种结构的。它主要由两部分组成:Network tap和Packet Filter。Network tap是一个回调函数(callback function),
并不是直接由BPF执行,当一个新的数据包到达时,由网络适配器的设备驱动程序激活,它从网络拷贝每个数据包,并且将它们分发到对应的应用程序。Packet filter来决定一个数据包是否需要进行接收和拷贝到相应的应用程序,同时还提供一种很复杂的功能,可以确定需要进行拷贝的数据的长度。BPF的工作原理如图5-1所示。
由Network tap不断地从网络适配器获得数据包,通过packet filter的判断后,拷贝数据到内核store buffer,当store buffer填满后,将和hold buffer进行数据交换,再由hold buffer将数据拷贝到处于用户层的user buffer中。由于采用这种内核过滤、数据包双缓冲、数据包批拷贝的方式,减少了用户态进程调用内核的次数,极大地提高了数据包的处理能力。在系统实现的过程中可以充分利用BPF过滤模型的这种特性,通过根据不同的网络侦听的需求,如针对特定的协议、特定的机器等,设置内核过滤器,减少捕获的数据的大小,同时增加内核缓冲区的大小,使系统能够获得一个很好的性能。
BPF的结构如图5-2所示。
libpcap在BPF的基础上提供了实用的接口函数供其它程序调用,既可以捕获网络上的数据,也可以打开tcpdump和tcpslice格式的数据,进行分析。同时也可以根据需要,设置过滤器,获得感兴趣的数据包。可以编辑简单的BPF过滤器对数据进行过滤,获得指定的IP包、TCP包等。如下所示:可以用tcpdump的过滤表达式进行过滤:
tcpdump tcp 21
表示获得FTP端口(21)的所有的TCP数据,即通过21端口进出的数据,其它的数据全部丢弃。
图5-2 BPF的结构
Libpcap
您可能关注的文档
- 城市亮化控制说明.doc
- 城市地下综合廊项目汇总.doc
- 城市交通监控统.ppt
- 城市(小区)用水、电、气表远程抄表系统.doc
- 城市之星酒店寓项目营销建议书.ppt
- 城市报警与监系统建设方案设计要素.doc
- 城市户外广告理现状及对策建议.doc
- 城市经理工作册.doc
- 城市地理学第章城市土地利用.ppt
- 城市规划三大论.ppt
- 2025年分红险:低利率环境下产品体系重构.pdf
- 大学生职业规划大赛《应用物理学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《新媒体技术专业》生涯发展展示PPT.pptx
- 七年级上册英语同步备课(人教2024)Unit 3 课时2 Section A(2a-2f)(同步课件).pdf
- 七年级上册英语同步备课(人教2024)Unit 2 课时4 Section B(1a-1d)(同步课件).pdf
- 七年级上册英语同步备课(人教2024)Unit 3课时6 project(课件).pdf
- 2025年港口行业报告:从财务指标出发看港口分红提升潜力.pdf
- 2023年北京市海淀区初一(七年级)下学期期末考试数学试卷(含答案).pdf
- 2026年高考化学一轮复习第7周氯及其化合物、硫及其化合物.docx
- 2023年北京市西城区北京四中初一(七年级)下学期期中考试数学试卷(含答案).pdf
文档评论(0)