




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
兰州交通大学博文学院毕业设计(论文)摘要基于数据链路层的网络计费方式中关键的技术在于链路层数据包的捕获及分析。首先,本文介绍了用于数据包捕获的网络嗅探技术的工作原理,并给出应用winpcap实现数据包获取类的设计。然后在介绍了分层网络数据包的类型及结构的基础上,给出数据包分析处理类的设计。分析出的有用信息存于参数类中记录入数据库,供计费模块所用。关键词:包捕获;网络嗅探器;winpcap;包分析AbstractThe key technology of net-charging based on data-link Layer is the capture and analysis of data frame. Firstly, the paper introduces the principle of sniffer technology to capture data packets and presents the design of packet capture class. Then, It introduces the types and structures of packets and presents the design of packet analysis class. Being adopted in the net-charging module,the useful information in parameter class are stored into the database system.Key words: Capture;Sniffer;Winpcap;Analysis II目录1.绪论11.1问题的提出11.2网络计费方式11.3本文研究内容31.4本文的组织32.网络嗅探的工作原理42.1基础知识52.1.1以太网络的工作原理52.1.2以太网卡工作模式及原理62.1.3 HUB工作原理62.1.4局域网如何工作72.2 Sniffer原理83.数据包的分析103.1分层协议103.1.1数据链路帧113.1.2 ARP 数据包123.1.3 IP数据报133.1.4 TCP 数据报143.1.5 UDP数据报163.1.6 ICMP 报文163.2系统中数据包处理的实现174.基于Winpcap的数据包获取实现184.1 BPF184.1.1 Libpcap194.1.2 Libpcap 函数库框架194.2 Winpcap204.2.1 winpcap 结构分析204.2.2 wpcap. dll库函数介绍22结论23致谢24参考文献25IV1.绪论1.1问题的提出面对世界新科技革命的挑战和我国经济发展对科技不断增长的需求,我国作出了加快科技进步,实施科教兴国的重大战略决策。在这一重大决策的指导下,协调推进工业化与信息化的发展就成为历史的必然。按照协调推进工业化和信息化的要求,那就是要在全社会广泛应用信息技术,提高计算机和网络的普及应用程度,加强信息资源的开发利用。政府行政管理,社会公共服务,企业生产经营都要运用数字化、网络化技术,加快信息化步伐。当前,随着政府上网和企业上网工程的全面展开,各个政府部门及企事业单位Internet应用越来越走向深入。在初期的宽带网络建设中,从重量级的电信企业到房地产商都投身到这场意图改变中国百姓生活的信息化建设中。但人们逐渐认识到,在这场没有硝烟的战争中,宽带应用才是真正的主宰者,于是人们纷纷寻找适合宽带网络的应用支撑技术。宽带给互联网带来了新的一页,带来了更多精彩的多媒体应用。当宽带接入的收费与拨号的费用相差无几的时候,宽带接入代替了原有大部分的拨号接入。宽带接入的发展,给人们带来了无穷无尽的资源,可以在信息高速公路上尽情驰骋。网上办公、可视听在线会议、远程炒股、在线欣赏影视大片、和远方的朋友交流宽带让人们的生活越来越丰富多彩。但是在享受丰富的网络生活的同时,引发的宽带计费问题也越来越突出。各单位除了建网的一次性投资外,更多面临的是日常网络使用费的问题,这其中除专线月租费、端口费、IP地址费等固定费用外,长期、不确定的费用便是ISP收取的专线网络数据流量费。由于ISP通常不提供上网流量统计查询手段,而是每月提供一张收费单,因此在收到ISP的流量收费清单之前,专线用户单位往往不清楚自己的网络使用及费用情况,无法控制每月的网络使用费用。另外,即使是包月收费,专线用户单位也应该对其内部各个部门或各台机器的网络使用情况做到心中有数。如此看来,按照“谁使用,谁付费”的原则,建立自己的网络统计计费系统,随时掌握本单位各个部门及用户的网络使用情况,收取适当的网络使用费用,将有利于加强网络管理,保证网络的合理、有效利用。1.2网络计费方式网络计费系统通常包括数据采集、数据处理、费用计算、计费信息查询、计费规则管理和用户管理等模块。当前,根据流量数据采集方式的不同,网络计费系统大体可划分为以下几种类型:12(1)基于路由器的网络计费系统:当网络达到一定程度或者说要求统计相当大的一个网段的流量,路由器必须用作整个网络的通向广域网的出路,所以路由器可作为流量统计的硬件位置。现在,路由器也的确提供这种流量统计功能,能够给出类似于日志的流量统计的结果。因此基于路由器的网络计费系统定时读取路由器MIB管理信息库中的IP计费表,并将这些采集到的数据处理后装入数据库中,在此数据库基础上进行统计计费等管理工作。但为路由器增加流量统计任务必然会加重其工作负载,而且,与计费相关的数据变量如不及时读取就会溢出,造成数据丢失。因此数据采集周期要求很短。这样,越是网络流量大的路由器就越是频繁传递采集数据,如此会使网络带宽更为拥挤,而且直接对路由器访问影响整个系统的安全。此外,由于这种计费方式是按IP地址统计流量,对于在公共网络机房上网的用户就无法统计其流量。另外,在采用DHCP进行IP地址动态分配时,无法分辨是哪台机器或哪个用户产生的流量。并且它是基于第三层(IP)的包统计与网上实际的流量本身就有一定的差距。(2)基于代理服务器的网络计费系统:由于代理服务器负责整个局域网对外部网络的访问工作,凡是通向局域网以外的所有包都由服务器转发,所以利用它进行流量统计相当方便。现在大多数代理服务器软件产品具有登记内部网用户访问外部网的日志记录,有些产品还可以直接将日志记录到数据库中。日志记录包括用户标志、客户机IP地址、建立连接的时间、传送字节数、请求连接远程站点的URL等信息。根据日志记录文件或数据库,可以统计内部网每个用户的网络流量以及上网时间,甚至可以按服务网络类型(如:HTTP、SMIP、FTP等)分别进行统计。当然,基于代理服务器的数据流量统计方法同样也适用于局域网拨号上网的情况。但这种方法只适合于小型局域网,网络一旦达到一定程度,就不是一台代理服务器能解决的问题了。(3)基于网桥的网络计费系统:这个方法是在1997年提出的。其核心思想是将一台PC机设计成网桥放在局域网的出口,负责转发所有的帧,在转发的同时将其记录下来,再设计程序进行统计。这种方法在思路上有所突破,但PC机的负担太重,它负责整个网段的所有数据的转发,同时进行统计,一旦网络出现大量突发数据,可能会影响这个网络的工作,统计也会受影响。而且人们一般关心的是出入整个子网的流量特别是分别统计出流向国外和国内的数据量,如果一个子网不得不包含几个网桥,则每个网桥受到的数据可能重叠,在流量统计时可能会出现一些错误。(4)基于防火墙的网络计费系统:有些防火墙产品带有流量统计功能,因此也可以利用防火墙的监控记录进行流量统计,进而实现计费管理。实现专线网络计费有多种方式,选择何种方式应该根据各单位的实际情况。总的说来,网络计费系统应该结合各单位的网络结构整体设计。以上几种方法各有利弊,不免有些缺憾。由此提出了一种新的方案:基于数据链路层的网络流量计费方案。为了增加流量统计的精确度,被统计的对象应尽量接近于ISO 7层模型的低层,数据链路层(第二层)是合理的位置。这种方法利用了以太网的广播传输特性,使以太网卡NIC工作在混杂模式,以捕获局域网上每个以太网数据帧。通过分析每一帧,将表示帧长度的字段抽取出来,进而统计以太网上各个IP地址的网络流量(当然也可统计IPX协议或其他网络协议的流量),实现网络计费。这种方法要求以太网数据帧捕获采集工作站与网络出口路由器或边界路由器必须处在同一网段上,即必须将路由器LAN端口与数据帧捕获采集工作站连接在同一个共享式集线器上。这种获取数据帧的技术被称之为而sniffer嗅探器技术,此方法只接收不发送,因此不占用网络带宽,不增加路由器的工作负荷,对网络和路由器工作无任何影响,是一种比较好的方案。1.3本文研究内容本论文为实现基于数据链路层的网络计费系统,主要研究系统中数据采集使用的sniffer网络嗅探器技术,详细介绍用于实现此技术的winpcap函数库(基于1ibpcap函数库),并给出基于winpcap的数据包获取的实现。同时实现对数据包的分析处理,提取用于计费的有用信息(如获取包的时间,源、目的地址、数据长度等)。1.4本文的组织第一章:绪论,阐述当前宽带计费方式,引出基于数据链路层的宽带计费方式,再给出本文所研究的主要内容。第二章:讲述网络嗅探器的工作原理。第三章:对捕获的数据包进行分析处理,提取用于计费的有用信息。第四章:讲解实现网络嗅探器的函数库,并给出基于此的实现。结 论:对全文的工作做一个研究总结,并指出了今后的工作和研究方向。2.网络嗅探的工作原理sniffer(网络嗅探器)是一种常用的收集有用数据方法,这些数据可以是用户的帐号和密码,可以是一些商用机密数据等等。ISS为sniffer这样定义:sniffer是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具。它几乎和internet有一样长久的历史了,最早是给系统管理员提供的一个分析网络和查明哪里有错误发生的工具。在网络安全界从事网络安全的技术人员和相当一部分准黑客(指那些使用现成的黑客软件进行攻击而不是根据需要去自己编写代码的人)都不会对网络嗅探器(sniffer)感到陌生,网络嗅探器无论是在网络安全还是在黑客攻击方面均扮演了很重要的角色。网络嗅探手段可以有效的捕获到在网络上传输的数据包,再加以对这些数据包的分析,网络管理员可以清楚的了解网络的运行状况,有效的维护网络的安全与稳定。随着网络技术的普及,网络嗅探器也被相当一部分黑客所利用,他们或自己编写代码或利用现成的网络嗅探工具软件将网卡设置为混杂模式,对网络上传输的数据包进行捕获与分析,从中获取有价值的信息后对网络发动进一步的攻击。虽然网络嗅探器技术被黑客利用后会对网络安全构成一定的威胁,但嗅探器本身的危害并不是很大,主要是用来为其他黑客软件提供网络情报,真正的攻击主要是由其他黑客软件来完成的。而在网络安全方面,网络嗅探手段可以有效地探测在网络上传输的数据包信息,通过对这些信息的分析利用是有助于网络安全维护的。可见,嗅探器实际是一把双刃剑。sniffer的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,就可以用网络嗅探器来作出精确的问题判断。在合理的网络中,sniffer的存在对系统管理员是至关重要的,系统管理员通过sniffer可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间的异常通讯有些甚至牵涉到各种协议,借助于sniffer网络管理员可以方便的确定出多少流量属于哪个网络协议、占主要通讯协议的主机是哪一台、大多数通讯目的地是哪台主机、报文发送占用多少时间、或者相互主机的报文传送间隔时间等等,这为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。通过以上分析,可以得知网络嗅探器也同样可以为我们进行网络计费所用。在本系统中,我们就采用sniffer技术来获取网络数据包,通过对数据包的分析来确定各机的网络流量,将数据存入数据库后供计费模块进行统计计费。为了对以太网中sniffer的工作原理有一个深入的了解,我们先了解一下以太网的工作原理以及HUB与网卡的原理。2.1基础知识2.1.1以太网络的工作原理1979年初,施乐和DEC讨论共同建造以太网LAN的设想,结果却制定出将以太网转变成产业标准的计划。以太网技术被转到标准化组织-位于华盛顿特区的美国标准化局(NBS),其后,Intel的加入更是加速了以太网的发展。施乐提供技术,DEC是以太网硬件的强有力的供应商,具有雄厚的技术力量,Intel提供以太网芯片构件。1980年9月30日,DEC、Intel和施乐公布了第三稿的“以太网,一种局域网:数据链路层和物理层规范,1.0版”,这就是现在著名的以太网蓝皮书,也称为DIX版以太网1.0规范。DIX最初规定在20MbPs下运行,最后降为10Mbps。在以后两年里DIX重新定义该标准,并在1982年公布了以太网2.0版规范,并作为终结。在DIX开展以太网标准化工作的同时,世界性专业组织IEEE组成一个定义与促进工业LAN标准的委员会,并以办公室环境为主要目标,该委员会名叫802工程。DIX集团虽已推出以太网规范,但还不是国际公认的标准,所以在1981年6月,IEEE802工程决定组成802.3分委员会,以产生基于DIX工作成果的国家公认标准,一年半以后,即1982年12月19日,19个公司宣布了新的IEEE802.3草稿标准。1983年该草稿最终以IEEE10BASE5而面世。今天的以太网和802.3可以认为是同义词。90年代,802.3标准中的物理层标准10Base-T的推出,使得Ethernet性能价格比大大提高,使得以太网成为最为重要的一种局域网建网技术。虽然其它网络技术也曾经被认为可以取代以太网的地位,但绝大多数网络技术人员认为以太网高度灵活,相对简单,易于实现,所以仍然把以太网作为首选的网络解决方案。通常我们所说的以太网主要是指以下三种不同的局域网技术:(1)以太网/IEEE802.3-采用同轴电缆作为网络媒体,传输速率达到10Mbps;(2)100Mbps以太网-又称快速以太网,采用双绞线作为网络媒体,传输速率达到100Mbps;(3)1000Mbps以太网-又称为千兆以太网,采用光缆或双绞线作为网络媒体,传输速率达到IO00Mbps(IGbps)。14Ethernet的核心技术就是载波侦听/冲突检测(CSMA/CD,carrier sense multiple aeeess with collision deteetion)技术。所谓载波侦听是指在网络中的每个站点都具有同等的权利,在传输自己的数据时,首先监听信道是否空闲;如果空闲,就传输自己的数据;如果信道被占用,就等待信道空闲。而冲突检测则是为了防止发生两个站点同时监侧到网络没有被使用时而产生冲突;以太网采用了CSMA/CD技术,由于使用了广播机制,所以,所有与网络连接的工作站都可以看到网络上传递的数据。2.1.2以太网卡工作模式及原理生产以太网卡的时候,网络设备制造商会在硬件内部写入一个唯一的号码,称为MAC地址。MAC地址也叫物理地址、硬件地址或链路地址,它在计算机里以二进制表示,为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如08:00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE分配,而后3位16进制数OA:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。只要不去更改自己的MAC地址,那么这个MAC地址在世界上就是惟一的。网卡的MAC地址与IP地址之间的转换是通过ARP、RARP来解析与反解析的,用ipconfig/ifconfig可以查看到这个MAC地址。在网卡实际工作时,当收到传输来的数据,网卡内的单片程序先接收数据头的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就在接收后产生中断信号通知CPU,认为不该接收就丢弃不管,所以不该接收的数据网卡就被截断了,计算机根本就不知道。CPU得到中断信号产生中断,操作系统就根据网卡驱动程序中设置的网卡中断程序地址调用驱动程序接收数据,驱动程序接收数据后放入信号堆栈让操作系统处理。13以太网卡在完成收发数据包的工作中,有两种接收模式。一种为混杂模式:不管数据帧中的目的地址是否与自己的地址匹配,都接收下来。另一种为非混杂模式:只接收目的MAC地址与自己相匹配的数据帧,以及广播数据包(和组播数据包)。通常情况下,以太网卡都工作在非混杂模式,只接收这样的包,即目标MAC地址与自己相匹配的数据帧。我们为了实现网络计费,需要监听网络上的流量,就必须将网卡的工作模式设置为混杂。2.1.3 HUB工作原理由于以太网等很多网络(常见共享HUB连接的内部网)是基于总线方式,物理上是广播的,就是当一台机器发给另外一台机器的数据,共享HUB先收到然后把它接收到的数据再发给其他的(来的那个机器不发了)每一台机器,所以在共享HUB下面同一网段的所有机器的网卡都能接收到发来的数据。交换式HUB的内部单片程序能记住每台机器的网卡的掀C地址,以后该哪台机器接收就发往哪台机器,而不是像共享HUB那样发向所有的机器,所以交换HUB下只有该接收数据的机器的网卡能接收到数据,当然广播包还是发往所有机器。显然共享HUB的工作模式使得两台机器传输数据的时候其他机器的网卡也被占用了,所以共享HUB决定了同一网段同一时间内只能有两台机器进行数据通信,而交换式HUB两台机器传输数据的时候别的网卡没有被占用,所以别的网卡之间也可以同时传输。这就是共享HUB与交换阴B不同的两个地方,共享HUB是同一时间只能一台机器发送数据并且所有的机器都可以接收,而只要不是广播数据,交换现B同一时间可以有多对机器进行数据传输并且数据是私有的。132.1.4局域网如何工作数据在网络上是以很小的称为帧(Frame)的单位传输的。帧由几部分组成,不同的部分执行不同的功能。(例如,以太网的前12个字节存放的是源和目的的地址,这些位告诉网络:数据的来源和去处。以太网帧的其他部分存放实际的用户数据、TCP/工P的报文头或IPX报文头等等)。帧通过特定的网络驱动程序进行成型,然后通过网卡发送到网线上。通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。通常在局域网(LAN)中同一个网段的所有网络接口都有访问在物理媒体上传输的所有数据的能力。同时,每个网络至少也有一个广播地址(代表所有的接口地址)。在正常情况下,一个合法的网络接口应该只响应这样的两种数据帧:(1)目标机具有和本地网络接口相匹配的硬件地址;(2)帧的目标机具有“广播地址”。在接受到上面两种情况的数据包时,网卡通过cpu产生一个硬件中断,该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。当采用共享HUB,用户发送一个报文时,这些报文就会发送到LAN上所有可用的机器。在一般情况下,网络上所有的机器都可以侦听到通过的流量,但对不属于自己的报文则不予响应,常见的共享式网络示意图2.1如下:图2.1正常情况下,工作站A不会捕获属于工作站B和C的数据,而是简单的忽略这些数据。但如果我们将局域网中某台机器(如A)的网络接口处于混杂(promiscuous)模式(即网卡可以接收其收到的所有数据包),那么它就可以捕获网络上所有的报文和帧,它被配置成这样的方式(包括其软件),就具有了嗅探器的功能(B、C工作站处于同等的地位,如果将它们网卡设置为混杂模式,也同样成为了嗅探器)。2.2 Sniffer原理有了前面的网络基本知识和以太网、网卡及HUB的工作原理后,下面来详细讲讲sniffer。首先,要知道sniffer要捕获的东西必须是要物理信号能收到的报文信息。显然只要通知网卡接收其收到的所有包(也就是将网卡设置为混杂promiscuous模式:指网卡对总线上传送的所有数据进行侦听,而不仅仅是与自己的地址相匹配的数据),在共享HUB下就能接收到这个网段的所有包,但是交换HUB下就只能是自己的包加上广播包。要想在交换HUB下接收到发往别的机器的包,那就要让其发往想收到数据包的机器所在的网卡。交换HUB记住一个网卡的MAC是通过接收来自这个网卡的数据后并记住其源MAC,就像一个机器的IP与MAC对应的ARP列表,交换HUB维护一个物理口(就是HUB上的网线插口,这之后提到的所有HIJB口都是指网线插口)与MAC的表,所以可以欺骗交换HUB的。可以发一个包设置源做C是你想接收的机器的撇C,那么交换HUB就把你机器的网线插的物理口与那个MAC对应起来了,以后发给那个MAC的包就发往你的网卡了,也就是你的网卡可以sniffer到了。注意这物理口与MAC的表与机器的ARP表一样是动态刷新的,那台机器发包后交换HUB就又记住他的口了,所以实际上是两个网卡在争,这只能应用在只要收听少量包的场合。内部网基于IP的通信可以用ARP欺骗别人机器让其发送给你的机器,如果要想不影响原来两方的通信,可以欺骗两方,让其都发给你的机器再由你的机器转发,相当于做中间人,这用A即加上编程很容易实现。并且现在很多设备支持远程管理,有很多交换HUB可以设置一个口监听别的口,不过这需要管理权限。利用这一点,可以将一台计算机的网络连接设置为接受所有以太网总线上的数据,从而实现Sniffer。Sniffer就是一种能将本地网卡状态设成“混杂”状态的软件,当网卡处于这种“混杂”模式时,该网卡具备“广播地址”,它对遇到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该网卡上的每一个数据包(绝大多数的网卡具备置成混杂模式的能力)。可见,sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。所以我们在设计网络计费系统时,可以采用嗅探技术来获取网络上传送的数据包,进而对此进行分析,得到需要的计费信息。3.数据包的分析从包获取类中捕获的数据包是数据链路层的帧,而数据在网络中传递时是分层依次封装的,因此需要从链路层协议开始进行分析,一直到应用层的协议。首先我们来看看互联网协议分层模型。3.1分层协议ISO的OSI(开放系统互联模型)是分层的,各层功能分离,对其他层次是透明,可独立设计、实现和测试的。通过SAP(Service Access Point)为上层提供服务。OSI分7层,其它具体的协议栈都与OSI相对应。下表3.1所示为OSI七层协议与TCP/IP栈各层功能对应。应用层在程序之间传递信息表示层处理文本格式化,显示代码转换会话层建立、维持、协调通信传输层确保数据正确发送网络层决定传输路由,处理信息传递数据链路层编码、编址、传输信息物理层管理硬件连接应用层Telnet,SNMP,FTP,HTTP,SNTP传输层TCP,UDP网络层IP,ICMP,IGMP链路层Ethernet,ARP,RARPOSI模型各层功能总结 TCP/IP各层功能总结 表3.1通常,数据在协议栈中传递时,每一层在把数据传送到低一层之前都往头部加入一些附加信息。因此,在网络中传输的帧包含了一系列嵌套的头部。数据在协议栈中的传输过程图示如下:图3.1在通常的以太网络中,使用TCP/IP协议栈,下面我们依次介绍封装的各层信息。3.1.1数据链路帧在数据链路层,可以获得以太网的头部,以太网的头部长度为14字节,分别由6字节的目的以太网地址(琳C)地址、6字节的源以太网地址及2字节的帧类型组成。如表3.2:同步字(8)目的MAC(6)源MAC(6)类型(2)数据(461500)CRC(4)表3.2其中同步字与CRC由硬件产生,由此可定义帧结构为:#define ETH_ALEN 6 /以太网地址位数Struct ether_headerunsigned char h_destETH_ALEN; /目的地址unsigned ehar h_sourceETH_ALEN; /源地址unsigned short h_Proto; /帧类型;帧类型给出了该数据帧中所包含的协议类型,如ARP、RARP、IP、IPX等,它们对应的协议号分别为(十六进制):0806、8035、0800、8137,其中ARP与RARP为数据链路层协议,而IP和IPX为网络层协议。在本系统中,将对这些协议进行识别,但主要对IP(0800)和ARP(0806)协议做进一步的分析。3.1.2 ARP 数据包ARP协议用于将IP地址转换为MAC地址,RFC826给出的ARP标准只描述了ARP消息的通用形式,并规定了对每类网络硬件怎样确定细节。之所以要使A即消息适合于硬件,是由于ARP消息含有硬件地址域,ARP的设计者意识到他们无法为硬件地址域选择一个固定的尺寸,因为新的网络技术不断涌现,使它们的地址尺寸越来越大。所以,在设计ARP消息的开始处引入了一个固定大小的域,这一域对消息所使用的硬件地址尺寸做了规定。例如,当在以太网中使用ARP时,硬件地址长度定为六个字节,因为一个以太网地址是48位长。为了增加ARP的通用性,设计者同硬件地址一样为协议地址引入一个地址长度域。因此ARP不限于IP地址或特定的物理地址一从理论上说,该协议也可以用于一个任意的高层地址和一个任意的硬件地址的联编。但实际上,ARP的通用性并没有充分使用,大部分ARP用于IP地址和以太网地址的联编。0 15 31硬件地址空间协议地址空间硬件地址长度协议地址长度操作代码表3.3这8个字节即为了通用而定义的地址类型位,下面接着为源硬件地址、协议地址,目的硬件地址、协议地址。操作代码域规定了此消息是请求(值为l)还是应答(值为2)。10由此定义ARP包结构如下:Struct arphdrunsigned short ar_hrd /format of hardware addressunsigned short ar_pro /format of protocol addressunsigned char ar_hln /length of hardware addressunsigned char ar_pln /length of protocol addressunsigned short ar_op /ARP opcode (command);Struct ether_arpstruct arphdr ea_hdr; /fixed-size headeru_char arp_shaETH_ALEN; /sender hardware addressu_char arp_spa 4; /sender protocol addressu_char arp_thaETH_ALEN; /target hardware addressu_char arp_tpa 4; /target protocol address;#define arp_hrd ea_hdr.ar_hrd#define arp_pro ea_hdr.ar_pro#define arp_hln ea_hdr.ar hln#define arp_p1n ea_hdr.ar_pln#define arp_op ea_hdr.ar_op3.1.3 IP数据报根据RFC791里的定义,没有选择项时,1P包头的长度为20字节,主要包含以下内容:源IP地址、目的IP地址、分片标志和偏移、及IP负载的协议类型(长度为l字节)。IP包内的协议类型指明该IP包负载的协议类型,即TCP、UDP或ICMP,其协议号分别为6、17和1。IP协议格式如下:0 15 31版本4头长4服务类型8总长16标识16标志3片偏移13生存周期8协议(号)8头标校验和16源IP地址32目的IP地址32数据选择项(可变)032填充项数据表3.4 IP数据报头部里的每个域都有固定的大小。数据报以4位的协议版本号(当前版本号4)和4位的头部长度开始,头部长度指出以32位字长为单位的头部长度。服务类型(SERVICE TYPE)域包含的值指明发送方是否希望以一条低延迟的路径或是以一条高吞吐率的路径来传送该数据报,当一个路由器知道多条通往目的地的路径时,就可以靠这个域对路径加以选择。总长(TOTAL LENGTH)域为16位的整数,说明以字节计的数据报总长度,包括头部长度和数据长度。标识(IDENTIFICATION)域用于标识数据单元的地址即分片号,由发送方入。当一个路由器对一个数据报分段时,就会将这一标识数复制到每一段中,接收方就可利用收到的段的标识数和IP源地址来确定该段属于那个数据报。标志域3位,用了2位,标识数据源是否分片,片是否结束(0:片未完,1:不分片,2:不用)。另外,段偏移(FRAGMENT OFFSET)域可以告诉接收方各段的次序。生存周期(TIME TO LIVE)域用来阻止数据报在一条包含环路的路径上永远地传送。当软件发生故障或管理人员错误地配置路由器时,就会产生这样的路径。发送方负责初始化生存时间域,这是一个从1到255之间的整数。每个路由器处理数据报时,会将头部里的生存时间减1,如果达到0,数据报将被丢弃,一个出错消息被发回给源主机。头部校验和(HEADER CHECKSUM)域确保头部在传送过程中不被改变。发送方对除了校验和域的头部数据每16位对1求补,所有结果累加,并将和的补放入头部校验和域中。接收方进行同样计算,但包括了校验和域。如果校验和正确,则结果应该为0(数学上,1的求补是一个逆加,因此将一个值加到它自身的补上将得到零)。10由此我们可定义IP头结构:struct iphdru_char ip_hl:4; /头长ip_v:4; /版本u_char ip_tos; /服务类型short ip_len; /总长u_short ip_id; /标识short ip_off; /段偏移#define IP_RF 0x8000 /reserved fragment flag#define IP_DF 0x4000 /dont fragment flag#define IP_MF 0x2000 /more fragments flag#define IP_OFFMASK Oxlfff /mask for fragmenting bits u_char ip_ttl; /生存周期 u_char ip_p; /协议 u_short ip_sum; /校验和 struct in_addr ip_ src,ip_dst; /源、目的IP地址;3.1.4 TCP 数据报TCP协议对应于150/051参考模型的第4层即“传输层”,实现端对端即主机到主机的通信。它是TCP/1P协议系列中主要的传输协议,为应用程序提供了一个可靠的、可流控的、全双工的流传输服务。在请求TCP建立一个连接之后,一个应用程序能使用这一连接发送和接收数据,TCP确保数据按序传递而无重复。最终,当两个应用结束使用一个连接时,它们请求终止连接。TCP对所有的消息采用了一种简单的格式,包括携带数据的消息、确认以及三次握手中用于创建和终止一个连接的消息。TCP使用段(segment)来指明一个消息,RFC793文档里定义的段格式如下:0 15 31源端口16目的端口16序号32确认号32偏移4保留6代码位6窗口16校验和16紧急指针16数据选择项(可变)032填充项数据表3.5当一台计算机发送一个段的时候,确认号(ACKNOWLEDGMENT NUMBER)和窗口(WINDOW)域指的是输入的数据:确认号指定了收到数据的序号,窗口指定了还剩多少缓冲区空间。序号(SEQUENCE NUMBER)域指的是输出数据,它给出了段中携带数据的序号。接收方利用这一序号来重排乱序到达的段并利用这一序号计算确认号。目的端口(DESTINATIONPORT)域指出接收方计算机上的哪一个应用程序负责接收数据,源端口(SOURCE PORT)域指明发送数据的应用程序。最后,校验和(CHECKSUM)域含有一个TCP段头和数据的校验和.10代码位有六个标志,从左到右为:URG、ACK、PSH、RST、SYN、FIN,它们很好地反应了TCP连接的状态,比如TCP连接总是通过在通信双方交换SYN包来开始建立新连接,而通过FIN、RST来终止一个连接,根据TCP包的源和目的端口号可以得到该包的应用类型,比如TELNET的应用端口为23,EMAIL的端口为25等。由此我们可定义TCP头结构:struct tcphdru_short th_sport; /source portu_short th_dport; /destination portlong th_seq; /sequence numberlong th_ack; /acknowledgement numberu_char th_off:4; /data offsetth_x2:4; /(unused)u_char th_flags;#define TH_FIN 0x01#define TH_SYN 0x02#define TH_RST 0x04#define TH_PSH 0x08#define TH_ACK 0x10#define TH_URG 0x20u_short th_win; /windowu_short th_sum; /checksumu_short th_urp; /urgent pointer;3.1.5 UDP数据报UDP(User Datagram Protocol)是面向无连接的传输协议。RFC768里定义UDP报头结构如下:0 15 31源端口目的端口长度校验和表3.6从UDP的端口号中也可以看出对应的应用层服务,如DNS对应端口号为53。定义UDP报头结构如下: struct udphdrunsigned short source;unsigned short Best;unsigned short len;unsigned short check;3.1.6 ICMP 报文ICMP(Internet Control Message Protocol)是专门用于发送差错报文的协议。ICMP使用IP来传送每一个差错报文。当路由器有一个ICMP报文要传递时,它会创建一个IP数据报并将ICMP报文封装其中。也就是说,ICMP报文被置于IP数据报的数据区中。在我们的计费系统中,记录ICMP报文的意义不大,所以在本文中不再做具体叙述。3.2系统中数据包处理的实现为了计费的需要,我们对数据包进行分析处理,提取必须的信息,存入数据库,供计费子模块调用。在进行处理之类,我们先定义一参数类Tsnifflnfo,用于存储提取的信息。参数类Tsnifflnfo的成员如下:模 式成员及函数说 明publicTsniffInfo(); 构造函数 publicTsniffInfo();析构函数 publicTime_t StartTime获包时间 publicChar *DestMac 目的MAC地址 publicChar *SourMac 源MAC地址 publicChar *DestIp 目的IP地址 publicChar *SourIp 源IP地址 publicvInt DestPort 目的端口号 publicInt SourPort 源端口号 publicChar *ProtType 协议类型 publicInt flux 数据大小,流量表3.7处理模块也封装为类,包处理Thandle类的主要成员及函数如下:模 式成员及函数说 明public THandle(const struct pcap_pkthdr* pkthdr, const u_ char* packet);构造函数public THandle(); 析构函数public void StartHandle(); 开始处理public u_int16_ t handle_ethernet(); 处理以太网帧头public u_char* handle_ ARP(); 处理ARP包public u_char* handle_IP(); 处理IP包public u_char* handle_TCP(); 处理TCP数据报public u_char* handle_UDP(); 处理UDP数据报public u_char* handle_ICMP(); 处理ICMP包private TsniffInfo* m_SniffInfo; 信息值private const u_char* m_packet; 嗅探到的包private const struct pcap_pkthdr* pkthdr; 包描述表3.84.基于Winpcap的数据包获取实现Winpcap是一个重要的抓包工具,它是libpcap的Windows版本。利用它所提供的库函数可以很方便的实现数据链路层的数据帧的获取。在给出winpcap之前,先来介绍一下libpcap及包过滤基础BPF。4.1 BPFBPF是BSD Packet Filter的简称,它是基于系统内核的包过滤器,可以将系统要获取的数据包按照用户事先设定的规则进行过滤,这样可以极大地提高系统获取数据包的效率,减少丢包现象的发生。通常网卡驱动程序接收到一个数据包后,将其提交给系统的协议栈。如果有进程用BPF进行网络侦听,网卡驱动程序会
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目考试题库及答案解析
- 西游记考试题目及答案
- 汽修对口考试题库及答案
- 模考试题及答案
- 美国考试题及答案
- 街道社工考试题及答案
- 剑桥2级考试题型及答案
- 支教心理测试题目及答案
- 证券市场面试题库及答案
- 2025年远程医疗平台搭建项目可行性分析报告
- 中外动画史笔记
- 抹灰安全技术操作规程
- 勋章的歌词鹿晗
- 2022-2023学年甘肃省酒泉市敦煌市六年级下学期小升初精选数学试卷含答案
- 中国医疗美容机构模块化管理手册
- 湖北省襄阳市樊城区2022-2023学年数学六下期末检测试题含解析
- 2022-2023学年仙桃市六年级数学第二学期期末学业质量监测试题含解析
- 旅游项目开发流程及旅游项目开发的标准流程
- 产业经济学期末考试试题
- 在集体游戏中提升小班幼儿合作意识的策略研究 论文
- 海洋石油安全管理细则-25号令(新修改)
评论
0/150
提交评论