【编者按】:网学网计算机其他语言为您提供网络毕业论文-网络数据包的协议分析程序的设计开发参考,解决您在网络毕业论文-网络数据包的协议分析程序的设计开发学习中工作中的难题,参考学习。
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn | |||||||||||||||||||||||
1.1 系统的组成结构和工作流程 1.1.1 系统的结构框图 基于以上分析,本文设计了网络数据包协议分析程序,图2-1是程序的结构框图。
图2-1网络数据包协议分析程序结构框图 下面对该程序的整体结构进行一下描述:该程序的运行环境是Fedora Core 4 linux。Fedora Core是linux的一个发行版,他的前身是Redhat linux。本程序通过调用安装在linux上的Libpcap函数库抓取经过本地网卡的数据包,从而完成数据包的捕获。然后将捕获后的数据包交给上层的数据处理模块,进行协议分析。最后将分析后的数据显示在用户界面上。 1.1.2 系统的结构和功能 网络数据包的协议分析程序是一个基于Libpcap开发库,应用与共享以太网的网络分析程序如图2-2所示,系统主要包括4大模块:
图2-2网络数据包的协议分析程序的层次图 1、数据输入模块。该模块主要功能是接收用户输入用于捕获数据包的信息。其中包括选择用于捕获的网络接口和需要过滤的内容。 2、数据捕获模块。该模块的主要功能是捕获流经本地网卡的所有数据。其原理是通过把网卡设置为混杂模式,使得网卡对所有流经它的数据包都交给上层程序处理。 3、规则匹配模块,该模块的主要功能是根据用户的需求对需要捕获的数据包进行过滤设置。因为不是所有经过本地网卡的数据报都对我们分析网络有用,而且如果将所有经过网卡的数据捕获会增加系统的开销。因此我们设置了一个规则匹配模块,当所捕获的信息与我们设置的规则相符时我们就把它交给数据处理模块,否则就丢弃。 4、数据处理模块。该模块的主要功能是对捕获的数据进行分析显示处理。主要是调用协议分析模块和显示模块。 4.1 协议分析模块。该模块的主要功能是对捕获的数据包进行协议分析。把数据包捕获下来后,我们需要对其分析才能知道网络中存在的安全问题。该模块主要是对TCP/IP各层的协议进行分析。 4.2 显示模块。该模块的主要功能是将分析的结果显示给用户。对数据包进行协议分析后要把结果显示给用户本程序才结束。因为数据包中包含的信息太多,如果全部显示给用户有所不便,所以我们挑选其中比较重要的信息输出给用户。 1.1.3 程序的工作流程 图2-3为本程序的流程图,下面其进行简要的叙述: 1、程序开始时首先查找计算机上所有可用的网卡,并让用户选择用于捕获数据包的网卡。 2、用户输入用于捕获数据包的网卡和过滤规则。只过滤用户所关心的信息。 3、程序判断该网卡所在的网络是否为以太网,不是则中止,是则继续。因为本程序只能在共享以太网中进行数据捕获。 4、编译用户设置的过滤规则。 5、开始进行捕获,并分析数据,将数据显示给用户。当用户停止时就结束程序,否则继续捕获。
图2-3 网络数据包的协议分析程序的流程图 1.2 系统实现的关键技术分析 前面给出了网络数据包协议分析程序的总体结构、功能模块和工作流程。要实现程序预定的功能,就必须解决实现程序的关键技术。网络数据包协议分析程序要实现的关键技术包括:数据包捕获技术、对TCP/IP各层基本协议进行分析的技术、协议识别技术。 1、数据包捕获技术:本程序要对网络中的数据进行分析,首先就要将网络中的数据包捕获下来。因此实现数据包捕获是本程序设计的基础也是首先要解决的技术问题。要实现共享以太网中的数据捕获,各个平台有不同的技术。在Linux有一个专门为程序员编写数据包捕获程序而开发的库:Libpcap。Libpcap是用户态的数据包截获API,具有独立性和可移植性,支持BPF过滤机制等。通过调用Libpcap库函数可以轻易的实现共享以太网中数据包的截获,而且实时性相当的强,因为Libpcap是处于用户态所以减少了系统的开销。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进。 2、对TCP/IP各层基本协议分析的技术:要对TCP/IP各层的基本协议进行分析,主要是要对所要分析的协议有充分的了解,特别是对各种协议的报头格式要有深入的了解。对各种协议进行分析时主要是将报头中的重要信息显示给用户,还有可能对数据包的正文信息解码。 3、协议识别技术:由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议的识别需要从下至上进行。例如,首先对网络层的协议识别后进行脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层。应用层以下的各种协议一般都可以通过下一层的协议中的关键信息来识别。但是应用层的协议种类相当多,无法从下层协议中识别。对于应用层协议识别的方法目前有几种技术:基于特征串的应用层协议识别、Venus Fast Protocol Recognition、以及端口识别。在本程序中我们采用的是端口识别技术。端口识别的原理是常用协议使用固定端口来进行通信。端口识别的优点是:简单、容易实现。缺点是:一些不常用协议不能被识别,常用协议修改端口后也无法识别。 2 网络数据包捕获模块的实现 2.1 网络数据包捕获简介 网络数据包截获一般指通过截获整个网络的所有信息流量,根据信息源主机,目标主机,服务协议端口等信息简单过滤掉不关心的数据,再将用户感兴趣的数据发送给更高层的应用程序进行分析。一方面要,网络截取模块要能保证截取到所有网络上的数据包,尤其是检测到被分片的数据包(这可能蕴涵着攻击)。另方面,数据截取模块截取数据包的效率也是很重要的。它直接影响整个入侵检测系统的运行速度。 从广义的角度上看,一个包捕获机制包含三个主要部分:最底层是针对特定操作系统的包捕获机制,最高层是针对用户程序的接口,第三部分是包过滤机制。不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序。而数据包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。值得注意的是,包捕获机制并不影响操作系统对数据包的网络栈处理。对用户程序而言,包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望的数据包。这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。 2.2 基于Libpcap的网络数据包捕获的实现 2.2.1 Libpcap安装 Libpcap提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性。Libpcap可以在绝大多数类unix平台下工作。在windows平台下,一个与Libpcap很类似的函数包winpcap提供捕获功能,其官方网站是http://winpcap.polito.it/软件包可从http://www.tcpdump.org/下载,解压后依此执行下列三条命令即可安装。 Libpcap ./configure make make install 但如果希望Libpcap能在linux上正常工作,则必须使内核支持“packet”协议,也即在编译内核时打开配置选项CONFIG_PACKET(选项缺省为打开)。 2.2.2 Libpcap中基本的数据结构和函数 主要函数: int pcap_findalldevs(pcap_if_t *alldevsp, char *errbuf) 功能:枚举系统所有网络设备的信息 参数:alldevsp:是一个pcap_if_t结构体的指针,如果函数pcap_findalldevs函数执行成功,将获得一个可用网卡的列表,而里面存储的就是第一个元素的指针。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是读取时的超时值,单位是毫秒(如果为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为true,标准规定)。最后,我们必须指定应用此过滤器的网络掩码。函数返回-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_loop()在返回前应捕获多少个数据包(若为负值则表示应该一直工作直至错误发生)。第三个参数是回调函数的名称(正像其标识符所指,无括号)。最后一个参数在有些应用里有用,但更多时候则置为NULL。 数据结构: struct pcap_if{ struct pcap_if *next; char *name; char *description; struct pcap_addr *addresses; u_int flags; }; pcap_if *next; 如果非空,指向链的下一个元素。如果为空是链的最后一个元素。 char *name; 指向一个字符串,该字符串是传给pcap_open_live()函数的设备名; 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 wire)*/ }; timeval ts; 数据报时间戳; bpf_u_int32 caplen; 当前分片的长度; dpf_u_int32 len; 这个数据报的长度; 细节描述:在dump文件中的每个数据报都有这样一个报头。它用来处理不同数据报网卡的不同报头问题。 | |||||||||||||||||||||||
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT | |||||||||||||||||||||||
本文选自计算机毕业设计http://myeducs.cn |