数据包捕获原理

上传人:壹****1 文档编号:498315718 上传时间:2023-08-16 格式:DOCX 页数:5 大小:29.57KB
返回 下载 相关 举报
数据包捕获原理_第1页
第1页 / 共5页
数据包捕获原理_第2页
第2页 / 共5页
数据包捕获原理_第3页
第3页 / 共5页
数据包捕获原理_第4页
第4页 / 共5页
数据包捕获原理_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《数据包捕获原理》由会员分享,可在线阅读,更多相关《数据包捕获原理(5页珍藏版)》请在金锄头文库上搜索。

1、青岛农业大学计算机网络综合实习论文题目:UDP包解析软件的设计与实现专业班级:计本0803姓名(学号):周方盼(20082845)2011年1116UDP包解析软件的设计与实现1 数据包捕获原理?由于目前用的最多的网络形式是以太网,在以太网上,数据是以被称为帧的数据结构为单位进行交换的,而帧是用被称为带碰撞检测的载波侦听多址访问即CSMA/CD的方式发送的,在这种方法中,发送到指定地址的帧实际上是发送到所有计算机的,只是如果网卡检测到经过的数据不是发往自身的,简单忽略过去而已3。正是这种基于CSMA/CD的广播机制,这就给连接在网络上的计算机捕获来自于其他主机的数据带来了可能,即通过对网络接口

2、的设置可以使网卡能够接收到所有经过该机器的数据,然后将这些数据做相应处理并实时分析这些数据的内容,进而分析网络当前状态和整体布局。从广义的角度上看,一个数据包捕获机制包含三个主要部分。首先是最底层针对特定操作系统的包捕获机制,然后是最高层针对用户程序的接口,第三部分是数据包过滤机制。不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序。而数据包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤缓冲等相关处理,最后直接传递到应用程序4。值得注意的是,数据包捕获机制并不影响

3、操作系统对数据包的网络栈处理。对用户程序而言,数据包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望的数据包。这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。数据包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。2 数据包捕获方法?纵观国内外使用的包捕获机制的方法,大致可归纳为两类:一类是由操作系统内核提供的捕获机制;另一类是由应用软件或系统开发包通过安装包捕获驱动程序提供的捕获机制,该机制主要用于Win32平台下的开发。操作系统提供的捕获机制主要有四种5:BPF、DLPI、NIT和So

4、ckPacket类型套接口。BPF由基于ESD的Unix系统内核所实现。DLPI是Si1aris系统的内嵌子系统。NIT是SunOS4系统的一部分,但在Solaris系统中被DLPI及NIT所取代。Linux核心则实现了SockPacket的包捕获机制。从性能上看,BPF比DLPI及NIT好得多,而SockPacket最弱。Windows操作系统没有提供内置的包捕获机制。它只提供了数量很少并且功能有限的API调用。PCAUSA公司提供了一个商业的产品,该产品提供了包捕获接口并且包括了一个BPF兼容的过滤器。然而,用户接口过于低级并且该产品不提供象过滤器生成函数那样的抽象函数。WinPcap是W

5、in32上的第一个用来捕获数据包的开放系统软件包,它是一种新提出的强有力并且可扩展的框架结构。WinPcap包含了一系列以前系统所没有的创新特性。本文中将主要使用目前比较流行的WinPcap软件包来提供捕获机制,因为它始终把性能放在首位,能支持十分苛求的应用要求6o由于网络适配器一般工作在数据链路层,因此所得到的报文是链路层的报文,它除了应用层的数据外,还包括数据链路层帧头、IP报文头、以及IP层之上的TCP或UDP报文头,并且应用层还有可能也定义了自己的帧结构。本文设计的捕获程序是由运行在Windows核心层的包捕获驱动程序实现的。不使用专用的数据采集系统,而是通过网卡来捕获数据,所以必须要

6、有一个高效的丢包率低的包捕获驱动程序。该驱动程序采用WinPcap包捕获结构。该包捕获结构具有与网络适配卡无关的特性,并且独立于网络的具体形式,如令牌环、以太网、点到点协议PPP等,因此适应面广。利用WinPcap的捕获数据技术对底层数据进行捕获。首先用户应用程序向网卡设备驱动程序发出请求,由网卡设备驱动程序激活从网络拷贝每个分组的数据包,并且将它们分发到对应的应用程序7。捕获流程如图1所示。图1捕获数据流程图具体步骤如下:1、打开网卡,并设为混杂模式。2、回调函数NetworkTap10在得到监听命令后,从网络设备驱动程序处收集数据包,把监听到的数据包负责传送给过滤程序。3、当Packetf

7、ilter监听到有数据包到达时,NDIS中间驱动程序首先调用分组驱动程序,该程序将数据传递给每一个参与进程的分组过滤程序。4、然后由Packetfi1ter过滤程序决定哪些数据包应该丢弃,哪些数据包应该接收,是否需要将接收到的数据拷贝到相应的应用程序。5、通过分组过滤器后,将数据未过滤掉的数据包提交给核心缓冲区。然后等待系统缓冲区满后,再将数据包拷贝到用户缓冲区。监听程序可以直接从用户缓冲区中读取捕获的数据包。6、关闭网卡。?数据包捕获实现?关于数据包捕获的实现算法是十分的简单的,当网卡设置为混杂模式时,在网内的数据包都会被发送一份到网卡上。以电子邮件为例,在发送邮件连接信息和邮件头的端口号是

8、25端口。据此,只需要监听网络是否25端口的数据包,如果有,则进一步判断其数据报的IP是否是我们需要监听的计算机的IP,如果是,则检查是否有以指定IP命名的文件夹,动态命文件名存储数据包;如果不是,一方面我们可以存储数据包,也可以丢弃8。程序主要函数如下:voidCMainFrame:OnOptAdpater()/提取网卡信息voidCMainFrame:OnUpdateOptAdpater(CCmdUI*pCmdUI)/数据包捕获开始后,禁止选择网卡voidCMainFrame::On()/开始捕获voidCMainFrame:On()暂停捕获UINTReceivePacket(LPVOID

9、param)/接收数据包CListCtrl&ctr1=thisGetListCtr1();/将所捕获数据包的内容复制下来,并保存到CArray数组中,以备将来使用在实际应用中,用户系统只关心一些特定的数据。因此高效的信息过滤机制是系统的重要组成部分,它使得用户系统可以指定特定的子网主机以及指定的协议类型,只将用户关心的数据向上层提交,从而提高系统的工作效率。WinPcap使用了一个高效的数据包过滤机制,BPF(伯克利数据包过滤)。与应用层过滤机制相比,EPF机制是一种内核层的过滤机制,通过它可以大幅度地提高包过滤时的性能。在过滤机制中,对于开发人员来说,最重要是要掌握它的过滤规则,因为WinP

10、cap就是通过调用相应的函数,来使用这些过滤规则实现对数据包实现过滤的9。考虑到性能的因素,在使用过滤器前,NPF提供一个JIT编译器将它转化成本地的80x86函数。当一个数据包被捕获,NPF调用这个本地函数而不是调用过滤器的解释器,这使得处理过程相当快。程序主要函数如下:voidCMainFrame:OnOptFilter()/设置过滤器BOOLCMainFrame:Filter(constunsignedchar*pkt_data)/过滤数据包voidCMainFrame::OnUpdateOptFi1ter(CCmdUI*pCmdUI)/数据包捕获开始后禁止设置过滤器捕获结果如图2所示。

11、图2数据包捕获结果?具体代码如下:#includestdio.h#includestdlib.h#includeiostream.h#inc1udepcap.h#includewinsock2.h#pragmacomment(lib,ws2_32)#pragmacomment(lib,wpcap)/以太帧头结构体typedefstructether_header?jnsignedcharethe_dhost6;unsignedcharether_shost6;unsignedshortether_type;ETHHEADER,*PETHHEADER;/IPv4包头结构体typedefstruc

12、tip_headerunsignedcharver_ihl;/Version(4bits)Internetheader1ength(4bits)unsignedchartos;/Typeofserviceunsignedshortt1en;/Total1ength?jnsignedshortidentification;/Identification?unsignedshortflagsfo;/Flags(3bits)+Fragmentoffset(13bits)unsignedcharttl;/Timetoliveunsignedcharproto;/Protocol?unsignedsho

13、rtcrc;/Headerchecksum?u_charip_src4;/Sourceaddress?u_charip_dst4;/DestinationaddressIPHEADER,*PIPHEADER;void/初始化网络适配器InitAdapter()/UDP包头结构体typedefstructudp_headeru_shortsport;/源端口号u_shortdport;/目的端口号?u_shortlen;/数据报长度u_shortcrc;/校验和UDPHEADER,*PUDPHEADER;);/void/关闭网络适配器oseAdapter();voiddispatcher_han

14、dler(uchar*,constpcap_pkthdr*,constuchar/解析UDP数据包格式FILE*fp;pcap_if_t*alldevs,*d;charerrbufPCAP_ERRBUF_SIZE;pcap_tadhandle;voidmain()intcount=0,number;printf(Pleaseenterthenumberofpacketsended:);scanf(%d,&number);InitAdapter();?fp=fopen(d:/buhuo/udp.txt,w);?whi1e(countv=number)pcaploop(adhandle,1,dis

15、patcher_hand1er,NULL);/捕获数据报?count+;?CloseAdapter();voidInitAdapter()inti;?f(pcap_findalldevs(&aIIdevs,errbuf)=-1)/寻找网络适配器coutnext,i+);if(adhandle=pcap_open_live(d-name,65535,1,20,errbuf)=NULL)/打开选取的网络适配器?coutUnabletoopentheadapter!;?cap_freealldevs(alldevs);?return;?if(pcap_data1ink(adhandle)!=DLT_EN10MB)/判断网络是否为10MB以太网coutvvThisprogramworksonlyonEthernetnetwork!;?pcap_freeal1devs(al1devs);return;?voiddispatcher_handler(u_char*,constpcap_pkthdr*header

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号