毕业设计-网络数据包的协议分析程序的设计开发-论文_第1页
毕业设计-网络数据包的协议分析程序的设计开发-论文_第2页
毕业设计-网络数据包的协议分析程序的设计开发-论文_第3页
毕业设计-网络数据包的协议分析程序的设计开发-论文_第4页
毕业设计-网络数据包的协议分析程序的设计开发-论文_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文)网络数据包的协议分析程序的设计开发论文作者姓名:申请学位专业:申请学位类别:论文提交日期:网络数据包的协议分析程序的设计开发摘要本文设计与实现了一个基于Linux下Libpcap库函数的网络数据包协议分析程序。程序的主要功能包括网络数据包捕获和常用网络协议分析。程序由输入/输出模块、规则匹配模块、数据捕获模块、协议分析模块组成。其中数据捕获模块和协议分析模块是本程序最关键、最主要的模块。本文的主要内容如下:首先介绍了网络数据包协议分析程序的背景和概念。其次进行了程序的总体设计:确定了程序的功能,给出了程序的结构图和层次图,描述了程序的工作流程,对实现程序的关键技术做出了分析。接着,介绍完数据包捕获的相关背景和Libpcap函数库后,阐述了如何利用Libpcap函数库实现网络数据包捕获模块。然后对协议分析流程进行了详细的讲解,分析了常用网络协议。最后进行了程序的测试与运行:测试了程序能否按照预期的效果正确执行,印证了预期结果。关键词:Libpcap;Linux;数据包捕获;应用层;协议识别TheDesignandDevelopmentofNetworkPacketProtocolAnalyzingProgramAbstractThethesisisanattempttointroduceanimplementationofnetworkprotocolanalyzingprogramwhichisbasedonLibpcap,afamousnetworkpacketcapturelibraryonLinux.IthasarichfeaturesetwhichincludescapturingnetworkpacketsandanalyzingpopularnetworkprotocolsonInternet.Theprogramismadeupofaninput/outputmodule,arulesmatchingmodule,apacketcapturingmoduleandaprotocolanalyzingmodule.Andthelasttwomodulesarekeymodules.Theresearchworkwasdescribedasfollowed.firstly,weintroducethebackgroundandconceptsaboutnetworkprotocolanalyzingprograms;andwemakeanintegrateddesignontheprogram,definefunctionsofit,figureoutitsstructureandhierarchicalgraphs,describetheworkflowofit,andanalyzethekeytechniquesusedinit;Secondly,afterelaboratingonthebackgroundofpacketcaptureandtheLibpcaplibrary,westateaapproachtoimplementapacketcapturemodulewithLibpcap;Thirdly,weexplaintheworkflowaboutprotocolanalysis,andanalyzecommonnetworkprotocols;Finally,wetestourprogramtoseewhetheritworksasexpected,fortunately,itdoes.Keywords:Libpcap;Linux;Networkpacketcapturing;Applicationlayer;Protocolidentification目录论文总页数:23页1 引言 1 课题背景 1 网络数据包协议分析程序简介 2 国内外研究现状 22 网络数据包协议分析程序的总体设计 3 网络数据包协议分析程序的功能分析 3 系统的组成结构和工作流程 3 系统的结构框图 3 系统的结构和功能 4 程序的工作流程 5 系统实现的关键技术分析 63 网络数据包捕获模块的实现 7 网络数据包捕获简介 7 基于Libpcap的网络数据包捕获的实现 8 Libpcap安装 8 Libpcap中基本的数据结构和函数 8 数据捕获模块的实现 114 协议分析模块的实现 11 网络协议分析的总体流程 12 对TCP/IP模型中各层协议的分析 14 以太网首部的分析与提取 14 IP首部的分析与提取 15 TCP/UDP首部的分析与提取 16 应用层协议的识别与分析 185 程序运行与测试 20 测试环境 20 硬件环境 20 程序运行环境 20 测试步骤 20 测试结果评价 20结论 20参考文献 21致谢 22声明 23引言课题背景随着计算机网络的不断发展,全球信息化已成为当今社会发展的趋势。但由于计算机网络自身所特具有的特点,比如联结形式多样性和网络的开放性、互连性等特征,所以导致网络易受黑客还有一些病毒的攻击。所以网上信息的安全和保密是一个至关重要的问题。对于军用的自动化指挥网络和银行等传输敏感数据的计算机网络系统而言,其网上信息的安全和保密尤为重要。因此,网络必须有足够强的安全措施,否则该网络将是个无用、甚至会危及国家安全的网络。在计算机网络的世界里,存在着很多潜在的威胁,因此网络的安全措施应能全方位地应对各种不同的威胁,这样才可以真正的做到网络服务于社会,体现网络的先进性。计算机网络所面临的威胁大体可分为两种:一是对网络中信息的威胁;二是对网络中设备的威胁。影响计算机网络的因素很多,有些因素可能是有意的,也可能是无意的;可能是人为的,也可能是非人为的;可能是外来黑客对网络系统资源的非法使有,归结起来,针对网络安全的威胁主要有三种:(1)人为的无意失误:如操作员安全配置不当造成的安全漏洞,用户安全意识不强,用户口令选择不慎,用户将自己的帐号随意转借他人或与别人共享等都会对网络安全带来威胁。(2)人为的恶意攻击:这是计算机网络所面临的最大威胁,敌手的攻击和计算机犯罪就属于这一类。此类攻击又可以分为以下两种:一种是主动攻击,它以各种方式有选择地破坏信息的有效性和完整性;另一类是被动攻击,它是在不影响网络正常工作的情况下,进行截获、窃取、破译以获得重要机密信息。这两种攻击均可对计算机网络造成极大的危害,并导致机密数据的泄漏。(3)网络软件的漏洞和“后门”:网络软件不可能是百分之百的无缺陷和无漏洞的,然而,这些漏洞和缺陷恰恰是黑客进行攻击的首选目标,曾经出现过黑客攻入网络内部的事件,这些事件的大部分就是因为安全措施不完善所招致的苦果。另外,软件的“后门”都是软件公司的设计编程人员为了自便而设置的,一般不为外人所知,但一旦“后门”洞开,其造成的后果将不堪设想。为了及早发现并制止网络上的各种攻击,我们需要通过对网络上的数据进行分析来发现并找出问题,提前预防。这也是本论文的一个重要目的。网络安全管理员运用网络封包截获技术,抓取网络中有用的数据包,然后通过对数据包内容进行分析,确定哪些是有害的或者含有攻击企图的包,以此来达到对网络攻击的预防。同时许多防火墙也是基于包过滤技术的。本文将介绍网络数据包协议分析程序的工作原理以及它的实现。网络数据包协议分析程序简介网络数据包协议分析程序是一种用于收集网络中有用数据的程序,这些数据可以是用户的帐号和密码,也可以是一些商用机密数据等。它是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具。网络数据包协议分析程序的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用网络数据包协议分析程序来作出精确的问题判断。在合理的网络中,网络数据包协议分析程序的存在对系统管理员是至关重要的,系统管理员通过网络数据包协议分析程序可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间的异常通讯,有些甚至牵涉到各种的协议,借助于网络数据包协议分析程序系统管理员可以方便的确定出多少的通讯量属于哪个网络协议、占主要通讯协议的主机是哪一台、大多数通讯目的地是哪台主机、报文发送占用多少时间、或着相互主机的报文传送间隔时间等等,这些信息为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。国内外研究现状现在国内外已经有很多成熟并且功能强大的网络数据包协议分析软件。比较著名的网络数据包协议分析软件有:开源软件:Wireshark、TcpDump。商用软件:EtherPeek下面对这几种软件进行简要的介绍:Wireshark:Wireshark是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,支持Linux和Windows平台。Wireshark起初由GeraldCombs开发,随后由一个松散的Wireshark团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的网络分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为Wireshark添加新的协议解析器,如今Wireshark已经支持五百多种协议解析。很难想象如此多的人开发的代码可以很好的融入系统中;并且在系统中加入一个新的协议解析器很简单,一个不了解系统的结构的新手也可以根据留出的接口进行自己的协议开发。这都归功于Wireshark良好的设计结构。事实上由于网络上各种协议种类繁多,各种新的协议层出不穷。一个好的协议分析器必需有很好的可扩展性和结构。这样才能适应网络发展的需要不断加入新的协议解析器。TcpDump:顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。用尽量简单的话来定义TcpDump,就是:dumpthetrafficonanetwork,根据使用者的定义对网络上的数据包进行截获的包分析工具。TcpDump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一。EtherPeek:这个工具软件开始只是一个网络分析器型的数据包监测软件,经过这些年的发展已经成为一个真正的网络管理工具并具有网站监视和分析等新的功能,被美国联邦调查局用来追踪逃犯、贩卖毒品的人、电脑黑客和一些被怀疑为外国间谍的人。是一个直观,功能强大的以太网网络和协议分析器。支持Macintosh和Windows平台。EtherPeek把查找和修复多平台上的复杂网络任务变得简单化。EtherPeek采用工业标准,非常容易使用,提供解码、过滤和诊断网络的功能。以友好图形界面出名,EtherPeek提供非常详细且多样化的网络使用信息,网络结点的会话和数据包内容。在有问题的局域网络中使用EtherPeek执行一个自定的诊断测试,监控网络的通信和事件,跟踪非法的网络活动,测试和调试网络软硬件。网络数据包协议分析程序的总体设计网络数据包协议分析程序的功能分析对于网络数据包协议分析程序进行功能分析的第一步是要确立程序所要实现的目标,也就是程序最终要解决的问题。本程序所要实现的目标就是在共享式以太网中捕获根据过滤规则设置的流经本地网卡的数据包,并且对数据包中的信息进行分析。网络数据包协议分析程序必须完成对常用协议的识别和分析:要求至少实现TCP/IP协议簇几个基本协议的分析(ARP、RARP、TCP、UDP),以及应用层的常用协议分析。为了减少设计的复杂度,程序采用字符界面。对网络数据包的捕获、规则过滤和对数据包的分析是本程序的主要功能。系统的组成结构和工作流程系统的结构框图基于以上分析,本文设计了网络数据包协议分析程序,图2-1是程序的结构框图。FedoraCoreLinux4FedoraCoreLinux4数据包捕获应用程序接口数据包处理图2-1网络数据包协议分析程序结构框图下面对该程序的整体结构进行一下描述:该程序的运行环境是FedoraCore4linux。FedoraCore是linux的一个发行版,他的前身是Redhatlinux。本程序通过调用安装在linux上的Libpcap函数库抓取经过本地网卡的数据包,从而完成数据包的捕获。然后将捕获后的数据包交给上层的数据处理模块,进行协议分析。最后将分析后的数据显示在用户界面上。系统的结构和功能网络数据包的协议分析程序是一个基于Libpcap开发库,应用与共享以太网的网络分析程序如图2-2所示,系统主要包括4大模块:网络数据报协议网络数据报协议分析程序输入数据捕获规则匹配数据处理协议分析输出图2-2网络数据包的协议分析程序的层次图1、数据输入模块。该模块主要功能是接收用户输入用于捕获数据包的信息。其中包括选择用于捕获的网络接口和需要过滤的内容。2、数据捕获模块。该模块的主要功能是捕获流经本地网卡的所有数据。其原理是通过把网卡设置为混杂模式,使得网卡对所有流经它的数据包都交给上层程序处理。3、规则匹配模块,该模块的主要功能是根据用户的需求对需要捕获的数据包进行过滤设置。因为不是所有经过本地网卡的数据报都对我们分析网络有用,而且如果将所有经过网卡的数据捕获会增加系统的开销。因此我们设置了一个规则匹配模块,当所捕获的信息与我们设置的规则相符时我们就把它交给数据处理模块,否则就丢弃。4、数据处理模块。该模块的主要功能是对捕获的数据进行分析显示处理。主要是调用协议分析模块和显示模块。4.1协议分析模块。该模块的主要功能是对捕获的数据包进行协议分析。把数据包捕获下来后,我们需要对其分析才能知道网络中存在的安全问题。该模块主要是对TCP/IP各层的协议进行分析。4.2显示模块。该模块的主要功能是将分析的结果显示给用户。对数据包进行协议分析后要把结果显示给用户本程序才结束。因为数据包中包含的信息太多,如果全部显示给用户有所不便,所以我们挑选其中比较重要的信息输出给用户。程序的工作流程图2-3为本程序的流程图,下面其进行简要的叙述:1、程序开始时首先查找计算机上所有可用的网卡,并让用户选择用于捕获数据包的网卡。2、用户输入用于捕获数据包的网卡和过滤规则。只过滤用户所关心的信息。3、程序判断该网卡所在的网络是否为以太网,不是则中止,是则继续。因为本程序只能在共享以太网中进行数据捕获。4、编译用户设置的过滤规则。5、开始进行捕获,并分析数据,将数据显示给用户。当用户停止时就结束程序,否则继续捕获。查找所有可用的网卡查找所有可用的网卡是否是以太网编译并且设置过滤规则开始捕获数据并分析显示结果结束程序用户中止吗?选择用于捕获的网卡和过滤规则开始NYNNYY图2-3网络数据包的协议分析程序的流程图系统实现的关键技术分析前面给出了网络数据包协议分析程序的总体结构、功能模块和工作流程。要实现程序预定的功能,就必须解决实现程序的关键技术。网络数据包协议分析程序要实现的关键技术包括:数据包捕获技术、对TCP/IP各层基本协议进行分析的技术、协议识别技术。1、数据包捕获技术:本程序要对网络中的数据进行分析,首先就要将网络中的数据包捕获下来。因此实现数据包捕获是本程序设计的基础也是首先要解决的技术问题。要实现共享以太网中的数据捕获,各个平台有不同的技术。在Linux有一个专门为程序员编写数据包捕获程序而开发的库:Libpcap。Libpcap是用户态的数据包截获API,具有独立性和可移植性,支持BPF过滤机制等。通过调用Libpcap库函数可以轻易的实现共享以太网中数据包的截获,而且实时性相当的强,因为Libpcap是处于用户态所以减少了系统的开销。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进。2、对TCP/IP各层基本协议分析的技术:要对TCP/IP各层的基本协议进行分析,主要是要对所要分析的协议有充分的了解,特别是对各种协议的报头格式要有深入的了解。对各种协议进行分析时主要是将报头中的重要信息显示给用户,还有可能对数据包的正文信息解码。3、协议识别技术:由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议的识别需要从下至上进行。例如,首先对网络层的协议识别后进行脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层。应用层以下的各种协议一般都可以通过下一层的协议中的关键信息来识别。但是应用层的协议种类相当多,无法从下层协议中识别。对于应用层协议识别的方法目前有几种技术:基于特征串的应用层协议识别、VenusFastProtocolRecognition、以及端口识别。在本程序中我们采用的是端口识别技术。端口识别的原理是常用协议使用固定端口来进行通信。端口识别的优点是:简单、容易实现。缺点是:一些不常用协议不能被识别,常用协议修改端口后也无法识别。网络数据包捕获模块的实现网络数据包捕获简介网络数据包截获一般指通过截获整个网络的所有信息流量,根据信息源主机,目标主机,服务协议端口等信息简单过滤掉不关心的数据,再将用户感兴趣的数据发送给更高层的应用程序进行分析。一方面要,网络截取模块要能保证截取到所有网络上的数据包,尤其是检测到被分片的数据包(这可能蕴涵着攻击)。另方面,数据截取模块截取数据包的效率也是很重要的。它直接影响整个入侵检测系统的运行速度。从广义的角度上看,一个包捕获机制包含三个主要部分:最底层是针对特定操作系统的包捕获机制,最高层是针对用户程序的接口,第三部分是包过滤机制。不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序。而数据包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。值得注意的是,包捕获机制并不影响操作系统对数据包的网络栈处理。对用户程序而言,包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望的数据包。这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。基于Libpcap的网络数据包捕获的实现Libpcap安装Libpcap提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性。Libpcap可以在绝大多数类unix平台下工作。在windows平台下,一个与Libpcap很类似的函数包winpcap提供捕获功能,其官方网站是lLibpcap软件包可从:///下载,解压后依此执行下列三条命令即可安装。./configuremakemakeinstall但如果希望Libpcap能在linux上正常工作,则必须使内核支持“packet”协议,也即在编译内核时打开配置选项CONFIG_PACKET(选项缺省为打开)。Libpcap中基本的数据结构和函数主要函数:intpcap_findalldevs(pcap_if_t*alldevsp,char*errbuf)功能:枚举系统所有网络设备的信息参数:alldevsp:是一个pcap_if_t结构体的指针,如果函数pcap_findalldevs函数执行成功,将获得一个可用网卡的列表,而里面存储的就是第一个元素的指针。Errbuf:存储错误信息的字符串。返回值:int,如果返回0则执行成功,错误返回-1。pcap_t*pcap_open_live(char*device,intsnaplen,intpromisc,intto_ms,char*ebuf)功能:设置一个抓包描述符参数:其第一个参数是我们在上一节中指定的设备,snaplen是整形的,它定义了将被pcap捕获的最大字节数。当promisc设为true时将置指定接口为混杂模式(然而,当它置为false时接口仍处于混杂模式的特殊情况也是有可能的)。to_ms是读取时的超时值,单位是毫秒(如果为0则一直嗅探直到错误发生,为-1则不确定)。最后,ebuf是一个我们可以存入任何错误信息的字符串(就像上面的errbuf)。intpcap_compile(pcap_t*p,structbpf_program*fp,char*str,intoptimize,bpf_u_int32netmask)功能:编译过滤规则参数:第一个参数是会话句柄(pcap_t*handle在前一节的示例中)。接下来的是我们存储被编译的过滤器版本的地址的引用。再接下来的则是表达式本身,存储在规定的字符串格式里。再下边是一个定义表达式是否被优化的整形量(0为false,1为true,标准规定)。最后,我们必须指定应用此过滤器的网络掩码。函数返回-1为失败,其他的任何值都表明是成功的。intpcap_setfilter(pcap_t*p,structbpf_program*fp)功能:设置过滤规则。参数:这非常直观,第一个参数是会话句柄,第二个参数是被编译表达式版本的引用(可推测出它与pcap_compile()的第二个参数相同)。intpcap_loop(pcap_t*p,intcnt,pcap_handlercallback,u_char*user)功能:循环抓包直到用户中止。参数:第一个参数是会话句柄,接下来是一个整型,它告诉pcap_loop()在返回前应捕获多少个数据包(若为负值则表示应该一直工作直至错误发生)。第三个参数是回调函数的名称(正像其标识符所指,无括号)。最后一个参数在有些应用里有用,但更多时候则置为NULL。数据结构:structpcap_if{structpcap_if*next;char*name;char*description;structpcap_addr*addresses;u_intflags;};pcap_if*next;如果非空,指向链的下一个元素。如果为空是链的最后一个元素。char*name;指向一个字符串,该字符串是传给pcap_open_live()函数的设备名;char*description;如果非空,指向一个对设备的人性化的描述字符串。pcap_addr*addresses;指向网卡地址链中的第一个元素。u_intflags;PCAP_IF_网卡的标志。现在唯一可用的标识是PCAP_IF_LOOKBACK,它被用来标识网卡是不是lookback网卡。structpcap_pkthdr{structtimevalts;/*timestamp*/bpf_u_int32caplen;/*lengthofportionpresent*/bpf_u_int32len;/*lengththispacket(offwire)*/};timevalts;数据报时间戳;bpf_u_int32caplen;当前分片的长度;dpf_u_int32len;这个数据报的长度;细节描述:在dump文件中的每个数据报都有这样一个报头。它用来处理不同数据报网卡的不同报头问题。structpcap_stat{u_intps_recv;/*numberofpacketsreceived*/u_intps_drop;/*numberofpacketsdropped*/u_intps_ifdrop;/*dropsbyinterfaceXXXnotyetsupported*/};u_intps_recv;接受数据报的数目;u_intps_drop;被驱动程序丢弃的数据报的数目;u_intps_ifdrop;被网卡丢弃的数据报的数目;structpcap_addr{pcap_addr*next;sockaddr*addr;sockaddr*netmask;sockaddr*broadaddr;sockaddr*dstaddr;};pcap_addr*next;如果非空,指向链表中一个元素的指针;空表示链表中的最后一个元素。sockaddr*addr;指向包含一个地址的sockaddr的结构的指针。sockaddr*netmask;如果非空,指向包含相对于addr指向的地址的一个网络掩码的结构。sockaddr*broadaddr;如果非空,指向包含相对于addr指向的地址的一个广播地址,如果网络不支持广播可能为空。sockaddr*dstaddr;如果非空,指向一个相对于addr指向的源地址的目的地址,如果网络不支持点对点通讯,则为空。数据捕获模块的实现第一步调用pcap_findalldevs查找出所有可用的网卡,显示出来,并接收用户选择网卡。第二步用户输入用于捕获数据包的网卡后,调用pcap_open_live生成一个抓包描述符。第三步通过调用pcap_datalink检查该网卡所在网络是不是以太网,如果不是则中止程序。第四步接收用户输入的过滤条件,调用pcap_compile和pcap_setfilter生成过滤规则。第五步调用pcap_loop进行循环捕获数据包,直到用户中止。具体流程入下图所示:ppcap_findalldevs()pcap_open_live()pcap_datalink()pcap_compile()pcap_setfilter()pcap_loop()endBeginNNYY图3-1数据捕获模块流程图协议分析模块的实现虽然到此为止已经可以顺利完成数据包的监听工作,但这并不意味着己经大功告成了,因为从前面的数据包监听的原理中可以知道,数据包捕获程序工作在网络底层,将网卡设置为混杂模式以后,从网络底层捕获到的数据包会直接往上发给应用程序进行处理,而不再像普通的数据包那样经过操作系统的层层过滤。这样一来,应用程序收到的数据包是最原始的数据包,也就是说监听主机接收到的数据包中,除了数据包本身的内容之外,还带有从对方主机中的传输层、网络层以及数据链路层的数据包头信息,所以要想获得数据包里的应用数据,是需要我们自己来按照每一层的协议剥离数据包头中的每一层首部内容的,这就是协议分析需要完成的工作。网络协议分析的总体流程网络功能的分层带来了网络协议的层次结构,网络数据在传送时,同样也是被分解成一个个的数据报逐层传送的,在两台主机的实际通信过程中,从逻辑上讲,是两台主机的对等层直接通信。而实际上,数据包并不是从某一计算机网络系统的第N层直接传导另一计算机网络系统的第N层的,而是从这台计算机的某一层直接传送N十1层,直至到达物理层最后分解为比特流流经物理介质到达另一台计算机,然后在从另一台计算机中的底层逐层向上传送的。当数据包被传输到某一层的时候,该层都会对数据包进行加工,在发送方通常是加上一个与该层协议有关的控制或标志信息,即数据包的包头或包尾;而在接受方则是需要逐层拆下本层标志,即去掉数据包的包头或包尾,根据控制信息进行相应的处理,将分解后的数据报逐层上传,直至应用程序获得最终数据。比如发送方在数据链路层通常会在包头加上目的MAC地址、源MAC地址、其他一些具体网络信息及帧定界符,在包尾加上循环冗余码,并使用字节填充或位填充,由接收方数据链路层去掉包头与包尾进行相关解释工作。数据包的加工工作如图4-1所示:应用程序TCP应用程序TCPIP以太网驱动程序用户数据用户数据APP首部应用数据TCP首部应用数据TCP首部IP首部应用数据TCP首部IP首部以太网头以太网尾图4-1数据封装示意TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCPSegment);IP传给网络接口层的数据单元称作IP数据报(IPdatagram);通过以太网传输的比特流称作帧,分组既可以是一个IP数据报也可以是IP数据报的一个片(fragment)。协议分析就是数据封装的逆过程。协议分析的流程图如图4-2所示:开始开始读取原始数据报文提取并分析链路层报头提取并分析IP地址信息提取并分析TCP/UDP地址信息根据端口判断应用层协议显示提取报头中的主要信息结束显示图4-2网络协议分析流程图从图可以看到,对于监听程序捕获到的数据报,需要按以下步骤分层次进行协议分析:(1)首先是读取数据链路层的报头,从报头中可以得到:计算机的源MAC地址和目的MAC地址、数据包的长度以及上层协议的类型。(2)然后需要去掉数据链层的报头,此时可以获得IP数据报、arp、rarp数据包,在这一层中可以对IP数据报做一定的统计和分析等等;对arp、rarp数据包可以获得发送端IP和目的IP等重要信息。(3)对于IP数据报去除网络层的报头以后,可以获得传输层数据报,对TCP/UDP数据包的报头进行分析在这一层中还可以获得数据报的端口号信息,根据端口号进一步判断数据报属于何种应用层协议。(4)对数传输层数据报去除掉传输层报头以后,就获得了应用层数据报,在应用层进行协议分析的工作就是按照应用层的工作原理、协议规范,还原获得应用层的内容,如SMTF/POP3协议分析可以还原出正在传输的邮件信息,FTP协议分析可以还原出传输中的文件名以及用户名口令密码等信息,协议分析可以还原出目标主机浏览网页的原貌等等。(5)对所有的数据报头分析处理后,取出其中的主要信息然后显示给用户。对TCP/IP模型中各层协议的分析前面的内容已经提到过,我们在对数据包根据应用层协议进行分析的时候都需要首先剥离数据包中的包头并且需要根据包头信息判断是何种应用层协议。下面就按照数据链路层、网络层到传输层再到应用层的顺序详细的讲解每层包头的结构以及如何对每层的数据报进行协议分析。以太网首部的分析与提取因为每一个使用Libpcap捕获的数据包,都会有一个指向原始报文头的指针。假设这个指针为p。把这个指针强制转换为以太帧格式:(structether_header*)p。我们就得到了以太帧的报文头,就可以对该层协议进行分析和处理。由于在定义IEEE802.3以前,以太网就存在,因为有多个以太网标准,所以TCP/IP可以支持多种不同的链路层协议,如以太网、令牌环网、FDDI(光纤分布式数据接口)等。以太网是当今TCP/IP采用的主要的局域网技术,它采用一种称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(CarrierSenseMultipleAccesswithCollisionDetection),发送端在传输之前要侦听信道。在以太网内的IP和ARP数据报或者使用以太网II的或者使用IEEE:802.3子网访问协议(SNAP)来封装数据。这里我们只讨论最为常用的以太网II数据报格式,这是在RFC894中定义的,如图4-3所示,这是以太网II的封装格式:字节66246~15004目的地址源地址类型数据FCS图4-3以太网II的封装格式其中每个字段的含义如下:(1)帧初始同步((Preamble):8字节长,提供接收端的同步和分隔帧的功能。需要注意的是,帧初始同步字段在网络监视器中是不可见的。(2)目的地址(DestinationAddress):6字节长,指明目的地址。目的地址可以是单播、多播或者以太网的广播地址。其中,单播地址也称为MAC地址。(3)源地址((SourceAddress):6字节长,指明发送节点的单播地址。(4)以太网类型(EtherType):2字节长,指明在以太网帧中上层协议的类型。这个字段被用来将以太网的有效载荷传给正确的上层协议实体。如果在该字段中未注明有上层协议实体接收有效载荷帧。该帧将被丢弃。比如,对于IP数据报,这个字段的值为0x0800;对于ARP消息,该字段的值被设置为0x0806。(5)有效载荷(Payload):以太网II的帧的有效载荷由上层协议的协议数据单元组成,是数据包本身的具体内容。以太网II能发送最大1500字节的有效载荷。因为以太网具有冲突检测机制,以太网II的最小帧有效载荷为46字节。如果上层的协议数据单元小于46字节,则必须填充到46字节。(6)帧校验序列(FrameCheckSequence,FCS):4字节长,提供位级别的完整性校验,也被称为循环冗余校验(CRC)。本子段对于网络监视器来说同样是不可见的。IP首部的分析与提取因为以太帧报头的长度都是一样的。所以在提取IP包头的时候可以将指针P加上以太帧包头的长度后,把格式强制转化为IP包头格式即:(structip*)(p+sizeof(structether_header))。就得到了指向IP报头的指针,我们就可以进行相应的分析了。IP网络上的主机是通过IP数据报来交换数据的,IP数据报包括数据单元和首部字段,其中,数据单元包含要交换的所有信息,首部字段描述这个信息和数据报本身。只要设备需要通过IP网络向其他网络发送数据,它就会创建一个数据报来发送数据。实际上,IP数据报是作为IP包来发送的,IP包将IP数据报通过交换设备一跳一跳地中继到目的系统。虽然很多时候一个IP数据报就是一个IP包,但它们在概念上是不同的实体。如图4-4是IP数据报在RFC791中定义的封装格式:比特04816202431版本报头长服务类型数据包总长标识符标志片偏移生存时间协议号报头校验和源IP地址目的IP地址选项填充码数据图4-4IP数据报格式其中每个字段的含义如下:(1)版本(version):长度为4位,显示IP报头的版本。目前在所有互联网络和Internet中使用的标准IP版本号是4(即IPv4)。(2)报头长(headerlength):长度为4位,表示IP头的长度。典型的IP头不包括任何选项,长度为20字节。(3)服务类型(typeofservice):长度为8位,表示按照优先权、安全性以及吞吐量等数据包的服务类型。(4)数据包总长(totallength):长度为2位,表示IP数据报总的字节数,包括IP头和有效载荷。(5)标识(identifier):长度为2位,作为分割以及组装数据包时的识别标志来使用,被分割的数据包被分配有同一数值标识。(6)标志(flags):长度为3位,包含两个用于分片的标志。其中一个标志是用于表示IP有效载荷是否符合分片的标准,而另一个是表示对于已分片的IP数据报是否还有更多的分片。(7)片偏移(fragmentoffset):长度为13位,表示分片相对于原始IP数据报有效载荷的偏移量。(8)生存时间(timetolive):长度为1字节,表示IP数据包的寿命,目的是废弃掉在网络中循环着的IP数据包,一般地,每通过一次路由器,生存时间就被减去1,当生存时间为0时,数据包将被抛弃。(9)协议(protocol):长度为1字节,表示包含在有效载荷中的上层协议。IP协议字段的一般值有:1表示ICMP,2表示IGMP,6表示TCP,17表示UDP等等。(10)报头校验和(headerchecksum):长度为2字节,是用于确认IP数据包是否己毁坏的字段。(11)源目的IP地址(source/destinationaddress):长度为4字节,包含源/目的主机的IP地址。(12)选项和填充:此字段跟在IP头之后,但必须是以4个字节为增量单位,以使IP头的大小能用报头长度字段表示。TCP/UDP首部的分析与提取TCP/UDP报文头部的获取跟IP报文头部的获取类似,将P指针的位置向后移IP报文长度个位置即可(structtcphdr*)(p+sizeof(structether_header)+4*iph->ip_hl)。然后就可以对TCP/UDP数据包进行分析了。TCP(传输控制协议)为面向事务的应用提供了可靠的面向连接的传输协议。TCP正为目前Intemet上几乎所有的应用协议所利用,这是因为大部分应用程序都需要可靠的、可纠错的传输协议以保证不丢失或破坏数据。尽管IP已经做了大部分的搜集工作,并且根据需要在Internet上发送数据报和数据包,但是IP是不可靠的协议,并不能保证数据报或者数据包能够原封不动的到达其目的地,TCP作为IP的上层协议,为IP提供了可靠性服务,确保了IP数据报中的数据的正确性。如图4-5所示,是TCP段的封装结构。比特08162431源端口目的端口顺序号确认号数据偏移保留标志窗口校验和紧急指示符选项(长度可变)填充数据图4-5TCP数据报格式其中,每一段的含义如下:(1)源端口(sourceport):指示发送TCP段的源应用层协议,是一个2字节的字段。IP头中的源地址和TCP头中的源端口联合起来提供一个源套接字。TCP端口为TCP连接数据的传送定义了一种位置,表明段被发送至的应用层进程的一个目的端口。在一般情况下,应用层协议的服务器端在己知的端口上侦听。表4-1显示了常用的应用层协议对应的端口号。(2)目的端口(destinationport):指示目的应用层协议,是一个2字节字段。IP头中的目的IP地址和TCP头中的端口联合起来提供一个目的套接字。(3)序列号(sequencenumber):指示段的第一个8位组的输出字节流的序列号,是一个4字节字段。用于保证数据的到达顺序与可靠性。利用随机值确定初始值,以字节为单位表示所发送数据的位置。(4)确认号(acknowledgmentnumber):一个4位的字段,指示接收方希望收到的输入字节流中下一个8位组的序列号。是用于保证可靠性的确认号码。(5)数据偏移(dataoffset):表示TCP数据的起始位置,以4字节的整数倍表示,数据偏移字段也是TCP头的大小。在不包括选项的情况下,TCP报头是20个字节,offset的值为5。(6)保留(reserved):一个6字节字段,为了未来的使用而保留。(7)标志(flags):一个6字节字段,指示6个TCP标志。这6个标志是:URG(紧急)、ACK(确训)、PSH(推)、RST(复句)、SYN(同步)、FIN(结束)。(8)窗口(window):一个2字节的字段,表明该段的发送方的接收缓冲区中可供使用的空间有多少字节数。窗口大小的广告是一种实现接收流流控制的方式。(9)校验和(checksum):一个2字节的字段,为TCP段提供位级别的完整性校验。(10)紧急指针(urgentpointer):一个2字节字段,它表明段中紧急数据的位置。(11)选项(option):为提高利用TCP的通信性能所准备的选项。用户数据报协议(UDP)是定义用来在互连网络环境中提供包交换的计算机通信的协议。此协议默认认为网路协议(IP)是其下层协议。此协议提供了向另一用户程序发送信息的最简便的协议机制。此协议是面向操作的,未提供提交和复制保护。以下是UDP协议的报文头格式:比特源端口目的端口长度校验和0 16 31图4-6TCP数据包格式(1)源端口—16位。源端口是可选字段。当使用时,它表示发送程序的端口,同时它还被认为是没有其它信息的情况下需要被寻址的答复端口。如果不使用,设置值为0。(2)目的端口—16位。目标端口在特殊因特网目标地址的情况下具有意义。(3)长度—16位。该用户数据报的八位长度,包括协议头和数据。长度最小值为8。(4)校验和—16位。IP协议头、UDP协议头和数据位,最后用0填补的信息假协议头总和。如果必要的话,可以由两个八位复合而成。应用层协议的识别与分析对于应用层协议本程序采用的是端口识别技术。端口是应用程序在网络通信上使用的数据输入输出口。端口分为两种。一种为公认端口,另一种为短暂端口。公认端口被分配给网络上的服务程序。当某一网络客户端利用其他计算机上的服务程序时,在根据IP地址指定服务计算机的同时,也指定了被分配的服务程序的公认端口号。由此,可以利用与端口号对应的特定的网络服务。公认端口号有很多,工人端口号被定义在unix类操作系统下的/etc/services文件中下表列出了其中的一部分。表4-1常用协议和对应的端口号上层协议端口号/协议上层协议的意义Echo7/dup回应请求ftp-data20/tcp,20/udp在ftp上数据传送路径ftp21/tcp,21/udp在ftp上控制数据通信路径telnet23/tcp,23/udp用于远程终端连接的标准Smtp25/tcp,25/udp邮件发送服务Time37/tcp,37/udp计时服务器Nameserver42/tcp,42/udp主机名服务器Nicname43/tcp,43/udpWhois服务Domain53/tcp,53/udp域名服务器Tftp69/tcp,69/udp小型文件传输协议Gopher70/tcp,70/udp信息服务Finger79/tcp,79/udp用户信息80/tcp,80/udpwwwPop3110/tcp,110/udp邮局协议Sqlserv118/tcp,118/udpSQL服务nntp119/tcp,119/udp网络新闻传输协议Ntp123/tcp,123/udp网络时间协议Netbios-ns137/tcp,137/udpNetbios名称服务Netbios-dgm138/tcp,138/udpNetbios会议服务短暂端口号是客服端程序与服务器程序进行通信时,短暂使用端口号。短暂端口号是不可再生的,被运行系统分配给客户端程序。因为常用端口和常用协议对应,我们可以利用这个原理来识别应用层协议。关键代码如下voidgetportname(intportn,charportch[],char*protocol){if(getservbyport(htons(portn),protocol)!=NULL){strcpy(portch,getservbyport(htons(portn),protocol)->s_name);}else{//短暂端口等找不到名称时sprintf(portch,"e");}}现在介绍一下getportname()函数。此函数完成的是取得端口号和区别TCP/UDP类别的两个参数并返回端口名称的工作。getportname()函数的核心是调用getservbyport()函数。用这个函数来检索与端口相关的信息,吧结果作为指向servent型的结构体的指针并返回。servent型的结构体在netdb.h头文件中被声明。在这里使用的s_name成员。把端口名称赋给s_name。getportname()函数检索端口名称失败时,返回NULL。这是因为得到的端口号是短暂端口号,没有检索到它的端口名称。这时,常把端口号作为端口的名称来用。程序运行与测试测试环境硬件环境处理器P3800Mhz以上;内存128M以上;多台普通搭载网卡的PC、经过集线器互联。程序运行环境安装有Libpcap8.0以上版本的Linux操作系统。测试步骤首先,用多台PC搭建局域网络。其次,选定一台PC对数据包捕获模块、规则过滤模块、协议分析模块进行功能测试。然后对每个功能模块进行数据合法性检查、数据一致性检查。最后对关键模块进行回归测试。测试结果评价本设计在FedoraCore4环境试运行下,编码后经过多次测试并将发现的错误及时修改,系统运行正常,基本达到设计目标,运行结果比较良好。图5-1是程序运行时的界面。图5-1程序运行界面结论在研究了网络监听技术和协议分析技术的基础上,本文设计和实现了一个网络数据包的议分析程序,该程序具有以下特点:(1)将能够监听局域网中的数据。(2)能够识别应用层协议。与此同时,随着网络技术的快速发展,网络带宽越来越宽,网络规模越来越大,网络结构越来越复杂,可以从以下三个方面对本系统做改进和更进一步的深入研究。(1)增强监听系统的控制功能。目前本系统只能被动的接收网络数据,并不能对监听点进行控制,如果能够增加控制功能比如可以设定监听程序的启动/暂停,无疑会使得更加灵活强大。(2)与硬件相结合开发成熟产品。在高速宽带的网络中进行监听时,由于受限于目前网络接口、计算机总线结构、CPU处理能力、磁盘I/O性能等的影响,不可避免会出现丢包、无法实时控制等情况,这时应类似于网络分析仪一样结合硬件充分发挥系统的潜能开发成熟产品。(3)分布式发展。把数据报捕获、协议分析、数据分析、相应控制等都集中在一起必然对整个系统的性能存在影响,所以可以把各个组件分散设计并协同工作,甚至一个组件比如数据报捕获组件都可以部署在多个监控点。可见网络数据包的监听技术在今天的网络信息时代是重要的、长期的研发课题,它的研究成功将具有重要的社会效益和理论研究意义。参考文献[1]小高知宏[日].TCP/IP数据包分析程序篇[M].叶明译.北京:科学出版社,2003。[2]WRichardStevens.TCP/IP详解卷1[M].范建华胥光辉张涛译.北京:机械工业出版社,2000。[3]谢希仁.计算机网络[M].北京:电子工业出版社,2003。[4]刘文涛.网络安全开发包详解[M].北京:电子工业出版社,2005。[5]Libpcap的数据结构和函数介绍[OL].LinuxAid网站.://oldsite.linuxaid/developer/showdev.jsp?i=525,2005-10-1。[6]王学磊.网络数据包截获与分析研究[D].沈阳:东北大学[硕士论文],2004。[7]王皓.远程网络数据包监听技术的研究[D].大连:大连理工大学[硕士论文],2005。

致谢本文是在欧晓聪老师的热情关心和指导下完成的,他渊博的知识和严谨的治学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。在此向他表示我最衷心的感谢!在论文完成过程中,本人还得到了金虎老师的悉心指导。金老师多次询问研究进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励。金老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,不仅授我以文,而且教我做人,虽历时三载,却给以终生受益无穷之道。对金老师的感激之情是无法用言语表达的。感谢我的爸爸妈妈,焉得谖草,言树之背,养育之恩,无以回报,你们永远健康快乐是我最大的心愿。最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!作者简介姓名:沈也明性别:男出生年月:1985年8月民族:汉E-mail:mitnickshen@gmail

声明本论文的工作是2006年02月至2007年06月在成都信息工程学院系完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使用过的材料。除非另有说明,本文的工作是原始性工作。关于学位论文使用权和研究成果知识产权的说明:本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括:(1)学校有权保管并向有关部门递交学位论文的原件与复印件。(2)学校可以采用影印、缩印或其他复制方式保存学位论文。(3)学校可以学术交流为目的复制、赠送和交换学位论文。(4)学校可允许学位论文被查阅或借阅。(5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息工程学院。特此声明!作者签名:年月日AsAlexanderwentoffdutyhenoticedthebobbingflickerofships'lightsfartoportandstarboard.SeaShepherdploughedontowardsMiami.4.AllashoreSusanopenedherarms,asiftogreetalong-lostfriend.Thesunhadreturned--notthehalf-hearted,hide-and-seeksunofrecentweeks.No,thiswastherealthing,puregoldpouringoutofaperfectsky.Shefeltthewarmthseepingdeepintoherskin.Slowlytheshorefloatedforwardtomeetthem,orsoitseemed.Miami!Withoutasking,shehelpedherselftothebinocularshangingroundGary'sneck.Fumbling,sheadjustedthefocus.Shewantedtoseeeverything.Susangavealittlegruntofpleasure:whitesand,palmtrees,highhotelswhosereflectingwindowssignalledlikelighthouses,elegantyachtsleaningonthewindandcombingcreamilythroughthesmoothbluewater.Blue!Theseawassoblue!Travelbrochure-blue.Susangazedinwonder.CouldthisbethesameAtlanticwhosegrey-greenwaveshadmadeherstomachchurnanddrivenherintoherbunk?ShehandedbackGary'sbinoculars.Bothwereshadingtheireyes.Thesunshoneeverywhere,fromaboveandfrombelow,sparkingsilveronthewater,teemingandgleaminglikeashoalofsurfacingfish..."Warmenoughforyou?"BenBellinghamstoodbetweenthem."Temperature'sintheninetiesonthemainland."Theychattedforaminuteortwo."Look,there'sapelican."Benpointed."Abrownpelican,quitecommonaroundtheFloridacoast.Peoplelovewatchingtheirantics."Thebigbird,whichremindedGaryofapterodactyl,wasmakingareconnaissanceflightparalleltoSeaShepherd.Suddenlythepelicanplunged.Asplash,aquickgobblingmovement,andanotherfatfishwasstoredawayinthebird'sexpandablethroatpouch."Pelicansusetheirelasticbillsasscoop-nets,"Benexplained."Andtheyvarytheheightoftheirdivedependingonthedepthofthefish.Eattwopoundsaday,thosefellas,aquarteroftheirbodyweight."Thebirdcameintolandonanoldjetty.Nowitlookedclumsy,swayingandteeteringdowninvisiblestepstoalightonflatwebbedfeet.Soonafter,adishevelledchickwasrummagingintheadult'sbeak."Musthaveanestnearby,"commentedBellingham.Heshookhimself."Well,gottabegoing.I'llseeyouagainbeforewedisembark.Bytheway,betteralteryourwatches--it's9#10localtime,fivehoursbehindEngland."Thebear-likenaturalistshambledaway.TothinkSusanhadoncefeltshy,almostfrightenedofmeetinghim!Shesensed,ratherthansaw,anewpresenceandpeekedsideways.ItwasYves.Hewasdrapedovertheship'srailandlookedaboutashappyassomeonebeingseasick.Whysoglum?Susan'seyestookinthescenefartheralongthedeck.Ah,thatwasit.Vanessa.Wearingapolka-dotsun-suitthatshowedoffherslenderfigureandshapelylegs.TalkingtoJohnnyMasterson,thehandsomehe-mansecurityofficer,inkhakishirtandshorts.Obviouslyenjoyingthemselves.PoorYves!Thepelicanhadresumeditspatrol.SusaninchednearertoYves."Hello,"shesaidlightly."Seethepelican?Betchaitcatchessomethinginaminute?"Yvesliftedhishead.Immediatelythepelicanobligedwithaspectacularswoop."Toldyou,didn'tI?"Susanchirped.Yvesfeignedinterest,buthisfacelethimdown.SusanswitchedhergazefromthebirdtoYves,fromYvestoVanessa,andbacktoYves.Thepelicanflappedoff."Nevermind,"shemurmured,"thereareplentymorefishinthesea."Yao:AndIamYao,kingoftherock.Andthere'snothin'yougirlscandoaboutit.Ling[takingafightingstance]:Oh,yeah?Well,IthinkPing[elbowingMulan]andIcouldtakeyou.Mulan[wadingaway]:Ireallydon'twanttotakehimanywhere.Ling[followingMulan]:Ping,wehavetofight!Mulan:Nowedon't.[unnaturally]Wecouldjustcloseoureyesandswimaround.Ling:C'mondon'tbesuchag--Ouch!Somethingbitme.Mushu[poppingoutofthewaterbetweenMulanandLing]:Whatanastyflavor.Ling[withfearandgusto]:Snake!Chien-Po[whileallthreeofthemclimbuptherockandoneachother]:Snake,snake.[MulanwhistlesforKhanandwadesbacktoshore.KhancomescloseenoughtoshoreandMulanhidesbehindKhanasshewrapsatowelaroundherbody][CuttoYao,LingandChien-Pocalmeddownsittingontherock]Ling:Somekingoftherock![Yaopusheshimofftherock][CuttoMulanwithtowelwrappedaroundher]Mulan:Boy,thatwascl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论