《网络数据包的协议分析程序的设计开发毕业设计论文.doc》由会员分享,可在线阅读,更多相关《网络数据包的协议分析程序的设计开发毕业设计论文.doc(35页珍藏版)》请在三一办公上搜索。
1、毕业设计(论文)网络数据包的协议分析程序的设计开发论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期:网络数据包的协议分析程序的设计开发摘 要本文设计与实现了一个基于Linux下Libpcap库函数的网络数据包协议分析程序。程序的主要功能包括网络数据包捕获和常用网络协议分析。程序由输入/输出模块、规则匹配模块、数据捕获模块、协议分析模块组成。其中数据捕获模块和协议分析模块是本程序最关键、最主要的模块。本文的主要内容如下:首先介绍了网络数据包协议分析程序的背景和概念。其次进行了程序的总体设计:确定了程序的功能,给出了程序的结构图和层次图,描述了程序的工作流程,对实现程序
2、的关键技术做出了分析。接着,介绍完数据包捕获的相关背景和Libpcap函数库后,阐述了如何利用Libpcap函数库实现网络数据包捕获模块。然后对协议分析流程进行了详细的讲解,分析了常用网络协议。最后进行了程序的测试与运行:测试了程序能否按照预期的效果正确执行,印证了预期结果。关键词:Libpcap;Linux;数据包捕获;应用层;协议识别The Design and Development of Network Packet Protocol Analyzing ProgramAbstractThe thesis is an attempt to introduce an implementa
3、tion of network protocol analyzing program which is based on Libpcap, a famous network packet capture library on Linux. It has a rich feature set which includes capturing network packets and analyzing popular network protocols on Internet. The program is made up of an input/output module, a rules ma
4、tching module, a packet capturing module and a protocol analyzing module. And the last two modules are key modules.The research work was described as followed. firstly, we introduce the background and concepts about network protocol analyzing programs; and we make an integrated design on the program
5、, define functions of it, figure out its structure and hierarchical graphs, describe the workflow of it, and analyze the key techniques used in it; Secondly, after elaborating on the background of packet capture and the Libpcap library, we state a approach to implement a packet capture module with L
6、ibpcap; Thirdly, we explain the workflow about protocol analysis, and analyze common network protocols; Finally, we test our program to see whether it works as expected, fortunately, it does.Key words: Libpcap; Linux; Network packet capturing; Application layer; Protocol identification 目 录论文总页数:23页1
7、引言11.1课题背景11.2网络数据包协议分析程序简介21.3国内外研究现状22网络数据包协议分析程序的总体设计32.1网络数据包协议分析程序的功能分析32.2系统的组成结构和工作流程32.2.1系统的结构框图32.2.2系统的结构和功能42.2.3程序的工作流程52.3系统实现的关键技术分析63网络数据包捕获模块的实现73.1网络数据包捕获简介73.2基于Libpcap的网络数据包捕获的实现83.2.1Libpcap安装83.2.2Libpcap中基本的数据结构和函数83.3数据捕获模块的实现114协议分析模块的实现114.1网络协议分析的总体流程124.2对TCP/IP模型中各层协议的分析
8、144.2.1以太网首部的分析与提取144.2.2IP首部的分析与提取154.2.3TCP/UDP首部的分析与提取164.2.4应用层协议的识别与分析185程序运行与测试205.1测试环境205.1.1硬件环境205.1.2程序运行环境205.2测试步骤205.3测试结果评价20结 论20参考文献21致 谢22声 明231 引言1.1 课题背景随着计算机网络的不断发展,全球信息化已成为当今社会发展的趋势。但由于计算机网络自身所特具有的特点,比如联结形式多样性和网络的开放性、互连性等特征,所以导致网络易受黑客还有一些病毒的攻击。所以网上信息的安全和保密是一个至关重要的问题。对于军用的自动化指挥网
9、络和银行等传输敏感数据的计算机网络系统而言,其网上信息的安全和保密尤为重要。因此,网络必须有足够强的安全措施,否则该网络将是个无用、甚至会危及国家安全的网络。在计算机网络的世界里,存在着很多潜在的威胁,因此网络的安全措施应能全方位地应对各种不同的威胁,这样才可以真正的做到网络服务于社会,体现网络的先进性。计算机网络所面临的威胁大体可分为两种:一是对网络中信息的威胁;二是对网络中设备的威胁。影响计算机网络的因素很多,有些因素可能是有意的,也可能是无意的;可能是人为的,也可能是非人为的;可能是外来黑客对网络系统资源的非法使有,归结起来,针对网络安全的威胁主要有三种:(1)人为的无意失误:如操作员安
10、全配置不当造成的安全漏洞,用户安全意识不强,用户口令选择不慎,用户将自己的帐号随意转借他人或与别人共享等都会对网络安全带来威胁。(2)人为的恶意攻击:这是计算机网络所面临的最大威胁,敌手的攻击和计算机犯罪就属于这一类。此类攻击又可以分为以下两种:一种是主动攻击,它以各种方式有选择地破坏信息的有效性和完整性;另一类是被动攻击,它是在不影响网络正常工作的情况下,进行截获、窃取、破译以获得重要机密信息。这两种攻击均可对计算机网络造成极大的危害,并导致机密数据的泄漏。(3)网络软件的漏洞和“后门”:网络软件不可能是百分之百的无缺陷和无漏洞的,然而,这些漏洞和缺陷恰恰是黑客进行攻击的首选目标,曾经出现过
11、黑客攻入网络内部的事件,这些事件的大部分就是因为安全措施不完善所招致的苦果。另外,软件的“后门”都是软件公司的设计编程人员为了自便而设置的,一般不为外人所知,但一旦“后门”洞开,其造成的后果将不堪设想。为了及早发现并制止网络上的各种攻击,我们需要通过对网络上的数据进行分析来发现并找出问题,提前预防。这也是本论文的一个重要目的。网络安全管理员运用网络封包截获技术,抓取网络中有用的数据包,然后通过对数据包内容进行分析,确定哪些是有害的或者含有攻击企图的包,以此来达到对网络攻击的预防。同时许多防火墙也是基于包过滤技术的。本文将介绍网络数据包协议分析程序的工作原理以及它的实现。1.2 网络数据包协议分
12、析程序简介网络数据包协议分析程序是一种用于收集网络中有用数据的程序,这些数据可以是用户的帐号和密码,也可以是一些商用机密数据等。它是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具。网络数据包协议分析程序的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用网络数据包协议分析程序来作出精确的问题判断。在合理的网络中,网络数据包协议分析程序的存在对系统管理员是至关重要的,系统管理员通过网络数据包协议分析程序可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间
13、的异常通讯,有些甚至牵涉到各种的协议,借助于网络数据包协议分析程序系统管理员可以方便的确定出多少的通讯量属于哪个网络协议、占主要通讯协议的主机是哪一台、大多数通讯目的地是哪台主机、报文发送占用多少时间、或着相互主机的报文传送间隔时间等等,这些信息为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。1.3 国内外研究现状现在国内外已经有很多成熟并且功能强大的网络数据包协议分析软件。比较著名的网络数据包协议分析软件有:开源软件:Wireshark、TcpDump。商用软件:EtherPeek下面对这几种软件进行简要的介绍:Wireshark: Wireshark是一个开放源码的网络分析系统,也
14、是是目前最好的开放源码的网络协议分析器,支持Linux和Windows平台。Wireshark起初由Gerald Combs开发,随后由一个松散的Wireshark团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的网络分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为Wireshark添加新的协议解析器,如今Wireshark已经支持五百多种协议解析。很难想象如此多的人开发的代码可以很好的融入系统中;并且在系统中加入一个新的协议解析器很简单,一个不了解系统的结构的新手也可以根据留出的接口进行自己的协议开发。这都归功于Wireshark良好的设计结构。事实上由
15、于网络上各种协议种类繁多,各种新的协议层出不穷。一个好的协议分析器必需有很好的可扩展性和结构。这样才能适应网络发展的需要不断加入新的协议解析器。TcpDump:顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。用尽量简单的话来定义TcpDump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。TcpDump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的
16、工具之一。EtherPeek:这个工具软件开始只是一个网络分析器型的数据包监测软件,经过这些年的发展已经成为一个真正的网络管理工具并具有网站监视和分析等新的功能,被美国联邦调查局用来追踪逃犯、贩卖毒品的人、电脑黑客和一些被怀疑为外国间谍的人。是一个直观,功能强大的以太网网络和协议分析器。支持Macintosh和Windows平台。EtherPeek把查找和修复多平台上的复杂网络任务变得简单化。EtherPeek采用工业标准,非常容易使用,提供解码、过滤和诊断网络的功能。以友好图形界面出名,EtherPeek提供非常详细且多样化的网络使用信息,网络结点的会话和数据包内容。在有问题的局域网络中使用
17、EtherPeek执行一个自定的诊断测试,监控网络的通信和事件,跟踪非法的网络活动,测试和调试网络软硬件。2 网络数据包协议分析程序的总体设计2.1 网络数据包协议分析程序的功能分析对于网络数据包协议分析程序进行功能分析的第一步是要确立程序所要实现的目标,也就是程序最终要解决的问题。本程序所要实现的目标就是在共享式以太网中捕获根据过滤规则设置的流经本地网卡的数据包,并且对数据包中的信息进行分析。网络数据包协议分析程序必须完成对常用协议的识别和分析:要求至少实现TCP/IP协议簇几个基本协议的分析(ARP、RARP、TCP、UDP),以及应用层的常用协议分析。为了减少设计的复杂度,程序采用字符界
18、面。对网络数据包的捕获、规则过滤和对数据包的分析是本程序的主要功能。2.2 系统的组成结构和工作流程2.2.1 系统的结构框图基于以上分析,本文设计了网络数据包协议分析程序,图2-1是程序的结构框图。Fedora Core Linux 4数据包捕获应用程序接口数据包处理图2-1网络数据包协议分析程序结构框图下面对该程序的整体结构进行一下描述:该程序的运行环境是Fedora Core 4 linux。Fedora Core是linux的一个发行版,他的前身是Redhat linux。本程序通过调用安装在linux上的Libpcap函数库抓取经过本地网卡的数据包,从而完成数据包的捕获。然后将捕获后
19、的数据包交给上层的数据处理模块,进行协议分析。最后将分析后的数据显示在用户界面上。2.2.2 系统的结构和功能网络数据包的协议分析程序是一个基于Libpcap开发库,应用与共享以太网的网络分析程序如图2-2所示,系统主要包括4大模块:网络数据报协议分析程序输入数据捕获规则匹配数据处理协议分析输出图2-2网络数据包的协议分析程序的层次图1、数据输入模块。该模块主要功能是接收用户输入用于捕获数据包的信息。其中包括选择用于捕获的网络接口和需要过滤的内容。2、数据捕获模块。该模块的主要功能是捕获流经本地网卡的所有数据。其原理是通过把网卡设置为混杂模式,使得网卡对所有流经它的数据包都交给上层程序处理。3
20、、规则匹配模块,该模块的主要功能是根据用户的需求对需要捕获的数据包进行过滤设置。因为不是所有经过本地网卡的数据报都对我们分析网络有用,而且如果将所有经过网卡的数据捕获会增加系统的开销。因此我们设置了一个规则匹配模块,当所捕获的信息与我们设置的规则相符时我们就把它交给数据处理模块,否则就丢弃。4、数据处理模块。该模块的主要功能是对捕获的数据进行分析显示处理。主要是调用协议分析模块和显示模块。41 协议分析模块。该模块的主要功能是对捕获的数据包进行协议分析。把数据包捕获下来后,我们需要对其分析才能知道网络中存在的安全问题。该模块主要是对TCP/IP各层的协议进行分析。42 显示模块。该模块的主要功
21、能是将分析的结果显示给用户。对数据包进行协议分析后要把结果显示给用户本程序才结束。因为数据包中包含的信息太多,如果全部显示给用户有所不便,所以我们挑选其中比较重要的信息输出给用户。2.2.3 程序的工作流程图2-3为本程序的流程图,下面其进行简要的叙述:1、程序开始时首先查找计算机上所有可用的网卡,并让用户选择用于捕获数据包的网卡。2、用户输入用于捕获数据包的网卡和过滤规则。只过滤用户所关心的信息。3、程序判断该网卡所在的网络是否为以太网,不是则中止,是则继续。因为本程序只能在共享以太网中进行数据捕获。4、编译用户设置的过滤规则。5、开始进行捕获,并分析数据,将数据显示给用户。当用户停止时就结
22、束程序,否则继续捕获。查找所有可用的网卡是否是以太网编译并且设置过滤规则开始捕获数据并分析显示结果结束程序用户中止吗?选择用于捕获的网卡和过滤规则开始NYNY图2-3 网络数据包的协议分析程序的流程图2.3 系统实现的关键技术分析前面给出了网络数据包协议分析程序的总体结构、功能模块和工作流程。要实现程序预定的功能,就必须解决实现程序的关键技术。网络数据包协议分析程序要实现的关键技术包括:数据包捕获技术、对TCP/IP各层基本协议进行分析的技术、协议识别技术。1、数据包捕获技术:本程序要对网络中的数据进行分析,首先就要将网络中的数据包捕获下来。因此实现数据包捕获是本程序设计的基础也是首先要解决的
23、技术问题。要实现共享以太网中的数据捕获,各个平台有不同的技术。在Linux有一个专门为程序员编写数据包捕获程序而开发的库:Libpcap。Libpcap是用户态的数据包截获API,具有独立性和可移植性,支持BPF过滤机制等。通过调用Libpcap库函数可以轻易的实现共享以太网中数据包的截获,而且实时性相当的强,因为Libpcap是处于用户态所以减少了系统的开销。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进。2、对TCP/IP各层基本协议分析的技术:要对TCP/IP各层的基本协议进行分析,主要是要对所要分
24、析的协议有充分的了解,特别是对各种协议的报头格式要有深入的了解。对各种协议进行分析时主要是将报头中的重要信息显示给用户,还有可能对数据包的正文信息解码。3、协议识别技术:由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议的识别需要从下至上进行。例如,首先对网络层的协议识别后进行脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层。应用层以下的各种协议一般都可以通过下一层的协议中的关键信息来识别。但是应用层的协议种类相当多,无法从下层协议中识别。对于应用层协议识别的方法目前有几种技术:基于特征串的应用层协议识别、Venus Fast Protocol Reco
25、gnition、以及端口识别。在本程序中我们采用的是端口识别技术。端口识别的原理是常用协议使用固定端口来进行通信。端口识别的优点是:简单、容易实现。缺点是:一些不常用协议不能被识别,常用协议修改端口后也无法识别。3 网络数据包捕获模块的实现3.1 网络数据包捕获简介网络数据包截获一般指通过截获整个网络的所有信息流量,根据信息源主机,目标主机,服务协议端口等信息简单过滤掉不关心的数据,再将用户感兴趣的数据发送给更高层的应用程序进行分析。一方面要,网络截取模块要能保证截取到所有网络上的数据包,尤其是检测到被分片的数据包(这可能蕴涵着攻击)。另方面,数据截取模块截取数据包的效率也是很重要的。它直接影
26、响整个入侵检测系统的运行速度。从广义的角度上看,一个包捕获机制包含三个主要部分:最底层是针对特定操作系统的包捕获机制,最高层是针对用户程序的接口,第三部分是包过滤机制。不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序。而数据包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。值得注意的是,包捕获机制并不影响操作系统对数据包的网络栈处理。对用户程序而言,包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得
27、所期望的数据包。这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。3.2 基于Libpcap的网络数据包捕获的实现3.2.1 Libpcap安装Libpcap提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性。Libpcap可以在绝大多数类unix平台下工作。在windows平台下,一个与Libpcap很类似的函数包winpcap提供捕获功能,其官方网站是http:/winpcap.polito.it/ Libpcap软件包可从http:/www
28、.tcpdump.org/下载,解压后依此执行下列三条命令即可安装。./configuremakemake install但如果希望Libpcap能在linux上正常工作,则必须使内核支持“packet”协议,也即在编译内核时打开配置选项CONFIG_PACKET(选项缺省为打开)。3.2.2 Libpcap中基本的数据结构和函数主要函数:int pcap_findalldevs(pcap_if_t *alldevsp, char *errbuf)功能:枚举系统所有网络设备的信息参数:alldevsp:是一个pcap_if_t结构体的指针,如果函数pcap_findalldevs函数执行成功,
29、将获得一个可用网卡的列表,而里面存储的就是第一个元素的指针。Errbuf:存储错误信息的字符串。返回值:int,如果返回0则执行成功,错误返回-1。pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)功能:设置一个抓包描述符参数:其第一个参数是我们在上一节中指定的设备,snaplen是整形的,它定义了将被pcap捕获的最大字节数。当promisc设为true时将置指定接口为混杂模式(然而,当它置为false时接口仍处于混杂模式的特殊情况也是有可能的)。to_ms是读取时的超时值
30、,单位是毫秒(如果为0则一直嗅探直到错误发生,为-1则不确定)。最后,ebuf是一个我们可以存入任何错误信息的字符串(就像上面的errbuf)。int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)功能:编译过滤规则参数:第一个参数是会话句柄(pcap_t *handle在前一节的示例中)。接下来的是我们存储被编译的过滤器版本的地址的引用。再接下来的则是表达式本身,存储在规定的字符串格式里。再下边是一个定义表达式是否被优化的整形量(0为false,1为tr
31、ue,标准规定)。最后,我们必须指定应用此过滤器的网络掩码。函数返回-1为失败,其他的任何值都表明是成功的。int pcap_setfilter(pcap_t *p, struct bpf_program *fp)功能:设置过滤规则。参数:这非常直观,第一个参数是会话句柄,第二个参数是被编译表达式版本的引用(可推测出它与pcap_compile()的第二个参数相同)。int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)功能:循环抓包直到用户中止。参数:第一个参数是会话句柄,接下来是一个整型,它告诉pcap_
32、loop()在返回前应捕获多少个数据包(若为负值则表示应该一直工作直至错误发生)。第三个参数是回调函数的名称(正像其标识符所指,无括号)。最后一个参数在有些应用里有用,但更多时候则置为NULL。数据结构:struct pcap_ifstruct pcap_if *next;char *name;char *description;struct pcap_addr *addresses;u_int flags;pcap_if *next; 如果非空,指向链的下一个元素。如果为空是链的最后一个元素。char *name; 指向一个字符串,该字符串是传给pcap_open_live()函数的设备名;
33、char *description; 如果非空,指向一个对设备的人性化的描述字符串。pcap_addr *addresses; 指向网卡地址链中的第一个元素。u_int flags; PCAP_IF_网卡的标志。现在唯一可用的标识是PCAP_IF_LOOKBACK,它被用来标识网卡是不是lookback网卡。struct pcap_pkthdr struct timeval ts;/*time stamp*/bpf_u_int32 caplen; /*length of portion present*/bpf_u_int32 len; /*length this packet(off wir
34、e)*/;timeval ts; 数据报时间戳;bpf_u_int32 caplen; 当前分片的长度;dpf_u_int32 len; 这个数据报的长度;细节描述:在dump文件中的每个数据报都有这样一个报头。它用来处理不同数据报网卡的不同报头问题。struct pcap_stat u_int ps_recv; /* number of packets received */u_int ps_drop; /* number of packets dropped */u_int ps_ifdrop; /* drops by interface XXX not yet supported */;
35、u_int ps_recv; 接受数据报的数目;u_int ps_drop; 被驱动程序丢弃的数据报的数目;u_int ps_ifdrop; 被网卡丢弃的数据报的数目;struct pcap_addrpcap_addr * next;sockaddr * addr;sockaddr * netmask;sockaddr *broadaddr;sockaddr *dstaddr;pcap_addr * next; 如果非空,指向链表中一个元素的指针;空表示链表中的最后一个元素。sockaddr * addr; 指向包含一个地址的sockaddr的结构的指针。sockaddr * netmask;
36、 如果非空,指向包含相对于addr指向的地址的一个网络掩码的结构。sockaddr * broadaddr; 如果非空,指向包含相对于addr指向的地址的一个广播地址,如果网络不支持广播可能为空。sockaddr * dstaddr; 如果非空,指向一个相对于addr指向的源地址的目的地址,如果网络不支持点对点通讯,则为空。3.3 数据捕获模块的实现第一步调用pcap_findalldevs查找出所有可用的网卡,显示出来,并接收用户选择网卡。第二步用户输入用于捕获数据包的网卡后,调用pcap_open_live生成一个抓包描述符。第三步通过调用pcap_datalink检查该网卡所在网络是不是
37、以太网,如果不是则中止程序。第四步接收用户输入的过滤条件,调用pcap_compile和pcap_setfilter生成过滤规则。第五步调用pcap_loop进行循环捕获数据包,直到用户中止。具体流程入下图所示:pcap_findalldevs ()pcap_open_live ()pcap_datalink ()pcap_compile()pcap_setfilter()pcap_loop()endBeginNY图3-1数据捕获模块流程图4 协议分析模块的实现虽然到此为止已经可以顺利完成数据包的监听工作,但这并不意味着己经大功告成了,因为从前面的数据包监听的原理中可以知道,数据包捕获程序工作
38、在网络底层,将网卡设置为混杂模式以后,从网络底层捕获到的数据包会直接往上发给应用程序进行处理,而不再像普通的数据包那样经过操作系统的层层过滤。这样一来,应用程序收到的数据包是最原始的数据包,也就是说监听主机接收到的数据包中,除了数据包本身的内容之外,还带有从对方主机中的传输层、网络层以及数据链路层的数据包头信息,所以要想获得数据包里的应用数据,是需要我们自己来按照每一层的协议剥离数据包头中的每一层首部内容的,这就是协议分析需要完成的工作。4.1 网络协议分析的总体流程网络功能的分层带来了网络协议的层次结构,网络数据在传送时,同样也是被分解成一个个的数据报逐层传送的,在两台主机的实际通信过程中,
39、从逻辑上讲,是两台主机的对等层直接通信。而实际上,数据包并不是从某一计算机网络系统的第N层直接传导另一计算机网络系统的第N层的,而是从这台计算机的某一层直接传送N十1层,直至到达物理层最后分解为比特流流经物理介质到达另一台计算机,然后在从另一台计算机中的底层逐层向上传送的。当数据包被传输到某一层的时候,该层都会对数据包进行加工,在发送方通常是加上一个与该层协议有关的控制或标志信息,即数据包的包头或包尾;而在接受方则是需要逐层拆下本层标志,即去掉数据包的包头或包尾,根据控制信息进行相应的处理,将分解后的数据报逐层上传,直至应用程序获得最终数据。比如发送方在数据链路层通常会在包头加上目的MAC地址
40、、源MAC地址、其他一些具体网络信息及帧定界符,在包尾加上循环冗余码,并使用字节填充或位填充,由接收方数据链路层去掉包头与包尾进行相关解释工作。数据包的加工工作如图4-1所示:应用程序TCPIP以太网驱动程序用户数据用户数据APP首部应用数据TCP首部应用数据TCP首部IP首部应用数据TCP首部IP首部以太网头以太网尾图4-1 数据封装示意TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP Segment);IP传给网络接口层的数据单元称作IP数据报(IP datagram);通过以太网传输的比特流称作帧,分组既可以是一个IP数据报也可以是IP数据报的一个片(fragment)。
41、协议分析就是数据封装的逆过程。协议分析的流程图如图4-2所示:开始读取原始数据报文提取并分析链路层报头提取并分析IP地址信息提取并分析TCP/UDP地址信息根据端口判断应用层协议显示提取报头中的主要信息结束显示图4-2 网络协议分析流程图从图可以看到,对于监听程序捕获到的数据报,需要按以下步骤分层次进行协议分析:(1)首先是读取数据链路层的报头,从报头中可以得到:计算机的源MAC地址和目的MAC地址、数据包的长度以及上层协议的类型。(2)然后需要去掉数据链层的报头,此时可以获得IP数据报、arp、rarp数据包,在这一层中可以对IP数据报做一定的统计和分析等等;对arp、rarp数据包可以获得
42、发送端IP和目的IP等重要信息。(3)对于IP数据报去除网络层的报头以后,可以获得传输层数据报,对TCP/UDP数据包的报头进行分析在这一层中还可以获得数据报的端口号信息,根据端口号进一步判断数据报属于何种应用层协议。(4)对数传输层数据报去除掉传输层报头以后,就获得了应用层数据报,在应用层进行协议分析的工作就是按照应用层的工作原理、协议规范,还原获得应用层的内容,如SMTF/POP3协议分析可以还原出正在传输的邮件信息,FTP协议分析可以还原出传输中的文件名以及用户名口令密码等信息,HTTP协议分析可以还原出目标主机浏览网页的原貌等等。(5)对所有的数据报头分析处理后,取出其中的主要信息然后
43、显示给用户。4.2 对TCP/IP模型中各层协议的分析前面的内容已经提到过,我们在对数据包根据应用层协议进行分析的时候都需要首先剥离数据包中的包头并且需要根据包头信息判断是何种应用层协议。下面就按照数据链路层、网络层到传输层再到应用层的顺序详细的讲解每层包头的结构以及如何对每层的数据报进行协议分析。4.2.1 以太网首部的分析与提取因为每一个使用Libpcap捕获的数据包,都会有一个指向原始报文头的指针。假设这个指针为p。把这个指针强制转换为以太帧格式:(struct ether_header *) p。我们就得到了以太帧的报文头,就可以对该层协议进行分析和处理。由于在定义IEEE 802.3
44、以前,以太网就存在,因为有多个以太网标准,所以TCP/IP可以支持多种不同的链路层协议,如以太网、令牌环网、FDDI(光纤分布式数据接口)等。以太网是当今TCP/IP采用的主要的局域网技术,它采用一种称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(Carrier Sense Multiple Access with Collision Detection),发送端在传输之前要侦听信道。在以太网内的IP和ARP数据报或者使用以太网II的或者使用IEEE:802.3子网访问协议(SNAP)来封装数据。这里我们只讨论最为常用的以太网II数据报格式,这是在RFC894中定义的,
45、如图4-3所示,这是以太网II的封装格式:字节 6 6 2 461500 4目的地址源地址类型数据FCS图4-3以太网II的封装格式其中每个字段的含义如下:(1)帧初始同步(Preamble):8字节长,提供接收端的同步和分隔帧的功能。需要注意的是,帧初始同步字段在网络监视器中是不可见的。(2)目的地址(Destination Address):6字节长,指明目的地址。目的地址可以是单播、多播或者以太网的广播地址。其中,单播地址也称为MAC地址。(3)源地址(Source Address):6字节长,指明发送节点的单播地址。(4)以太网类型(Ether Type):2字节长,指明在以太网帧中上
46、层协议的类型。这个字段被用来将以太网的有效载荷传给正确的上层协议实体。如果在该字段中未注明有上层协议实体接收有效载荷帧。该帧将被丢弃。比如,对于IP数据报,这个字段的值为0x0800;对于ARP消息,该字段的值被设置为0x0806。(5)有效载荷(Payload):以太网II的帧的有效载荷由上层协议的协议数据单元组成,是数据包本身的具体内容。以太网II能发送最大1500字节的有效载荷。因为以太网具有冲突检测机制,以太网II的最小帧有效载荷为46字节。如果上层的协议数据单元小于46字节,则必须填充到46字节。(6)帧校验序列(Frame Check Sequence, FCS):4字节长,提供位级别的完整性校验,也被称为循环冗余校验(CRC)。本子段对于网络监视器来说同样是不可见的。4.2.2 IP首部的分析与提取因为以太帧报头的长度都是一样的。所以在提取IP包头的时候可以将指针P加上以太帧包头的长度后,把格式强制转化为IP包头格式即:(struct ip *) (p + sizeof (struct ether_header)。就得到了指向IP报头的指针,我们就可以进行相应的分析了。