欢迎来到天天文库
浏览记录
ID:31859253
大小:301.50 KB
页数:29页
时间:2019-01-22
《网络的计费系统的实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
实用标准文案摘要基于数据链路层的网络计费方式中关键的技术在于链路层数据包的捕获及分析。首先,本文介绍了用于数据包捕获的网络嗅探技术的工作原理,并给出应用winpcap实现数据包获取类的设计。然后在介绍了分层网络数据包的类型及结构的基础上,给出数据包分析处理类的设计。分析出的有用信息存于参数类中记录入数据库,供计费模块所用。关键词:包捕获;网络嗅探器;winpcap;包分析精彩文档 实用标准文案AbstractThekeytechnologyofnet-chargingbasedondata-linkLayeristhecaptureandanalysisofdataframe.Firstly,thepaperintroducestheprincipleofsniffertechnologytocapturedatapacketsandpresentsthedesignofpacketcaptureclass.Then,Itintroducesthetypesandstructuresofpacketsandpresentsthedesignofpacketanalysisclass.Beingadoptedinthenet-chargingmodule,theusefulinformationinparameterclassarestoredintothedatabasesystem.Keywords:Capture;Sniffer;Winpcap;Analysis精彩文档 实用标准文案目录1.绪论11.1问题的提出11.2网络计费方式11.3本文研究内容31.4本文的组织32.网络嗅探的工作原理42.1基础知识52.1.1以太网络的工作原理52.1.2以太网卡工作模式及原理62.1.3HUB工作原理62.1.4局域网如何工作72.2Sniffer原理83.数据包的分析103.1分层协议103.1.1数据链路帧113.1.2ARP数据包123.1.3IP数据报133.1.4TCP数据报143.1.5UDP数据报163.1.6ICMP报文163.2系统中数据包处理的实现174.基于Winpcap的数据包获取实现184.1BPF184.1.1Libpcap194.1.2Libpcap函数库框架194.2Winpcap204.2.1winpcap结构分析204.2.2wpcap.dll库函数介绍22结论23致谢24精彩文档 实用标准文案参考文献25精彩文档 实用标准文案1.绪论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)基于防火墙的网络计费系统:有些防火墙产品带有流量统计功能,因此也可以利用防火墙的监控记录进行流量统计,进而实现计费管理。实现专线网络计费有多种方式,选择何种方式应该根据各单位的实际情况。总的说来,网络计费系统应该结合各单位的网络结构整体设计。以上几种方法各有利弊,不免有些缺憾。由此提出了一种新的方案:基于数据链路层的网络流量计费方案。为了增加流量统计的精确度,被统计的对象应尽量接近于ISO7层模型的低层,数据链路层(第二层)是合理的位置。这种方法利用了以太网的广播传输特性,使以太网卡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)。[14]Ethernet的核心技术就是载波侦听/冲突检测(CSMA/CD,carriersensemultipleaeeesswithcollisiondeteetion)技术。所谓载波侦听是指在网络中的每个站点都具有同等的权利,在传输自己的数据时,首先监听信道是否空闲;如果空闲,就传输自己的数据;如果信道被占用,就等待信道空闲。而冲突检测则是为了防止发生两个站点同时监侧到网络没有被使用时而产生冲突;以太网采用了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.3HUB工作原理由于以太网等很多网络(常见共享HUB连接的内部网)是基于总线方式,物理上是广播的,就是当一台机器发给另外一台机器的数据,共享HUB先收到然后把它接收到的数据再发给其他的(来的那个机器不发了)每一台机器,所以在共享HUB下面同一网段的所有机器的网卡都能接收到发来的数据。精彩文档 实用标准文案交换式HUB的内部单片程序能记住每台机器的网卡的掀C地址,以后该哪台机器接收就发往哪台机器,而不是像共享HUB那样发向所有的机器,所以交换HUB下只有该接收数据的机器的网卡能接收到数据,当然广播包还是发往所有机器。显然共享HUB的工作模式使得两台机器传输数据的时候其他机器的网卡也被占用了,所以共享HUB决定了同一网段同一时间内只能有两台机器进行数据通信,而交换式HUB两台机器传输数据的时候别的网卡没有被占用,所以别的网卡之间也可以同时传输。这就是共享HUB与交换阴B不同的两个地方,共享HUB是同一时间只能一台机器发送数据并且所有的机器都可以接收,而只要不是广播数据,交换现B同一时间可以有多对机器进行数据传输并且数据是私有的。[13]2.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.2Sniffer原理有了前面的网络基本知识和以太网、网卡及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(ServiceAccessPoint)为上层提供服务。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)数据(46—1500)CRC(4)表3.2其中同步字与CRC由硬件产生,由此可定义帧结构为:#defineETH_ALEN6//以太网地址位数Structether_header{unsignedcharh_dest[ETH_ALEN];//目的地址unsignedeharh_source[ETH_ALEN];//源地址unsignedshorth_Proto;//帧类型};帧类型给出了该数据帧中所包含的协议类型,如ARP、RARP、IP、IPX等,它们对应的协议号分别为(十六进制):0806、8035、0800、8137,其中ARP与RARP为数据链路层协议,而IP和IPX为网络层协议。在本系统中,将对这些协议进行识别,但主要对IP(0800)和ARP(0806)协议做进一步的分析。精彩文档 实用标准文案3.1.2ARP数据包ARP协议用于将IP地址转换为MAC地址,RFC826给出的ARP标准只描述了ARP消息的通用形式,并规定了对每类网络硬件怎样确定细节。之所以要使A即消息适合于硬件,是由于ARP消息含有硬件地址域,ARP的设计者意识到他们无法为硬件地址域选择一个固定的尺寸,因为新的网络技术不断涌现,使它们的地址尺寸越来越大。所以,在设计ARP消息的开始处引入了一个固定大小的域,这一域对消息所使用的硬件地址尺寸做了规定。例如,当在以太网中使用ARP时,硬件地址长度定为六个字节,因为一个以太网地址是48位长。为了增加ARP的通用性,设计者同硬件地址一样为协议地址引入一个地址长度域。因此ARP不限于IP地址或特定的物理地址一从理论上说,该协议也可以用于一个任意的高层地址和一个任意的硬件地址的联编。但实际上,ARP的通用性并没有充分使用,大部分ARP用于IP地址和以太网地址的联编。01531硬件地址空间协议地址空间硬件地址长度协议地址长度操作代码表3.3这8个字节即为了通用而定义的地址类型位,下面接着为源硬件地址、协议地址,目的硬件地址、协议地址。操作代码域规定了此消息是请求(值为l)还是应答(值为2)。[10]由此定义ARP包结构如下:Structarphdr{unsignedshortar_hrd//formatofhardwareaddressunsignedshortar_pro//formatofprotocoladdressunsignedcharar_hln//lengthofhardwareaddressunsignedcharar_pln//lengthofprotocoladdressunsignedshortar_op//ARPopcode(command)};Structether_arp{structarphdrea_hdr;//fixed-sizeheaderu_chararp_sha[ETH_ALEN];//senderhardwareaddressu_chararp_spa[4];//senderprotocoladdress精彩文档 实用标准文案u_chararp_tha[ETH_ALEN];//targethardwareaddressu_chararp_tpa[4];//targetprotocoladdress};#definearp_hrdea_hdr.ar_hrd#definearp_proea_hdr.ar_pro#definearp_hlnea_hdr.arhln#definearp_p1nea_hdr.ar_pln#definearp_opea_hdr.ar_op3.1.3IP数据报根据RFC791里的定义,没有选择项时,1P包头的长度为20字节,主要包含以下内容:源IP地址、目的IP地址、分片标志和偏移、及IP负载的协议类型(长度为l字节)。IP包内的协议类型指明该IP包负载的协议类型,即TCP、UDP或ICMP,其协议号分别为6、17和1。IP协议格式如下:01531版本4头长4服务类型8总长16标识16标志3片偏移13生存周期8协议(号)8头标校验和16源IP地址32目的IP地址32数据选择项(可变)0——32填充项数据表3.4IP数据报头部里的每个域都有固定的大小。数据报以4位的协议版本号(当前版本号4)和4位的头部长度开始,头部长度指出以32位字长为单位的头部长度。服务类型(SERVICETYPE)域包含的值指明发送方是否希望以一条低延迟的路径或是以一条高吞吐率的路径来传送该数据报,当一个路由器知道多条通往目的地的路径时,就可以靠这个域对路径加以选择。总长(TOTALLENGTH)域为16位的整数,说明以字节计的数据报总长度,包括头部长度和数据长度。标识(IDENTIFICATION)域用于标识数据单元的地址即分片号,由发送方入。当一个路由器对一个数据报分段时,就会将这一标识数复制到每一段中,接收方就可利用收到的段的标识数和IP源地址来确定该段属于那个数据报。标志域3位,用了2位,标识数据源是否分片,片是否结束(0:片未完,1:不分片,2:不用)。另外,段偏移((FRAGMENTOFFSET)域可以告诉接收方各段的次序。生存周期(TIMETO精彩文档 实用标准文案LIVE)域用来阻止数据报在一条包含环路的路径上永远地传送。当软件发生故障或管理人员错误地配置路由器时,就会产生这样的路径。发送方负责初始化生存时间域,这是一个从1到255之间的整数。每个路由器处理数据报时,会将头部里的生存时间减1,如果达到0,数据报将被丢弃,一个出错消息被发回给源主机。头部校验和(HEADERCHECKSUM)域确保头部在传送过程中不被改变。发送方对除了校验和域的头部数据每16位对1求补,所有结果累加,并将和的补放入头部校验和域中。接收方进行同样计算,但包括了校验和域。如果校验和正确,则结果应该为0(数学上,1的求补是一个逆加,因此将一个值加到它自身的补上将得到零)。[10]由此我们可定义IP头结构:structiphdr{u_charip_hl:4;//头长ip_v:4;//版本u_charip_tos;//服务类型shortip_len;//总长u_shortip_id;//标识shortip_off;//段偏移#defineIP_RF0x8000//reservedfragmentflag#defineIP_DF0x4000//dontfragmentflag#defineIP_MF0x2000//morefragmentsflag#defineIP_OFFMASKOxlfff//maskforfragmentingbitsu_charip_ttl;//生存周期u_charip_p;//协议u_shortip_sum;//校验和structin_addrip_src,ip_dst;//源、目的IP地址};3.1.4TCP数据报TCP协议对应于150/051参考模型的第4层即“传输层”,实现端对端即主机到主机的通信。它是TCP/1P协议系列中主要的传输协议,为应用程序提供了一个可靠的、可流控的、全双工的流传输服务。在请求TCP建立一个连接之后,一个应用程序能使用这一连接发送和接收数据,TCP确保数据按序传递而无重复。最终,当两个应用结束使用一个连接时,它们请求终止连接。精彩文档 实用标准文案TCP对所有的消息采用了一种简单的格式,包括携带数据的消息、确认以及三次握手中用于创建和终止一个连接的消息。TCP使用段(segment)来指明一个消息,RFC793文档里定义的段格式如下:01531源端口16目的端口16序号32确认号32偏移4保留6代码位6窗口16校验和16紧急指针16数据选择项(可变)0——32填充项数据表3.5当一台计算机发送一个段的时候,确认号(ACKNOWLEDGMENTNUMBER)和窗口(WINDOW)域指的是输入的数据:确认号指定了收到数据的序号,窗口指定了还剩多少缓冲区空间。序号(SEQUENCENUMBER)域指的是输出数据,它给出了段中携带数据的序号。接收方利用这一序号来重排乱序到达的段并利用这一序号计算确认号。目的端口(DESTINATIONPORT)域指出接收方计算机上的哪一个应用程序负责接收数据,源端口(SOURCEPORT)域指明发送数据的应用程序。最后,校验和(CHECKSUM)域含有一个TCP段头和数据的校验和.[10]代码位有六个标志,从左到右为:URG、ACK、PSH、RST、SYN、FIN,它们很好地反应了TCP连接的状态,比如TCP连接总是通过在通信双方交换SYN包来开始建立新连接,而通过FIN、RST来终止一个连接,根据TCP包的源和目的端口号可以得到该包的应用类型,比如TELNET的应用端口为23,EMAIL的端口为25等。由此我们可定义TCP头结构:structtcphdr{u_shortth_sport;//sourceportu_shortth_dport;//destinationportlongth_seq;//sequencenumberlongth_ack;//acknowledgementnumberu_charth_off:4;//dataoffsetth_x2:4;//(unused)u_charth_flags;#defineTH_FIN0x01#defineTH_SYN0x02精彩文档 实用标准文案#defineTH_RST0x04#defineTH_PSH0x08#defineTH_ACK0x10#defineTH_URG0x20u_shortth_win;//windowu_shortth_sum;//checksumu_shortth_urp;//urgentpointer};3.1.5UDP数据报UDP(UserDatagramProtocol)是面向无连接的传输协议。RFC768里定义UDP报头结构如下:01531源端口目的端口长度校验和表3.6从UDP的端口号中也可以看出对应的应用层服务,如DNS对应端口号为53。定义UDP报头结构如下:structudphdr{unsignedshortsource;unsignedshortBest;unsignedshortlen;unsignedshortcheck;};3.1.6ICMP报文ICMP(InternetControlMessageProtocol)是专门用于发送差错报文的协议。ICMP使用IP来传送每一个差错报文。当路由器有一个ICMP报文要传递时,它会创建一个IP数据报并将ICMP报文封装其中。也就是说,ICMP报文被置于IP数据报的数据区中。在我们的计费系统中,记录ICMP报文的意义不大,所以在本文中不再做具体叙述。3.2系统中数据包处理的实现精彩文档 实用标准文案为了计费的需要,我们对数据包进行分析处理,提取必须的信息,存入数据库,供计费子模块调用。在进行处理之类,我们先定义一参数类Tsnifflnfo,用于存储提取的信息。参数类Tsnifflnfo的成员如下:模式成员及函数说明publicTsniffInfo();构造函数public~TsniffInfo();析构函数publicTime_tStartTime获包时间publicChar*DestMac目的MAC地址publicChar*SourMac源MAC地址publicChar*DestIp目的IP地址publicChar*SourIp源IP地址publicvIntDestPort目的端口号publicIntSourPort源端口号publicChar*ProtType协议类型publicIntflux数据大小,流量表3.7处理模块也封装为类,包处理Thandle类的主要成员及函数如下:模式成员及函数说明publicTHandle(conststructpcap_pkthdr*pkthdr,constu_char*packet);构造函数publicTHandle();析构函数publicvoidStartHandle();开始处理publicu_int16_thandle_ethernet();处理以太网帧头publicu_char*handle_ARP();处理ARP包publicu_char*handle_IP();处理IP包publicu_char*handle_TCP();处理TCP数据报publicu_char*handle_UDP();处理UDP数据报publicu_char*handle_ICMP();处理ICMP包privateTsniffInfo*m_SniffInfo;信息值privateconstu_char*m_packet;嗅探到的包privateconststructpcap_pkthdr*pkthdr;包描述表3.84.基于Winpcap的数据包获取实现Winpcap是一个重要的抓包工具,它是lib精彩文档 实用标准文案pcap的Windows版本。利用它所提供的库函数可以很方便的实现数据链路层的数据帧的获取。在给出winpcap之前,先来介绍一下libpcap及包过滤基础BPF。4.1BPFBPF是BSDPacketFilter的简称,它是基于系统内核的包过滤器,可以将系统要获取的数据包按照用户事先设定的规则进行过滤,这样可以极大地提高系统获取数据包的效率,减少丢包现象的发生。通常网卡驱动程序接收到一个数据包后,将其提交给系统的协议栈。如果有进程用BPF进行网络侦听,网卡驱动程序会先调用BPF,复制一份数据给BPF的过滤器,过滤器则根据用户定义的规则决定是否接收此数据包。再判断这个数据包是否是发给本机的,如果不是发给本机的,则网卡驱动程序从中断返回,继续接收数据:如果这个数据包是发给本机的,驱动程序会再把它提交给系统的协议栈,然后返回。BPF工作机制如图4.1所示:BPF网络监测器过滤器缓冲区过滤器其他应用缓冲区过滤器TCP/IP等网络协议栈缓冲区网络应用Libpcap数据链路层驱动程序数据链路层驱动程序用户空间内核内核网络图4.1BPF结构原理UNIX精彩文档 实用标准文案系统严格区分核心地址空间和用户地址空间,用户的应用进程不能访问核心地址空间。由于网络监测器作为用户层进程运行,而网卡驱动程序工作在核心地址空间中,所以要提供用户层的接口就要把数据从核心地址空间复制到用户地址空间,这样做系统负担很大,当网络太忙或机器速度太慢时会发生丢包。为改进性能出现了包缓冲和包过滤机制。在SunOS的NIT中,收集来的数据包先复制到过滤器的缓冲区中,再进行过滤,故不论用户进程是否需要,每个数据包至少要作一次内存复制。Linux的SOCK_PACKET不作任何缓冲,且无内核过滤,在网络负载较大时效率很低。BPF在核心设置了过滤器,在核心中及早对数据包进行过滤,只将用户需要的数据提交给用户进程,减少了数据传送量。每个BPF都有一个缓冲区,如果过滤器判断接收某个数据包,BPF就将它复制到相应的缓冲区中暂存起来,等收集到足够多的数据后再一起提交给用户进程,这样就减少了“read”系统调用,提高了效率。BPF还改进了过滤方式。目前基本的过滤规则表达方式有两种:一种是布尔表达树,另一种是BPF使用的有向无圈控制流图(DirectedAcyclicControlFlowGraph简称CFG)。树型过滤器的设计是围绕一个基于栈的过滤求值程序,它把控制规则布尔表达式及相关数据先压入栈,再逐步弹出,并计算结果。而BPF使用基于寄存器的过滤求值程序,比树型过滤器的快20倍。BPF还使用了一种简单的缓冲策略,使得在同一硬件上BPF的性能较SUN的NIT快约100倍。BPF过滤器和缓冲器是经过优化的,用户可用BIOCSBLENioctl()增加缓冲区长度。[4]4.1.1Libpcaplibpcap(PacketCapturelibrary)是劳伦斯伯克利国家实验室网络研究组开发的unix平台上的一个包捕获函数库,其源代码可从网络(http://sourceforge.net/projects/libpcap)中得到。它是一个独立于系统的用户层包捕获的API接口,为低层网络监测提供了一个可移植的框架。libpcap为用户级的数据包获取提供了一个系统无关的统一平台,目前己经支持WindowsNT和各种UNIX平台如Soliaris,Linux,FreeBSD等。另外,Libpcap支持基于BPF体系的过滤机制(虽然也有其他支持内核过滤的包捕获接口),目前仅对BPF使用内核过滤,在没有BPF的系统中,所有的数据包都会被读入用户空间。Libpcap被广泛应用于网络统计软件、入侵检测系统及网络调试中。4.1.2Libpcap函数库框架精彩文档 实用标准文案libpcap包捕获函数库提供的C函数接口可用于需要捕获经过网络接口(通过将网卡设置为混杂模式,可以捕获所有经过该接口的数据报,目标地址不一定为本机)数据包的系统开发上。著名的TCPDUMP就是在libpcap的基础上开发而成的。libpcap提供的接口函数主要实现和封装了与数据包截获有关的过程。这个库为不同的平台提供了一致的编程接口,在安装了libpcap的平台上,以libpcap为接口写的程序,能够自由的跨平台使用。在Linux系统下,libpcap可以使用BPF(BerkeleyPacketFilter)分组捕获机制来获得很高的性能。Libpcap与BPF的框架如下:[11]图4.24.2WinpcapWindows平台下内核本身没有提供标准的接口,需要通过增加一个驱动程序或者网络组件来访问内核网卡驱动提供的数据包。Winpcap就是windows平台下的一种抓包技术,它提供了一套标准的抓包接口,与libpcap兼容,可使得原来许多UNIX平台下的网络分析工具快速移植过来,便于开发各种网络分析工具。我们在开发网络计费软件的时候,为统计网络流量,包的捕获就采用winpcap函数库来实现。另外,winpcap除了与libpcap兼容的之外,还充分考虑了各种性能和效率的优化,包括对于NPF内核层次上的过滤器支持,支持内核态的统计模式。而且提供了发送数据包的能力和网络数据包的解析功能,可以结合网络协议栈的结构来设计。4.2.1winpcap结构分析Winpcap是由意大利人FulvioRisso和LorisDegio2anni等人提出并实现的它的主要思想来源于Unix系统中最著名的BSD包捕获架构。Winpcap由三个模块组成,其基本结构如图所示。[11]精彩文档 实用标准文案图4.3第一个模块是工作在内核级的NPF(NetgroupPacketFilter)包过滤器,是一个虚拟设备驱动程序文件,是架构的核心(在Win95&98中是一个VXD文件,在NT&2000中是一个SYS文件)。它的功能是过滤数据包,并在包上附加时间戳、数据包长度等信息后把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作系统特有的代码。NPF过滤引擎演化自BPF,是一个整合有简单指令集的虚拟处理器,它能对通用缓冲器(数据包栈)执行一些简单字节操作。它同其它过滤器一样,基本原理是相同的。第二个模块为工作在用户级的动态链接库packet.dll,在Win32平台上提供了与NPF的一个通用接口。不同版本的Windows系统都有自己的内核模块和用户层模块,Packet.dll用于解决这些不同,直接映射了内核的调用。基于packet.dll的应用程序可以在没有重新编译的情况下用于不同的Win32平台Windows95&98,WindowsNT&20000Packet.dll还有几个附加功能,它可用来取得适配器名称、动态驱动器加载以及获得主机掩码及以太网冲突次数等。第三个模块也是工作在用户级,为Wpcap.dll模块。它是通过调用packet.dll提供的函数生成的,它包括了过滤器生成等一系列可以被用户级调用的高级函数,另外还有诸如数据包统计及发送功能。它是不依赖于操作系统的,提供了更加友好、功能更加强大的函数调用。精彩文档 实用标准文案整个包捕获架构的基础是NDIS网络驱动器接口规范),它是Windows中最低端的与连网有关的软件,主要是为各种应用协议与网卡之间提供的一套接口函数,包驱动器的tap函数就是通过调用这些函数实现其数据采集功能的。4.2.2wpcap.dll库函数介绍wpcap.dll为包捕获应用提供了一个高级的接口程序,它是从Libpcap发展而来并且相互兼容,所以libpcap.dll包含了所有Libpcap具有的函数。另外,由于它还增加了统计及数据包发送功能,所以还增加了以下的函数:pcap_setbuff:该函数用来设置包驱动器缓冲器的大小,一个适当大小的缓冲器不仅可以减少丢包率,还可以提高包捕获的速度。pcap_setmode:该函数可把网络适配器设置为统计方式。pcap_stats:这个函数用于获得包捕获过程的统计数据。Wpcap为了要与硬件接口,还直接调用了Packet.dll提供的函数。另外,以下是Wpcap.dll和Libpcap中共有的几个主要的函数:pcap_open_live:这是最重要的一个函数。首先,它打开网络适配器,把网卡设置成“混杂”模式,使它能够接收来自网络的所有数据包;其次,它为应用程序设置一个缺省大小为256kB的缓冲器;最后,它为包捕获驱动器分配一个缺省为1MB的内核缓冲器,用户以后可以根据需要,改变该缓冲器的大小。pcap_read:这个函数从包捕获驱动器中读取一组数据包并针对每一个包运行包过滤程序,然后把过滤后的数据送应用程序缓冲器。pcap_setfilter:该函数在包捕获驱动器中设置一个新的包过滤器。过滤器程序则在一个名为bpf_program的结构中定义。pcap_loop:该函数可以连续读取并处理指定数目的包,对每个包进行相关的处理,处理程序名由所带参数指定,如果指定的数目为0,则处理到包捕获过程的结束或者遇到了某个错误。结论精彩文档 实用标准文案本文通过分析当前使用的几种网络计费方式的优缺点,提出基于数据链路层的网络计费方式。要实现基于数据链路层的网络计费方式,最关键的问题在于数据链路层数据帧的获取及对获取的数据包的分析处理。数据包的获取实现中,首先本文具体分析了此方式中实现数据包获取的关键技术网络嗅探(sniffer)的工作原理。随后对实现sniffer技术的函数库libpcap和winpcap进行了详细讲解,并给出基于winpcap的数据包获取实现。在给出数据包的分析处理实现代码前,本文详细介绍了各层协议头的结构,那么具体的实现迎刃而解。为计费系统提供基础数据,需要将提取的信息(时间,源、目的地址,流量等)存入数据库中,这可以设计一通用的ODBC接口,本文不作具体详述。本文讨论的数据包获取主要是在共享式网络上的实现,系统要进入实施,需进一步实现于交换网络,基于交换网络的嗅探也有很多方法:(1)对交换机实行端口映射,将该端口的数据包全部映射到某个sniffer机器(2)在交换机和路由器之间连接一个HUB,这样数据将以广播的方式发送。(3)实行ARP欺骗,不过这样会降低整个局域网的效率。在系统后面的实现中会选择比较好的方式来进行。另外本文对数据包的分析也只进行到传输层,以后将进一步分析至应用层,可对常用的一些应用进行分析,如FTP、EMAIL、TELNET、HTTP等,从而对应用协议有一个更深入的了解,也给按内容进行计费提供一定的基础。致谢精彩文档 实用标准文案本论文的顺利完成,得益于指导老师董唯光副教授的细心指导和关怀,他为我指明了课题方向,并推荐了大量的文献让我阅读。在毕业设计和论文的撰写过程中,他还给了我许多具体建议,解决了我相当多技术难题。在此,我特对董老师致以诚挚的谢意。另外向所有在论文写作期间,给予我支持和帮助的老师、同学和亲友致以最真诚的感谢。参考文献[1]李信满、刘积仁。网络计费系统的设计与实现。(J)小型微型计算机系统。No.9,1997年。精彩文档 实用标准文案[2]庄春兴、杨晓伟、黄向前。网络数据包的捕获、分析与应用。计算机与现代化。[3]W.RichardStevens,范建华、青光辉等译,TCP/IP/IP协议详解卷1:协议,机械工业出版社,2000年4月。[4]钱丽萍、李亚萍、高光来。基于BPF和LIBPCAP库的包捕获应用系统的设计。电脑学习。1999年12月。[5]孙鹏、董玉华、韩正之。基于数据链路层的局域网流量统计的实现。计算机工程与应用。2002年05月。[6]李信满。网络计费系统的设计与实现〔J〕.小型微型计算机系统,1997年7月。[8]唐正军,刘代志。网络嗅探器sniffer软件源代码浅析(3)采用libpcap库的通用设计。计算机工程.vo1.28no.22002年1月。[9]庄春兴、彭奇志.基于winpcap的网络嗅探器程序设计。计算机与现代化。2002年5月。[10]DouglasE.comer,徐良贤等译。计算机网络与因特网.机械工业出版社.2000年8月。[11]潘爱民。网络与信息安全网络安全(二)。http://www.icst.pku.edu.cn/InfoSecCourse[12]郭静。用Vb设计基于代理服务器的网络计费系统http://www.ccw.com.cn/htm/app/aprog/O1_2_8_5.asp[13]SNIFFER(嗅探器)--简介http://www.chinaitlab.com/www/news/article_show.asp?id=7375[14]吕晓波。以太网简要教程。http://www.yesky.com/20001123/136532.shtml[15]warton。sniffer技术原理及应用,包括编程方法和工具使用http://www.csdn.net/develop/read_article.asp?id=22362[16]studio。嗅探的基本原理。ChinaITLab[17]winpcap。http://winpcap.polito.it/install/default.htm[18]libpcap。http://sourceforge.net/projects/libpcap/精彩文档
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处