吴燕
摘要:由于计算机网络的开放性、互联性特征,网络安全及网络评估的重要性日益凸显。该设计在windows平台下实现了一个sniff网络嗅探器,该嗅探器能在多个软件平台上运行,通过对软件运行结果的分析可以获知网络流量使用情况、网络资源使用率以及网络安全规则的执行等情况。
关键词:网络嗅探器;sniff;数据包捕获;
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)24-0036-02
Abstract: Due to the openness and connectivity of network, the importance of network security and evaluation are becoming more and more important. The design and implementation of the network sniffer is in Windows platform .The sniffer software can run on multiple platforms. Analyzing the results of software, we can know the usage of network traffic, the usage of network resources and the implementation of network security rules,etc.
Key words: network sniffer; sniff; the packet capture
1 背景
随着信息技术的发展,计算机网络的广泛应用,随之带来的安全问题也日益凸显。让我们不得不重视。无论是公司、政府机构还是学校,都有需要保护数据的完整性及可用性。然而计算机网络的连接多式多样、五花八门、终端分布不均匀性,使网络特别容易受到黑客、恶意软件等的攻击,数据的完整性、保密性和可用性要如何在这样的环境的得以保护,我们不得不采取全面的安全措施来全方位应对各种网络威胁。网络嗅探器可以在对网络安全管理的过程中,实现对网络数据进行测量和监视,通过利用软件或者硬件嗅探器捕获数据包对数据内容进行分析处理。
嗅探器的分析结果可以获知网络流量使用情况、网络资源使用率以及网络安全规则的执行情况等,作为网络评估、网络故障诊断和网络优化所使用,这样就可以知道网络的实际使用情况,找出网络存在的漏洞和影响网络性能的某些因素。比如ARP攻击,在一个广播式网络中ARP攻击很可能造成整个网段的瘫痪,要及时知道这些情况,我们可以通过网络嗅探器抓包分析来获取。再者网络的安全策略的执行情况,是否有受到攻击,来自哪里的攻击,网络嗅探器可以在对网络安全管理的过程中,实现对网络数据进行测量和监视,通过利用软件或者硬件嗅探器捕获数据包对数据内容进行分析处理。
2 sniff嗅探技术基本原理
Sniff嗅探技术基于计算机网络技术。嗅探的实现依赖计算机的网络协议模型,其中运用最多的是TCP/IP协议模型。TCP/IP协议由加利福尼亚大学在UNIX操作系统下开发实现的。套接字(Socket)是计算机系统为了实现应用程序与TCP/IP协议交互所开发的协议,Socket实质提供的是能是进程通信的端点,双方先各自创建一个通信端点来完成通信,一个完整的socket就类似一个完整信息的信封,写了信件的类型,自己的地址,对方的地址,自己的名字。本软件设计正是基于套接字的设计。
嗅探器作为一种网络应用程序,Socket起到了对编写网络应用程序的一种简化,它特供了一个高层接口,使得编程人员不需要精通底层的细节。但是通常的套接字程序具有它的局限性即它无法接收到不属于自己而经过的数据包,此时网络接口会对数据包做判断,丢弃不属于自己的数据包,而嗅探器的设计要求能够接收到所有数据,这就意味着需要把网卡设置成一种特殊的混杂模式。
如何通过原始套接字(raw socket)把网卡设置成混杂模式,与我们通常使用的数据流套接字TCP和数据包套接字UDP有很大的区别。在创建了原始套接字后,IP头操作选项可以通过setsockopt()函数来实现,然后再通过bind()函数将原始套接字绑定到本地网卡,通过WSAIoctl ()来进行设置,让网卡能够接收到所有的数据。然后再用recv()函数来实现对UDP套接字和TCP套接字的获取,到这里实际上已经是可以对网络进行嗅探了。由于原始套接字的特殊性,它包含了数据传输过程中的IP头、 TCP头等信息但是这与流、数据报套接字不同,我们可以通过对数据中的原始协议进行分析得出网络相关信息。数据包被捕获后就可以根据前面对IP数据段头还有TCP数据段头的结构描述来对捕获的数据包进行分析。在利用套接字开发网络嗅探器程序时的一般步骤是:首先,创建原始套接字,并设置其操作选项;其次将原始套接字绑定到本地网卡地址上;网卡在混杂模式下默认接收所有数据,要实现抓包分析我们需要在这里将网卡设置成混杂模式,流程如图1所示:
3 sniff网络嗅探器软件实现及测试
本软件在C++环境下基于MFC框架利用TCP/IP协议实现了对数据包的解包、分析数据包功能。该嗅探器能在多个软件平台上运行,比如Linux、window及Unix等平台,通过把网卡设置为混杂模式,来实现对网络上传输的数据包进行捕获与分析。
在没有网络流经的情况即断网情况下,没有数据的流通,故所设计的sniff网络嗅探器不能嗅探到数据,由此也可以知晓网络是否连通,作为网络故障的诊断,从图2可以看到,此时网络为断开状态。没有数据的流过,因此嗅探器无法侦探到数据。
网络嗅探器程序设计完成后,在Windows平台下进行运行调试,修改错误,使其能完成捕获数据包和分析数据包的功能,并将解析结果在MFC界面显示出来,如图3所示:
由图2,图3我们能看到网络嗅探器可以完成预期的目标,进行了数据包截获还有分析,显示了分析结果。由图2还能够看到捕获模块可以实现将网络的接口设置成混杂模式,也捕获了局域网内存在的数据包,在这里还能够看到网络状态及网络数据的流动情况,供网络分析之用。
参考文献:
[1] 王艳平, 张越. Windows网络与通信程序设计[M]. 北京: 人民邮电出版社, 2006: 21-45.
[2] Andrew S.Tanenbau. 计算机网络[M]. 4版.北京: 清华大学出版社, 2004.
[3] 谢希仁. 计算机网络[M]. 5版.北京: 电子工业出版社, 2012.
[4] 朱桂英, 张元亮. Visual C++网络编程开发与实践[M]. 北京: 清华大学出版社, 2013: 43-57.
[5] 吴应良, 韦岗. 网络入侵及其安全防范对策研究[J]. 计算机应用研究, 2006(11): 12-14.
[6] Todd Lammle.Cisco Certified Network Associate Study Guide [M]. 6th ed. 北京: 电子工业出版社, 2008.