局域网监听系统的设计与实现论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
局域网中的网络监听系统的设计与实现
摘要
随着计算机网络技术的迅速发展,网络的安全问题也显得越发重要。
网络监听技术是系统安全领域内一个非常敏感的话题,也是一项重要的技术,具有很强的现实应用背景。
网络监听是网络监测、负载分析等管理活动常用的方法,同时也是黑客非法窃取信息的手段。
网络监听工具通过网络传输介质的共享特性实现抓包,获得当前网络的使用状况,为网络管理员对网络中的信息进行实时的监测、分析提供一个合适的工具;同时也让黑客截获本网段的一些敏感信息,威胁网络安全。
数据包捕获技术是设计网络分析软件的基础,而WinPcap则是Windows系统中实现的一个优秀的包捕获架构。
文中结合该软件包的结构与功能对包捕获原理进行了详细的分析,并介绍了其在网络安全监控系统中的应用。
该系统的基本原理是通过调用WinPcap库捕获本地网络上的所有数据包,然后对数据包进行协议分析,从而可以实时地监控网络。
关键词:网络监听;WinPcap;包捕获;协议分析
Design and Implementation of Network Sniffing
System in LAN
Abstract
With the rapid development and extensive application of computer network technology, the security problem of network becomes more important. Network sniffer is an important issue and technique in the domain of system security, so it has strong realism application background. Network sniffer is a way which is used in network monitor, load analysis; at the same time it is also a way which is used by hacker to get the information illegally. Network sniffer tools snap packets to get the network’s current status by the shared characteristic of the network transmission medium. It provides a useful tool for network manager which can help them inspect and analyze the information of network; simultaneously hackers also get some important information, so threaten system security.
Packet capturing technology is the basis for designing analyzing software. WinPcap is one of the excellent packet capturing architectures under Windows. This paper analyzes packet capturing principle in detail combined with the structure and functions of the software and introduces its application in designing a network security and watch system. The fundamental principle of this system is to capture all packets of the local network using WinPcap library, and perform protocol analyzing and decoding on these packets, so can monitor the network on real-time and find its problem and alarm automatically. The result from the application in LAN also confirms that the system is steady and very effective.
Key words:Network Sniffer; WinPcap; Packet capture; Protocol Analysis
目录
论文总页数:30页1引言 (1)
1.1课题背景 (1)
1.2研究现状 (2)
2网络监听技术综述 (3)
2.1网络监听概念 (3)
2.2以太网监听的原理 (3)
2.3WinPcap的原理 (4)
2.4综述 (7)
3相关网络协议的分析 (7)
3.1网络的原理体系结构 (7)
3.2网络协议的分析与实现 (8)
3.2.1链路层 (8)
3.2.2网络层 (9)
3.2.3传输层 (12)
3.3小结 (16)
4局域网监听系统的设计及实现 (16)
4.1局域网监听系统的设计 (17)
4.1.1功能设计 (17)
4.1.2模块设计 (17)
4.2局域网监听系统程序的实现 (19)
4.2.1数据包的捕获 (19)
4.2.2数据包的分析 (21)
4.2.3数据流量的统计 (23)
4.2.4实现过程中的难点和解决 (24)
4.3系统程序运行 (25)
结论 (27)
参考文献 (27)
致谢 (29)
声明 (30)
1引言
随着Internet的迅猛发展和信息社会的到来,网络已经影响到社会的政治、经济、文化、军事和社会生活的各个方面。
以网络方式获取信息和交流信息已成为现代信息社会的一个重要特征。
同时,随着人们对网络信息系统依赖的日益增强,网络正在逐渐改变人们的工作方式和生活方式,成为当今社会发展的一个主题。
但必须看到,紧随信息化发展而来的网络安全问题日渐凸出,如果不很好地解决这个问题,必将阻碍信息化发展的进程。
国际标准化组织(ISO)将计算机安全定义为:为数据处理系统建立和采取的技术和管理的安全保护,保护计算机硬件、软件数据不因偶然和恶意的原因而遭到破坏、更改和泄漏。
由此可以将计算机网络的安全理解为:通过采用各种技术和管理措施,使网络系统正常运行,从而确保网络数据的可用性、完整性和保密性。
所以,建立网络安全保护措施的目的是确保经过网络传输和交换的数据不会发生增加、修改、丢失和泄露等。
因此,在这样一个迫切需要网络安全的信息社会里,积极的研究和探索网络安全问题是一件非常有意义的事情,通过研究网络监听系统来进行具体的网络安全研究工作是非常必要的。
1.1 课题背景
随着Internet应用的日益普及,Internet技术广泛应用于各行各业,为资源共享、信息交换和分布处理提供了良好的环境。
计算机网络具备分布广域性、体系结构开放性、资源共享性和信道共用性的特点,因此增加了网络的实用性,同时也不可避免地带来系统的脆弱性,使其面临严重的安全问题。
现在人们对计算机信息安全要求越来越高,随着计算机网络的资源共享进一步加强,随之而来的网络安全问题使得计算机网络安全保护将会变得越来越重要。
网络监听是信息安全领域内一项非常重要和实用的技术,它的起源是网络管理员为了诊断网络故障的需要,而监听网络中传输的数据信息。
在网络管理和维护中,网络管理和维护人员常常利用网络监听技术监控网络当前的信息状况、网络流量,进行网络访问统计分析等等。
更重要的是,可以发现网络中存在的漏洞和隐患,提高网络和系统的安全性。
但在实际应用中,网络监听技术往往被黑客加以利用,用来窃取网络用户的机密资料。
对于一般网站来说,被网络监听往往意味着用户个人隐私资料的丢失;而对于金融机构,恶意的网络监听更会带来难以弥补的金钱和信用损失。
在防范网络攻击方面,通过数据截取及分析输出结果可以捕获到透过防火墙而进入网络的非法数据,成功的监视记录黑客的入侵过程,保障网络的安全。
而且数据截取和协议分析是入侵检测系统的重要部分,是入侵检测系统的最基础的
环节。
因此网络监听无论是在网络攻击还是安全防御方面都扮演着重要的角色。
1.2 研究现状
在信息技术快速发展的今天,信息安全已经成为当前计算机研究一个主要领域。
网络安全分为内部网络安全和外部网络安全,一般都采用防火墙或者在网络设备上设置参数隔离的方法对外部信息的恶意攻击进行监控,检测和阻止来保证外部网络的安全性;内部网络安全主要采取对网络活动的跟踪监控,提高对网络信息过滤的能力。
对内部网络监控目前主要采用的是网络监听技术,自从这一技术诞生以来产生的大量的可工作在各种平台上相关软硬件工具,管理员使用这种网络监听工具,可以监视网络的状态,数据流动的情况以及网络上传输的信息,起到防止攻击或克服内部网络缺陷的作用。
在网络上,网络监听效果最好的地方是在网关、路由器、防火墙一类的设备处,通常由网络管理员来操作。
使用最方便的是在一个以太网中的任何一台上网的主机上,它可以在不同的操作平台上进行监听。
目前有很多能实现监听功能优秀软件:
1)Sniffit:由Lawrence Berkeley实验室开发,运行于Solaris、SGI和Linux 等平台。
可以选择源、目标地址或地址集合,还可选择监听的端口,协议和网络接口等。
2)NetXRay:在Windows9X和WindowsNT上,NetXRay是一个功能强大、使用方便的协议分析和网络监控工具。
它是一个优秀的软件,能监控多个网段,并且允许多监控实例存在,同时还能捕捉所需要的任何类型的报文。
使用NetXRay还可以设置许多过滤条件,而且其操作界面也比较漂亮。
3)Tcpdump:Tcpdump是网络管理员的强大监听工具。
它是从应用程序中读入网络上有关的大量分组信息,与指定准则进行匹配来过滤这些分组信息。
但是UNIX平台上的监听软件,界面都不是很友好,操作性不强。
4)WinPcap:WinPcap是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows 操作平台上来实现对底层包的截取过滤。
WinPcap为用户级的数据包提供了Windows下的一个平台。
目前使用的最多的是Sniffit、WinPcap监听软件,由于在Unix和Linux系统中,发送这些命令需要超级用户的权限,这一点限制了在UNIX系统中,普通用户是不能进行网络监听的,只有获得超级用户权限,才能进行网络监听,而在Windows操作系统中,则没有这个限制,只要运行这一类的监听软件即可;目前网络数据捕获器大多数是基于过滤器技术来实现的,大多数的过滤程序都是建立在伯克利实验室的Libpcap基础之上的。
因此本文涉及的是在以太网环境下并在Windows操作系统中,使用数据捕获器WinPcap这一软件实现对底层数据进行监
听。
由监听技术发展的现状来看,目前主流的网络监听工具软件几乎都是国外生产的软件。
随着中国信息技术的发展,监听系统必将大有用武之地,因此监听技术的研究势在必行。
2网络监听技术综述
2.1 网络监听概念
网络监听器俗称嗅探器(Sniffer),它是一种与网络安全性密切相关的应用工具。
它的完整定义是——利用计算机的网络接口截获目的地为其它计算机的数据报文的一种工具。
在应用中,网络管理员可以使用网络监听器获取网络的当前流量状况;程序员可以利用监听器来监视网络程序的运行状态;对于黑客而言,网络监听工具也是黑客的常用工具。
当信息以明文的形式在网络上传输时,便可以使用网络监听的方式来进行攻击。
将网络接口设置在监听模式,便可以源源不断地将网上传输的信息截获。
网络监听可以在网上的任何一个位置实施,如局域网中的一台主机、网关或远程网的调制解调器之间等。
黑客用得最多的是截获用户的口令。
当黑客成功地登录进一台网络上的主机,并取得了该主机的超级用户权限后,往往要扩大战果,尝试登录或者夺取网络中其他主机的控制权。
而网络监听则是一种最简单且最有效的方法,能轻易地获得用其他方法很难获得的信息。
在网络上,监听效果最好的地方是在网关、路由器、防火墙一类的设备处,通常由网络管理员来操作。
使用最方便的是在一个以太网中的任何一台上网的主机上,这也是大多数黑客的做法。
2.2 以太网监听的原理
以太网(Ethernet)具有共享介质的特性,信息是以明文的形式在网络传输,当网络适配器设置为监听模式(混杂模式,Promiscuous)时,由于采用以太网广播信道争用和共享介质的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。
IEEE802.3标准的以太网采用的是持续CSMA的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点都可以获得其他站点发送的数据。
运用这一原理使得信息捕获系统能够拦截我们所要的信息,这是捕获数据包的物理基础。
以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成的,各个站点采用上面提到的CSMA/CD协议进行信道的争夺和共
享。
由每个站点网卡来实现这种功能。
网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将他丢弃。
如果是为本地地址,就接收该数据帧,进行物理数据帧的CRC校验,然后将数据帧提交给LLC子层。
正常的数据包过滤机制如图2-1所示:
图2-1 正常的数据包过滤机制
网卡具有如下的几种工作模式:
广播模式:它的物理地址(MAC)地址是0Xffffff的帧是广播帧,工作在广播模式的网卡接收广播帧。
多播模式:多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。
但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。
直接模式:工作在直接模式下的网卡只能接收目的地址是自己MAC地址的帧。
混杂模式:工作在混杂模式下的网卡接收所有流过网卡的帧,数据包捕获过程就是这种模式下进行的。
网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。
如果采用混杂模式,一个站点的网卡将接收同一个网络内所有站点所发送的数据包,这样就能达到对于网络监听的目的。
2.3 WinPcap的原理
各种网络安全应用系统均是基于相应的网络数据包截获函数开发而成的。
虽然Unix平台上的BSD包过滤器(BPF,Berkeley Packet Filter,伯克利数据包过滤器)提供了一组供应用程序直接调用的网络数据包截获函数,允许应用程序
与网卡间直接进行交互,但在Win32平台上,目前主要使用WinPcap体系结构。
WinPcap是LibPcap的Windows版本,它是基于Win32平台的网络包截获和分析的系统,它具有丰富的网络数据包处理函数,其功能比BSD包截获系统更强。
它包括一个内核级的包过滤器(NPF),一个底层的动态链接库(packet.dll),一个高层并且与系统无关的库(wpcap.dll)。
WinPcap是集成于Windows操作系统的设备驱动程序,它可以从网卡捕获或者发送原始数据,同时能够过滤并且存储数据包。
开发WinPcap这个项目的目的在于为Win32应用程序提供访问网络底层的能力。
它提供了以下四项功能:
l) 捕获原始数据包,包括共享网络上各主机发送/接收的以及相互之间交换的数据报;
2) 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;
3) 在网络上发送原始的数据包;
4) 收集网络通信过程中的统计信息。
图2-2 WinPcap结构图
WinPcap的基本结构沿用了BPF( Berkeley Packet Filter,伯克利数据包过滤器)几个最重要的模块:过滤器,内核级和用户级的缓存,用户级上的两种库。
WinPcap的结构如图2-2所示,主要包括三部分:
1) 内核级的网络组包过滤器(NPF)
在内核级的部分即NPF是一个经过优化的内核模式驱动器,用于对数据包进行过滤,并将这些数据包原封不动地传给用户级模块,在这个过程中包括了一些操作系统特有的代码,如时间戳、数据包长度等信息。
2) 数据包低级驱动程序库(packet.dll)
数据包驱动程序库是与Libpcap相兼容的一组用户级的函数库。
Packet.dll 用于在Win32平台上为数据包驱动程序提供一个公共的接口。
由于不同的Windows系统都有自己的内核模块和用户层模块,而packet.dll可以解决这些不同,提供一个与系统无关的API。
基于packet.dll开发的数据包截获程序可以运行于不同的Win32平台而不必重新进行编译。
packet.dll还有几个附加功能,它可用来取得适配器名称、动态驱动器加载以及获得主机掩码及以太网冲突次数等。
packet.dll和BPF均与所用的操作系统有关。
3) 数据包高级驱动程序库(wpcap.dll)
wpcap.dll是与操作系统无关的,它含有诸如产生过滤器、用户级缓冲以及包注入等高级功能。
所以,编程人员既可以使用包含在packet.dll中的低级函数直接进入内核级调用,也可以使用由wpcap.dll提供的高级函数调用,这样功能更强,使用也更为方便。
wpcap.dll的函数调用会自动调用packet.dll中的低级函数,并可能被转换成若干个NPF系统调用。
Wpcap.dll模块与Unix系统下的BSD捕获架构提供的Libpcap库完全兼容,在功能上它还增加了统计及数据包发送功能,统计功能可以快速实现对网络数据的统计,如一定时间内流经总线的数据包数目,数据字节数等,发送数据包功能使得应用程序不仅可以嗅探网络还可以实现向网络发送数据。
在Unix系统下使用Libpcap编制的程序,经过重新编译后,可以在Win32平台上直接运行,由于这个原因我们通常用Wpcap.dll 模块来设计网络监听程序。
WinPcap的API函数直接从数据链路层获取数据帧,即MAC帧。
根据网络协议的规定,对MAC帧层层分析,可以获得网络上所传输的数据内容。
整个包捕获架构的基础是NDIS(网络驱动器接口规范),它是Windows中最低端的与连网有关的软件,主要是为各种应用协议与网卡之间提供一套接口函数,包驱动器的tap函数就是通过调用这些函数实现其数据采集功能的。
WinPcap的优点在于:
1) 独立于主机协议来发送和接收原始数据包,并且提供了一套标准的抓包接口,与Lipcap兼容,可使得原来许多Unix平台下的网络分析工具可以快速移植,便于开发各种网络分析工具。
2) 充分考虑了各种性能和效率的优化,包括对NPF内核层次上的过滤支持。
3) 支持内核态的统计模式,提供了发送数据包的能力。
WinPcap的缺点在于:不能阻塞、过滤或控制其他应用程序对数据包的收发,它仅仅是监听共享网络上传送的数据。
因此,它不能用于QOS调度程序或个人防火墙。
2.4 综述
以上内容详细介绍了网络监听的原理。
监听软件可以监听局域网中传输的数据包是因为以太网是总线型网,而且在以太网中主机进行数据传输时采用子网广播的方式。
任何一台主机发送的数据包,都会在所经过的子网中进行广播。
正常情况下,主机只接收属于自己的数据包,不与其它主机发生混乱,这是计算机中的网卡工作的结果。
将网卡的接收模式进行适当改变就可以改变网卡的过滤策略,使网卡能够接收经过本网段的所有数据包,无论这些数据包的目的地址是否是该主机。
可通过调用Winpcap的API函数来改变网卡的工作模式进而截获数据包。
而且,根据网络数据过滤机制的原理,在截获数据包之前还可对数据包进行过滤,实现截获管理员感兴趣的数据的目的。
以上这些为后期的开发奠定了理论基础,为编程实现提供了指导。
3相关网络协议的分析
3.1 网络的原理体系结构
网络协议通常分不同层次进行开发,每一层负责不同的通信功能。
本局域网监听系统主要基于TCP/IP协议进行网络数据包的监听与分析的。
TCP/ IP 通常被认为是一个四层的体系结构,它包含应用层、运输层、网络层和链路层。
结构如图3-1所示:
图3-1 TCP/IP协议的四层结构
TCP/IP协议的四层结构中每一层负责不同的功能:
1) 链路层
链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。
它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
在发送数据的时,链路层的任务是将在网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送以帧为单位的数据。
2) 网络层
网络层,有时也称作互联网层,处理分组在网络中的活动。
在TCP/IP协议中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
其中IP是TCP/IP协议中最为核心的协议,所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。
3)运输层
运输层,主要是为两台主机上的应用程序提供端到端的通信。
在TCP/IP协议中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。
TCP为两台主机提供高可靠性的数据通信。
它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。
由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
而另一方面,UDP则为应用层提供一种非常简单的服务。
它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。
任何必须的可靠性必须由应用层来提供。
4)应用层
应用层是体系结构中的最高层。
应用层确定进程之间通信的性质以满足用户的需要。
这里的进程就是指正在运行的程序。
应用层直接为用户的应用进程提供服务。
在因特网中的应用层协议很多,如支持万维网应用的HTTP协议,支持电子邮件的SMTP协议,支持文件传送的FTP协议等等。
3.2 网络协议的分析与实现
3.2.1链路层
在数据链路层中分离出来的数据帧,并从帧头中得到源MAC地址、目标MAC 地址以及数据内容所用的协议。
图3-2 以太网的封装格式(RFC 894)
在TCP/IP世界中,以太网IP数据报的封装(如图3-2所示)是在RFC894[Hornig 1984]中定义的。
以太网帧由一个包含三个字段的帧头开始,前两个字段包含了物理地址,各六个字节,头部的第三个字段包含了16位的以太帧类型,帧后面是数据区。
根据帧类型可以判断是哪种数据报,一般常用的有0X0080(IP数据报)、0X0806(ARP请求/应答)、0X0835(RARP请求/应答)三种类型。
实现过程中MAC头的定义如下:
typedef struct tag_mac_header
{
u_char dadd[6];//6个字节目标地址
u_char sadd[6];//6个字节源地址
u_short mac_type;//2个字节类型
}mac_header;
3.2.2网络层
IP协议是TCP/IP协议族中最为核心的协议。
所有的TCP、UDP、ICMP数据都以IP数据报格式传输,TCP/IP协议中传输数据的基本单位为IP数据报,其结构描述如图3-3所示。
1)版本号:4位,表示目前的IP协议的版本号。
2)首部长度:4位,确定IP数据包首部字段的长度,基本单位为4字节,IP首部长度是20 个字节。
3)服务类型(TOS):8位,选择哪一种网络服务。
目前,大多数已不再使用该选项,
4)总长度:16位,指整个IP数据包的长度,是IP首部中必要的内容,它的基本单位为字节。
由于该字段长16比特,所以IP数据报最长可达65535字节。
5)标识字段:16位,唯一标识主机发送的每一个数据报,并且每发送一次数据包该字段值自动加1。
通过它可以唯一确定一个数据包是哪个进程发送,对同一个主机的多个应用程序就可以区分开来。
图3-3 IP数据报格式及首部中的各字段
6)标志域:3位,第一位为“不分片”位(DF)表示通过IP层时,即使确定要进行分片,IP不对其进行分片处理,抛弃该数据包,第3位为“更多的片”位(MF)除了最后一个分片外,其它的分片的这个域设置为1。
对TCP 则设“不分片”位的比特置1,因为TCP 有超时和重传机制。
7)片偏移:13位,以8 字节为单位表示的分片偏移。
并且通过它可对IP 数据包进行分片与重组。
8)TTL(time-to-live)生存时间字段:8位,设置了数据报可以经过多少路由器数。
它指定了数据报的生存时间。
TTL 的初始值由源主机设置( 通常为32或64 ),一旦经过一个路由器,它的值就减1。
当该字段的值为0时,数据报就被丢弃,并发送ICMP 报文通知源主机。
9)协议类型:8位,表示IP 数据包的数据部分属于什么协议。
取值:1 表示为ICMP协议
2 表示为IGMP协议
6 表示为TCP协议
17 表示为UDP协议
10)首部检验和:16位,是根据IP首部计算的检验和码。
它不对首部后面的数据进行计算。
11)任选项:是数据报中的一个可变长的可选信息。
通过以上的网络层分析在协议标识的第10个字节为6时,表示IP包的内容是一个TCPsegment,从而获得网络层TCP 的数据包。
实现过程中4Bit的IP头的定义:
typedef struct tag_ip_address
{
u_char byte1; //sizeof(u_char)==1 u_char占一个字节(8位)
u_char byte2;
u_char byte3;
u_char byte4;
}ip_address;
实现过程中IP数据报报头的数据结构如下:
//定义IP头 IP数据包=IP头+TCP数据段(或UDP数据段)
typedef struct tag_ip_header
{
u_char ver_ihl; // u_char 8位版本(4位) +头长(4位)
u_char tos;//TOS 服务类型
u_short tlen;//包总长 u_short占两个字节
u_short identification;//标识
u_short flags_fo;//标志位Flags(3位)+分段偏移(13位)
u_char ttl;//TTL
u_char proto;//Protocol
u_short crc;//校验和
ip_address saddr;//源地址
ip_address daddr;//目的地址
u_int op_pad;//选项+填充字段 u_int占4个字节 32位
//接下来是数据段,不属于IP头部
}ip_header;
ICMP经常被认为是IP层的一个组成部分。
它传递差错报文以及其他需要注意的信息。
ICMP报文是在IP数据报内部被传输的,如图3-4所示。