硕士论文-基于Linux下的网络数据包捕获及_Webmail报文监测与重组技术的研究.doc_第1页
硕士论文-基于Linux下的网络数据包捕获及_Webmail报文监测与重组技术的研究.doc_第2页
硕士论文-基于Linux下的网络数据包捕获及_Webmail报文监测与重组技术的研究.doc_第3页
硕士论文-基于Linux下的网络数据包捕获及_Webmail报文监测与重组技术的研究.doc_第4页
硕士论文-基于Linux下的网络数据包捕获及_Webmail报文监测与重组技术的研究.doc_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

学校代码:10491 研究生学号:120080963 中国地质大学硕士学位论文基于linux下的网络数据包捕获及 webmail报文监测与重组技术的研究硕 士 生:学科专业:计算机科学与技术指导教师:二一一年五月a dissertation submitted to china universityof geosciences for the master degree of engineeringstudy of linux_based network packet caputuringand webmail monitoring and defragmentationmaster candidate:major:computer science & technologysupervisor:china university of geoscienceswuhan 430074 p. r. china中国地质大学(武汉)研究生学位论文原创性声明本人郑重声明:本人所呈交的硕士学位论文基于linux下的网络数据包捕获及 webmail报文监测与重组技术的研究,是本人在导师罗忠文教授的指导下,在中国地质大学(武汉)攻读硕士学位期间独立进行研究工作所取得的成果。论文中除已注明部分外不包含他人已发表或撰写过的研究成果,对论文的完成提供过帮助的有关人员已在文中说明并致以谢意。本人所呈交的硕士学位论文没有违反学术道德和学术规范,没有侵权行为,并愿意承担由此而产生的法律责任和法律后果。学位论文作者(签字): 日期:年月日作者简介余波,男,1979年8月生于湖北襄阳,1998年9月至2002年7月就读于哈尔滨理工大学,本科专业是计算机及应用。2008年9月考取中国地质大学(武汉)信息工程学院计算机科学与技术专业的硕士研究生,主要研究方向为计算机网络。在攻读硕士期间,完成了专业规定的硕士英语(口语、阅读、听力、写作)、自然辩证法、计算几何及现代图形学、计算机应用数学、算法设计与分析等共计11门学位课程,同时学习了空间数据库、windows组件技术与编程、高级管理学等共计6门选修课程,修满29.5个学分,成绩优秀,学位课平均分84,选修课平均分80。本人于2009年12月27日进入上海白虹武汉研发中心实习。参与了该公司网络信息取证系统的研究和开发。主要从事底层协议解析工作,负责抓取网络数据包,进行协议解析,获取webmail的详细的通讯内容,供应用查询。基于linux下的网络数据包捕获及 webmail报文监测与重组技术的研究硕士生:余波 导师:罗忠文摘 要在当今这个信息化的社会,互联网在人们的生活和工作中起着越来越重要的作用。而利用网络进行的犯罪活动也日益增多,资料泄密和非法信息的传播就是其中的一种。电子邮件作为网络上一种广泛应用的信息交换工具,也成为了资料泄密和非法信息传播的一种渠道。为了保障信息的安全,并对犯罪活动进行有效监控和取证,迫切需要对特定对象的网络的内容进行监控。本文正是在这一背景下,着重研究了对webmail的内容监控。本文围绕webmail网络内容监控系统的设计与实现,研究了数据包的捕获原理,详细说明了不同网络环境下的监听方式,介绍了linux下伯克利包过滤(bpf)机制和常用的数据包捕获函数库libpcap,针对libpcap在高速网络环境下的不足,提出了pf_ring这一解决方案。对数据包分析所需要的协议知识进行了详细的介绍,介绍了tcp/ip协议族的基本原理,和帧数据的各个协议头部的数据结构,在应用层着重探讨了webmail的应用层协议http。并以此为基础,简介了数据包的协议分析技术。针对webmail内容监控的特点,介绍了监控系统的主体程序框架,详细说明了程序实现中的几个技术要点:http报文重组、系统内存回收、http报文解压缩、利用正则表达式和相应的函数进行内容的提取以及消息体的编码转换等。本系统虽然主要是针对webmail的内容监控,但系统具有良好的扩展性,可以根据不同的需要加入其它应用层协议分析模块。关键词:网络监控;webmail;libpcap;pf_ring; linux平台study of linux_based network packet caputuringand webmail monitoring and recombination master candidate:yu bo supervisor:luo zhongwenabstractin the modern information society, the internet plays a more and more important role in peoples life. but criminal activities with the internet are increasing, for example data leakage and illegal dissemination of information. email, as a widely used network information exchange tool, also becomes a channel to data leakage and illegal dissemination of information. in order to ensure the security of information and monitor the criminal activities via the network for computer forensics, it is urgent to monitor network flow content to certain object. this paper,in this context, detailed discusses the webmail content monitoring.this thesis designs and implements the webmail monitoring system. it describes the the principle of packet capturing, details the packet capturing way under different network environment, introduces the berkeley packet filter (bpf) mechanism on the linux operation system, then illustrates the common packet capturing function library libpcap. as libpcap does not work well under high traffic network, this paper presents the solution of pf_ring.the protocols needed for packet analysis are introduced, which includes the basic principles of tcp / ip protocol family and the data structures for the protocol headset used in the network frame data. the thesis talks about a lot the http protocol which is a application layer protocol, as the webmail application is bases on the http protocol. the protocol analysis technique is introduced on the basis of the protocol knowledge.according to the characteristics of webmail content monitoring, this thesis gives the main program frame for the monitoring system. then it discusses the important parts for the implementation, such as http packets recombination, system memory recall, http message decompression, getting the content with regular expression and the corresponding function library, and the code conversion of message body, etc.although this system is mainly aimed at webmail content monitoring, the system has good expansibility and can extended the application function by adding others application protocol analysis modules.key words: network monitoring; webmail; libpcap; pf_ring; linux platform目 录第一章 绪论11.1研究背景11.2研究内容2第二章 数据包的捕获32.1数据包的捕获原理32.2数据包的捕获方式42.3 数据包捕获机制102.4 数据包捕获函数库142.4.1 libpcap函数库152.4.2 pf_ring202.5 本章小结21第三章 网络协议分析223.1 tcp/ip基本原理223.1.1基本原理概述223.1.2 以太网首部263.1.3 ip首部263.1.4 tcp首部273.1.5 udp首部293.1.6 http应用协议303.2协议分析技术323.3本章小结33第四章 数据截获和分析模块的实现344.1 主体程序设计344.2 程序实现中的几个要点364.2.1 http报文重组364.2.2 内存回收394.2.3 http报文解压缩404.2.4 邮件内容的提取414.2.5 消息体的编码转换424.3 功能扩展444.3.1 功能延伸444.3.2 协议扩展454.4 本章小结45第五章 总结与展望465.1 总结465.2 展望46致 谢47参考文献48 2011.5 中国地质大学硕士学位论文 49第一章 绪论1.1研究背景随着英特网技术的不断发展,互联网与人们的生活联系越来越紧密。而在中国,经过十几年的快速发展,互联网不仅在政府、企业,学校里得到大力应用,也早已走进千家万户。截止2010年12月,中国网民规模达到4.57亿,互联网普及率攀升至34.3%1。互联网的开发应用也不断增多。人们利用互联网的搜索引擎和网络新闻获取信息,使用网络购物、团购、网上支付、旅行预订等进行商务交易,使用即时通信、博客、微博、电子邮件进行信息沟通,使用网上游戏、网络视频等进行网上娱乐。然而,互联网络也是一把双刃剑,在人们享受网络带给人们的种种便利的同时,一些不法分子也利用网络进行各种违法犯罪活动,如利用计算机实施金融诈骗、进行盗窃、实施贪污、挪用公款、窃取国家秘密、电子讹诈、网上走私、网上非法交易等等。因此,为了遏制网络犯罪,保障国家信息安全和减少经济损失,必须对网络进行监管。事实上,绝对的互联网自由并不存在,实施必要管理,引导互联网健康发展,这已成国际共识,任何一个负责任的国家都不会对本国的互联网发展放任不管。作为国家利益和公众利益的代表,各国政府积极介入互联网管理,成立专门机构对网络进行管理。网络信息内容监控是网络管理的一个重要方面。网络信息内容监控包括许多方面,比如上网监控、网页浏览监控、邮件监控等。由于电子邮件的广泛应用,在给人们带来巨大方便的同时,某些不法分子也利用其传送非法信息。在许多企业,电子邮件已渐渐具备正式公文的性质,企业档案资料的管理已不仅限于各类纸张文挡,也包括各类来往的电子邮件。如果对电子邮件进行管理、备份,企业可更有效地管理对内对外的档案。方便的email,也可能被员工当作有意或无意泄漏机密的主要管道。据调查,美国大约四分之三的大型企业,利用特殊软件,检查员工的电子邮件,防止泄漏公司机密。电子邮件也正在变成调查犯罪的重要证据,许多案件都追查过嫌犯的电子邮件,发现他们使用的讯息类型,以及在网络上找到的讯息等。许多证券公司,都根据规定,将企业往来的电子邮件,储存一段时间。基于此,对企业电子邮件进行备份已经相当必要。网络信息内容监控的一个重点就是邮件监控。电子邮件系统通常由用户代理系统和消息传输代理系统这两个子系统组成。用户使用用户代理阅读和发送电子邮件,而消息从源端传送到目标端则依靠消息传输代理完成。webmail是通过web浏览器就可以访问的电子邮件客户端,是一个web应用程序,具有邮件用户代理功能。一般而言,webmail系统可以收发邮件,在线服务用户以及提供系统服务管理功能等。使用webmail比较简单,它的界面友好、直观,不需要建立桌面邮件客户端,而像foxmail、outlook这样的e-mail客户软件需要进行比较麻烦的配置。用户接受和发送邮件也比较方便,只要能上网就可以使用webmail,随时随地快捷的转发邮件。正是由于webmail的这些特性,e-mail才在internet上有着广泛应用。本文将主要讨论webmail的监控。1.2研究内容邮件监控需要获取一封邮件的信息,比如ip地址、收发时间、标题、发送方、接收方、邮件正文等,它需要在应用层对信息内容进行监控。网络内容监控技术主要有两个方面:1. 获取网络信息内容。研究如何在各种复杂的网络环境中快速准确获取各种协议的信息内容。数据包捕获是高速网络下内容监控系统发展的瓶颈。2. 还原信息内容。还原截获到的数据包,并分析其中的信息内容。分析还原时,需要提供会话重现功能,对捕获到的数据包进行重组、拼接,去除协商、应答、重传、包头等网络信息,获取基于会话的完整记录。本文从网络监控的特点入手,提出了webmail监控系统的设计方案,重点讨论了各种环境下数据包的捕获方式,并详细讨论了数据截获和分析中的几个技术难点。 全文共有五章,各章节组织如下: 第一章是绪论,介绍了本文的研究背景和意义,和论文的主要研究工作于整体结构。第二章主要针对数据包的捕获方式和捕获机制展开研究。作为webmail监控系统的基础,本章详细讨论了各种网络环境下数据包的捕获方式,重点介绍了bpf机制,并描述了数据包捕获函数库libpcap和pf_ring套接字。第三章详细介绍了网络协议的底层协议tcp/ip协议和应用层协议http协议。第四章介绍了监控系统的主体程序框架,重点分析了监控程序实现中的几个关键点:http报文重组、内存回收、http报文解压缩、邮件内容的获取和消息体的编码转换,并提出了系统功能扩展的一些方面。第五章总结和展望。第二章 数据包的捕获webmail监控系统先通过数据捕获模块捕获、初步过滤所有的网络数据包,定位模块进行精确过滤,定位数据包所属邮箱,重组数据包则在具体邮箱分析模块进行,数据包重组后就可根据具体的应用层协议恢复应用层的内容,最后再根据要求获得邮件的具体信息。监控系统设计的一个主要环节就是包捕获与过滤技术,在大流量的高速网络监控中,选用高效率的数据捕获与过滤技术是系统性能实现的良好基础。2.1数据包的捕获原理internet由大量的局域网所组成,这些局域网一般是以太网、令牌网结构。数据在这些网络上是以帧为单位传输,帧通过特定的网络驱动程序进行成型,然后通过网卡发送到网线上。以太网采用带冲突检测的载波帧听多路访问(csma/cd)机制。在同一个冲突域中的以太网中节点都可以收到所有被发送的帧,因此,我们说以太网是一种广播网络。而冲突域中的节点是否处理这些数据帧,需要看节点主机网卡的工作状态。当网络接口处于正常状态时,根据数据帧的真实目的地址来决定是否处理,如果目的地址为本机地址或为广播地址则接收。至于广播帧与广播通信是不同的概念。专门用于同时向网络中所有工作站进行发送的地址就是广播地址。在使用tcp/ip 协议的网络中,主机标识段host id 为全1 的ip 地址为广播地址,广播的分组传送给host id段所涉及的所有计算机。简单的说,当网络接口处于正常状态时,下面两种数据帧会被一个网络接口(网卡)响应:(1) 数据帧匹配自己的mac地址;(2)发向网络内的所有主机的广播数据帧网卡是计算机的一个组件,它工作在数据链路层。网卡,作为一个接口,在局域网中连接计算机和传输介质,每个网卡都有一个唯一的网络节点地址,也叫硬件地址、物理地址,是网卡生产厂家生产时烧入的,常叫做mac地址,绝对不会重复。网卡的主要功能有:实现与局域网传输介质之间的物理连接,进行电信号匹配,发送和接收帧,封装与拆封帧,控制介质访问,对数据进行编码和解码和缓存数据等。网络中的电脑进行相互通讯时,数据不是以流而是以帧的方式进行传输的。帧可以看做一个数据包,里面除了包含有数据信息外,还包含数据的发送地址,接收地址和数据校验等信息。网卡的驱动程序安装在计算机的操作系统中,接收数据时,驱动程序会控制网卡将局域网传送过来的数据存储在存储器的什么位置。网卡的缺省接收模式包含广播模式和直接模式,可以通过网卡驱动程序将接收模式设为混杂模式。网卡接收到数据帧后是这样处理的:网卡内嵌的处理程序检查数据帧的mac地址,根据接收模式判断是否接收该数据帧。正常情况下,只接收mac地址匹配的数据帧和广播帧,其余的帧会简单丢弃,而在混杂模式下,所有传来的数据帧都会被网卡接受。网卡独立完成这个过程,主机操作系统并没有参与。接收数据和发送数据时,网卡通常会产生中断信号通知cpu,cpu产生中断,操作系统调用网卡自己中断处理函数去调用驱动程序接收数据,这个中断函数是由网卡驱动程序注册到操作系统的中断描述符表(idt)和中断服务程序(isr)中。总之,对于网卡来说,一般有一下四种工作模式:广播模式、组播模式、直接模式、混杂模式。工作在广播模式下的网卡能接收广播帧。如果某个主机加入某个组,就可以收发同一组内的数据,没有加入该组的主机则不能收发对应的数据,但如果将网卡设为组播模式,该机器就可以接收所有的组播帧,不管该主机是否为组内成员。网卡在直接模式下只接收与自己的mac地址匹配的数据帧。混杂模式下就可以接收所有经过该网卡的数据帧。一般情况下,前三种模式是网卡的缺省配置。如果修改网卡让本机的网卡设为“混杂”模式,就可以处理所有收到的数据帧,从而可以监听同一冲突域中其它网卡的数据。在本系统中,就是将网卡设为混杂接收模式,进行网络监听。2.2数据包的捕获方式 我们在上一节分析网卡的工作模式时了解到,即时网卡工作在混杂模式下,它也只能接收到经过该网卡的数据包,对于不经过该网卡的数据包则不能监控。因此我们在对监控对象进行监控时,必须要分析监控网络的拓扑形式。监控主机的工作环境必需同网络的组建方式相适应。系统使用监听模式下,一般有以下几种连接方式。1、 共享式网络局域网内主机通过hub集线器连接。这种情况将监听主机监控口连接到集线器任何一个端口上。其网络拓扑形式如下所示: 被监测对象被监测对象集线器监控探测器互联网被监测对象 图 2.1 集线器连接在共享式网络中,一条通讯线路被所有机器共享。集线器是局域网中的基础设备,工作在osi(开放系统互连)参考模型第一层,即物理层。它没有端口的概念,以“广播”的方式发送数据。当集线器收到数据时,它向所有与它连接的每一个设备线路上发送数据。也就是说,当主机向某个目标主机发送数据包时,尽管在数据包里已说明了目标主机的mac地址,但是集线器还是会将它收到的数据包发送到与它连接的每一个节点。而在集线器连接的局域网中,一般情况下,其它主机在接收数据包时,会忽略掉与它mac地址不匹配的数据包。如果该网络中的某台主机想监听这个局域网的所有信息,可以简单的将它的网卡设为混杂模式(promiscuous)就可以监听这个局域网了。2、可网管交换式网络。局域网内的微机通过智能交换机相连,且交换机支持端口镜像(带网管的交换机大多支持端口镜像),则只需将网络监听主机的监控口与网关设备或网关电脑连接在同一台交换机上,且将网关设备所占端口的所有通信镜像到网络监听主机所接的端口,就可以实现监控。其网络拓扑形式如下图所示:被监测对象被监测对象交换机 监控探测器互联网被监测对象图 2.2 可网管交换机连接通过交换机连接的网络叫做交换式局域网。交换机工作在数据链路层,交换机内存中有一个地址对照表,交换机收到数据包后,处理端口会查找这个对照表以确定目的mac的网卡挂在那个端口上,然后将数据包传送到目的端口。在这种方式下,如果只将监听主机接到交换机端口,然后将网卡设为混杂模式,也只能捕捉到进出监听主机的数据包,其它端口的数据包并不能监听到。而可网管式交换机,具有端口镜像的功能。该功能可以让你将交换机的一个端口指定为镜像端口,然后将其它希望镜像的端口关联到这个镜像端口上。经过这样设置,经过被镜像的端口的网络数据也会复制一份到镜像端口上。当然简单的方法是将监听设备和网管设备连接在同一个交换机上,然后将监听设备所在的端口设为镜像端口,将网管设备所在的端口关联到镜像端口上,就可监听整个交换机网络。这种方式要求监听者有权限物理接触目标网络并可以调整网络设置。3、不可网管交换式网络。局域网内的微机通过非智能交换机(傻交换)相连,且网关设备上也没有合适的安装点。这时候我们需要人为的进行旁路设置,利用主机自带的一台网络流量镜像设备来实现。将内网交换机的数据通过网络流量镜像设备镜像到网络监听主机上,组成的网络拓扑图如下。 被监测对象被监测对象交换机监控探测器镜像设备互联网被监测对象路由器图2.3 不可网管交换机连接在许多交换机网络中使用的交换机,是不具有可网管功能的。要监听网络中所有的数据包,可以使用cable tap接线盒的方式。作为一种网络连接设备,cable tap的收发方式是独立进行的,与交换机的带宽相似。cable tap接入到网络中,并不影响网络的传输速度。上图就是通过这种方式将嗅探器连入网络。这种方式也要求监听者有权限物理接触目标网络并可以调整网络设置。4、交换机直连网络。在一定的特殊情况下,无法对机房总交换机进行接触,没有能够接到交换机镜像端口的条件,这种情况只有通过交换机欺骗才能拿到数据。其网络拓扑如下:被监测对象被监测对象交换机监控探测器互联网被监测对象图 24 交换机直连网络通过分析交换机的工作原理和arp协议原理,可知它们都存在一些安全上的缺陷。利用这些漏洞,进行交换机欺骗,就可使交换机根据mac地址进行端口转发的功能不会影响到网络监听。交换机的欺骗方法主要有三种:arp欺骗、mac复制、mac洪水。arp欺骗的技术比较成熟,因此最常用。下面将详细说明这三种欺骗的原理:mac洪水交换机的工作方式是:帧在进入交换机时记录下mac源地址,这个mac地址与帧进入的那个端口相关,因此以后通往该mac地址的信息流将只通过该端口发送出去。这可以提高带宽利用率,因为信息流用不着从所有端口发送出去,而只从需要接收的那些端口发送出去。mac地址存储在内容可寻址存储器(cam)里面,cam是一个128k大小的保留内存,专门用来存储mac地址,以便快速查询。如果向交换机发送大量含有虚假mac地址和ip地址的ip包,使交换机无法处理如此多的信息而引起设备工作异常,也就是所谓的“失效”模式,在这个模式里,交换机的处理器已经不能正常分析数据报和构造查询地址表了,然后,交换机就会成为一台普通的集线器,毫无选择的向所有端口发送数据,这个行为被称作“泛洪发送”,这样一来监听系统就能嗅探到所需数据了。不过使用这个方法会为网络带来大量垃圾数据报文,对于监听者来说也不是什么好事,因此mac洪水使用的案例比较少,而且设计了端口保护的交换机可能会在超负荷时强行关闭所有端口造成网络中断,所以如今,人们都偏向于使用地址解析协议arp进行的欺骗性攻击。mac复制mac地址作为网卡的唯一标识在一般情况下是不能够随意修改的,任何一个网卡都有一个mac地址,他的长度是48位,在初始时这个地址是由网卡制造商烧录进去的,理论上mac地址全球都是唯一的,不会出现冲突问题。不过由于操作系统的特殊性,我们可以通过一些参数进行修改,让操作系统识别的网卡mac地址呈现我们希望的数值,从而实现了修改mac地址的目的。在监控系统中,知道欲监控主机的mac地址后,用这个mac地址替换监听主机的mac地址。这样,就会有两个端口对应同一个mac地址,交换机就会把目的地址与这个mac匹配的数据包通过这两个端口发送出去。arp欺骗arp协议为ip地址到硬件地址提供动态的映射关系,实现将网络ip地址转化成机器mac地址。如图所示:图 2.5 ip地址到硬件地址映射的arp协议arp的高速缓存维持这种映射关系,其中存放了最近ip地址到硬件地址的映射记录。arp欺骗的实现方式与监听环境有关,有两种实现方式:局域网内arp欺骗和internet的arp欺骗在局域网里,计算机要查找彼此并不是通过ip进行的,而是通过网卡mac地址,根据协议规范,当一台计算机要查找另一台计算机时,它必须把目标计算机的ip通过arp协议(地址解析协议)在物理网络中广播出去,“广播”是一种让任意一台计算机都能收到数据的数据发送方式,计算机收到数据后就会判断这条信息是不是发给自己的,如果是,就会返回应答,在这里,它会返回自身地址,这一步被称为“arp寻址”。当源计算机收到有效的回应时,它就得知了目标计算机的mac地址并把结果保存在系统的地址缓冲池里,下次传输数据时就不需要再次发送广播了,这个地址缓冲池会定时刷新重建,以免造成数据老旧和错误。数据在发送之前需要进行封装,在网络层添加ip头(含有源ip地址,目的ip地址)形成ip数据报,然后到达链路层,如果ip数据报长度大于一帧,数据链路层会将ip数据报分割,然后添加以太网包头(含有源主机mac地址,目标主机mac地址),再由网卡进行发送。网卡工作在数据链路层,网卡只需要链路层mac地址,不需要网络层的ip地址,就可对数据包进行发送。而mac地址就是通过前面提到的arp寻址获得的。简单的说,数据在局域网内的最终传输目标地址是对方网卡的mac地址,而不是ip地址,ip地址在局域网里只是为了协助系统找到mac地址而已。当一台计算机要发送数据给另一台计算机时,它会以ip地址为依据首先查询自身的arp地址表,如果里面没有目标计算机的mac信息,它就触发arp广播寻址数据直到目标计算机返回自身地址报文,而一旦这个地址表里存在目标计算机的mac信息,计算机就直接把这个地址作为数据链路层的以太网地址头部封装发送出去。为了避免出现mac地址表保持着错误的数据,系统在一个指定的时期过后会清空mac地址表,重新广播获取一份地址列表,而且新的arp广播可以无条件覆盖原来的mac地址表。系统在指定的时期里,计算机是不会再去广播寻址信息获取目标mac地址的。利用这种机制,就可进行arp欺骗。例如在以太网中有两台主机a和b进行通信,这两台主机通过交换机连接。监控主机c给a发送一个伪造的arp应答包,告诉a它就是b,同样再给b发送一个伪造的arp应答包,告诉b它就是a。这样a和b都会误认为监控主机c的mac地址是对方的mac地址。这样,监控主机c就能同a和b建立活动连接,从而监听a和b传递的信息,而a和b却认为双方是在直接通信。只要监听主机在被监听的机器重新发送arp查询包前及时伪造虚假arp应答包就能维持着这个通讯链路,从而获得持续的数据记录,同时也不会造成被监听者的通讯异常。internet并不采用mac寻址,如果一个局域网内通过网关上网,那么连接外部的计算机上的arp缓存中就存在网关ip-mac对应记录。arp协议的作用是将ip地址映射到mac地址,监听设备通过向目标主机发送伪造的arp应答包,使目标系统更新自身的arp缓存表,将目标系统的网关的mac地址修改为监听设备的主机mac地址,使数据包都经由监听设备的主机,同时监听设备向网关发送伪造的arp应答包,欺骗网关更新自己的arp缓存表,网关发给目标主机的数据也都流经监听的主机,这样就实现了交换环境下的网络监听。在这两种监听方式中,由于监控的双方都直接将数据发送到起中转作用的监控主机上,因此可以直接使用网卡的缺省工作方式,不必将其设为混杂模式。 2.3 数据包捕获机制通常网卡在接收到网络上传来的数据包后,经过mac匹配后,产生中断信号,通知操作系统调用网卡驱动程序进行接收,然后把这些数据交给上层的协议栈进行处理。在这个过程中,根据系统设置的过滤条件,通常会丢弃一些不符合条件的数据包。对于监控系统来说,由于监控环境的复杂性,特别是在高速网络中,如果处理速度跟不上,将严重影响监控系统的性能。因此,为了提高效率,必须尽可能早的在底层截获数据包,设定过滤条件,丢弃监控系统不需要的数据包。捕获到的数据包先在操作系统的内核空间,然后再由内核空间拷贝到用户空间。因此监控系统的程序架构大体分为两部分:捕获和过滤网络数据包的内核空间部分,进行协议分析、设计用户界面的用户空间部分,在用户空间也可以设置过滤条件,在协议分析之前对数据包进行过滤。图2.6展示了一个监听系统大体框架2:图2.6 简单监听系统框架底层包的捕获机制与操作系统有关,但其实现方式大同小异。数据包有网卡接收,经操作系统调用网卡驱动程序处理,然后到达数据链路层,经操作系统的协议栈进行处理,最后交给应用程序。包捕获机制是在链路层对数据包进行旁路处理,过滤和缓冲发送和接收到的数据包,然后拷贝到应用程序。操作系统对数据包仍然进行网络协议堆栈处理,并不受包捕获机制的影响。包捕获机制的设计在最底层需要考虑操作系统的特征,包过滤机制则处于设计的中间部分,而在上层给用户程序提供了一个统一的接口,方便用户使用。包捕获机制中底层与操作系统有关的部分,用户并不可见,用户程序只考虑调用接口函数,这样使得用户程序移植性很好。总而言之,包捕获机制与操作系统有关,操作系统不同,提供的包过滤器也不同。常用的操作系统包捕获机制见表2.13。表2.1常用操作系统的包捕获机制包捕获机制系统平台备注bpfbsd系列berkeley packet filterdlpisolaris,hp-ux,sco openserverdata link providerinterfacenitsunos3network interface tapsnoopirixsnitsunos4streams network interface tapsock_packetlinux基本类似bpflsf=linux2.1.75linux socket filterdrainirix用于窃听系统丢弃的包unix上最常用的三种数据链路层访问方法为:bsd的bpf(分组过滤器)、linux的sock_packet接口和svr4的dlpi(数据链路提供者接口)。sock_packet类型的协议套接字工作在用户层,linux用它可以实现对链路层的访问的部分功能,而通常要通过编写内核驱动程序,在linux下才可对链路层进行访问。使用sock_packet建立的套接字,内核直接将网络数据交给用户而不进行处理,用户可以直接从网卡的协议栈得到数据。使用如下方式来建立sock_packet类型的套接字:socket (af_inet,sock_packet, htons(0x0003);表示建立的因特网协议族类型的套接字,该套接字在物理层截取数据帧,数据不需要网络协议栈处理,而且截取帧的类型为不确定,所有的数据包都需处理。在使用此套接字进行监听的时候,要将监听主机的网卡模式设置为“混杂”模式,才能监听到其它主机的数据。网卡的模式设置可以通过设备管理函数ioctl()来实现。其结构如图2.7所示:图2.7 基于sock_packet的捕包机制linux的sock_packet方法主要存在两个方面的不足:1)没有内核缓冲功能,在内核也不能进行过滤,它的套接口接收缓冲区一次只能接收一帧数据,每接收到一帧数据就需要调用操作系统将其从内核拷贝,传递给应用进程。这样一来它的数据包接收过程需要频繁的进行系统调用,使得系统开销很大。2)不能对设备过滤。套接口要接收来自以太网、ppp链路、slip链路等设备的数据,而不能只接收某一设备的数据,比如以太网设备。这就需要在应用进程中进行过滤,丢掉不需要关注设备的数据,这就对高速网络的监视造成了影响。4.4bsd以及源自berkeley的许多其它实现都支持bsd分组过滤器(bsd packet filter, 简称bpf)4。bpf是包括libpcap库在内的众多数据包截获系统的工作基础。目前,许多版本unix和linux平台上多数嗅探器都是基于bpf开发的。bpf工作机制如图28所示:图2.8 使用bpf捕获分组使用bpf进行监听的每一个应用进程可以装载自己的过滤器,这个过滤器是通过基于寄存器的过滤器机器作用于每一个数据包。过滤器程序可以通过这个伪机器的机器语言编写,但有一种更简单的编写方式,就是使用pcap_compile函数接口,将应用进程设定的ascii过滤字符串编译成bpf伪机器的机器语言。使用bpf在网络接口对数据链路层进行网络监听时,对于到达的数据包,网络接口设备的驱动器先不将它传递给上层的协议栈进行处理,而是先调用bpf进行数据包传递,由每个监控进程的过滤器对数据包进行过滤处理。如果这个数据包被过滤器接收,它就会传到与过滤器相连的缓存中,最后由应用进程处理时再将其从缓冲区拷贝到用户进程空间中。在数据包传到缓存后,控制权就交给链路层设备驱动程序,由上层的协议栈处理被提交上来的数据包。网络中的数据除了按内核协议栈流程传递处理,linux内核还提供了一种灵活修改网络数据的机制,在网络数据流转经过多个地点设立检查点,用户可以在这些检查点设立处理方法,数据流转这些地方的时候就会按照这些方法进行处理,然后再正常流转。linux内核中的netfilter就是基于这种机制实现的。在linux内核中,用netfilter模块实现bpf,在用户空间用iptables实现过滤。对于ipv4、ipv6等网络协议栈,netfilter在linux内核中都有相应的实现。ipv4在数据包的传递过程中设立了五个检查点,分别是nf_ip_pre_routine、nf_ip_foward、nf_ip_post_foutine、nf_ip_local_in和nf_ip_local_out。这五个点又称作五个钩子函数。内核通过这五个钩子函数完成包过滤过程5。bpf使用以下3个技术来降低开销4: (1) bpf过滤在内核进行,以此把从bpf到应用进程的数据拷贝量减到最小。(2) 由bpf传递到应用进程的只是每个分组的一段定长部分。这个长度称为捕获长度。大多数应用进程只需要分组头部而不需要分组数据。这个技术减少了由bpf拷贝到应用进程的数量。也可以根据应用的需要设置这个长度值。(3) bpf为每个应用进程分别拷贝数据,只有当缓冲区已满或读超时期满时该缓冲区中的数据才拷贝到应用进程。如此缓冲,虽然还是相同数量的分组从bpf拷贝到应用进程,但系统调用的次数大量减少,提高了数据包处理效率。每个应用进程使用两个缓冲区,由bpf维护,当应用进程从一个缓冲区拷贝数据时,接收的数据可以缓冲到另一个缓冲区。2.4 数据包捕获函数库监控程序虽然在实际的监控应用中对监控的内容可能不同,但却常常需要检查、处理和控制网络通讯的细节,比如查看通讯双方的地址,使用什么端口,服务类型是什么,有什么样的传输控制机制等。通常在网络安全监控程序中必须实现以下功能:截获数据包,分析数据报头,重写数据包甚至将通讯连接截断。对于这些常用功能和繁复的过程,一个好方法是可以写一些函数将它们封装起来,这样安全监控程序的编写可以大大简化,其性能和健壮性也可以提高。这些封装的函数以应用程序编程接口函数库的形式供开发人员使用。这样的api library有很多,像libpcap、libnet、libnids等都是类unix系统平台上比较流行的网络开发工具,它们各有不同的特点。libpcap是平台独立的分组捕获函数库,主要支持读入分组;而libnet则支持构造任意协议的分组和数据链路分组的写出;libnids7的开发是基于libpcap和libnet的,除了能够捕获网络数据包,还能重组ip碎片,重组tcp数据流,监测端口扫描攻击等。使用这些函数库,可以屏蔽网络底层编程在不同操作系统的差别,可以使开发人员集中解决开发应用中的主要问题上6。本文所论述的系统是监控系统,故下面将详细讨论libpcap.2.4.1 libpcap函数库1libpcap概述 libpcap8的英文意思是packet capture library,是一个开源的数据库,向网络抓包系统提供一个高层接口。它由mccanne,leres和jacobson在1994年设计,是一个独立于系统的用户层包捕获的api接口。虽然几乎每一个操作系统都有自己的抓包机制,但是应用程序使用libpcap就可以消除依赖于系统的包捕获模块,这样就为底层网络监控编程提供了一个易于移植的应用框架。libpcap api可以在c和c+语言里使用,然而它有许多包装方法,使得它也可以在perl、java、python等语言里使用。几乎所有的类unix操作系统都可以运行libpcap,当然也包括linux.2.libpcap的使用9使用libpcap进行网络监听,首先需要知道监听的网络接口。我们可以在程序里指明或者使用libpcap进行查找。查找网络接口的函数是char* pcap_lookupdev(char *errbuf),这个函数返回一个字符串指针,这个指针所指的字符串含有适合包捕获的第一个网络设备。如果终端用户未指明任何网络接口,就需要调用这个函数。指明网络接口,在linux中我们可以这样说明,比如eth0,一个错误的做法是使用硬编码的接口名字,这是因为它们不是跨平台可移植的。这个函数的errbuf参数所使用的缓冲空间由用户提供,在错误发生时,库函数用这个缓冲空间存储错误消息。libpcap的许多函数需要这个参数,我们必须小心分配这个缓冲空间,因为这个缓冲空间必须至少能容纳pcap_errbuf_size个字节,目前定义为256.一旦知道了网络设备的名称,我们需要打开它。函数pcap_t *pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf)用来打开网络设备。这个函数返回pcap_t类型的接口句柄,当调用libpcap的其它函数时,就需要使用这个句柄。这个函数的第一个参数是一个字符串,它含有想要打开的网络设备的名称。第二个参数是要捕捉的最大字节数。当我们仅需要捕获数据包头或者对内存有重要限制的嵌入式系统进行编程时,将这个参数设定一个较低的值比较好。通常,以太帧最大长度为1518个字节,但是其它的链路类型可能有更大的长度。但是65535这个值能够容纳任何网络上的任何一个数据包。参数to_ms规定了将捕捉的信息从内核空间拷贝到用户空间时,内核应该等待多长时间(单位是毫秒)。上下文的改变的代价是比较大的。如果我们在高速网络上捕捉数据,最好让内核让内核先把一些包缓冲在一起,然后再一起从内核空间拷贝到用户空间。如果将to_ms设为0,在没有足量的数据包到达网络设备之前,读取操作会一直等待。libpcap的文档并没有对这个数值提供任何建议。但是我们可以参考一些嗅探器设定的值,比如tcpdump使用的值为1000,而dsniff使用的值为512.参数promisc是一个标记参数,它的数值决定了网络设备是否用promiscuous模式,设为0,则网络设备是非promiscuous模式,非0数值则设定网络设备为promiscuous模式。注意,如果我们让libpcap以non-promiscuous模式监听,但接口的工作方式之前已经是promiscuous模式,接口可能仍然保持该模式。我们不能想当然的认为,此时网卡不会接收目的地址是其它主机的数据包。对于这种情况最好使用libpcap提供的过滤功能。一旦我们打开网络设备进行数据包的捕捉,我们实际上告诉pcap开始获得数据包。要获得数据包,我们有几个选择:1) 函数 const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h),这个函数需要一个由pcap_open_live返回的pcap_t句柄,和一个p

温馨提示

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

评论

0/150

提交评论