《网络安全课程设计—c#制作sniffer》由会员分享,可在线阅读,更多相关《网络安全课程设计—c#制作sniffer(27页珍藏版)》请在金锄头文库上搜索。
1、南昌航空大学信息工程学院信息安全课程设计学 院 信息工程学院 专 业 网络工程 班 级 130461班 课题名称 网络嗅探器的制作 组长学号 13046131 姓 名 周勤如 成绩 组员学号 13046124 姓 名 龙 威 成绩 组员学号 13046132 姓 名 李 卓 成绩 开课时间 2015至 2016 学年 第 二 学期 地点 D405 目录目录1一、选题背景与意义2二、需求分析32.1需求分析32.2功能分析3三、概要设计43.1功能图43.2设计界面4四、详细设计与实现64.1文字介绍实现的方法64.1.1程序流程图74.1.2 关键技术7(1)socket创建7(2)数据类型分
2、析84.2具体界面展示及运行结果94.3关键代码13(1)数据包的捕获13(2)数据包的显示16(3)日志文件的保存23(4)抓包信息的过滤23五、课设小结25六、参考文献26一、选题背景与意义随着计算机网络技术的快速发展,网络己成为人们生活中的必备工具,计算机网络在政治、经济、军事、社会生活等各个领域正发挥着日益重要的作用,人们对计算机网络的依赖性也大大增强,一些网络新业务如电子商务、移动支付等,这些都对网络安全 提出了较高的要求。但是由于计算机网络具有连接形式多样性、开放性、互联性等特点,而且多数都采用TCP/TP协议,而TCP/TP在设计上力求运行效率,并建立在相互信任的基础上,其本身就
3、是造成网络不安全的主要因素,这也是TCP/TP协议在设计上的缺陷,从而导致针对网络系统的攻击事件频繁发生,所以网络安全已成为网络建设的一个非常重要的方面。现在人们对计算机信息安全要求越来越高,随着计算机网络的资源共享进一步加强,随之而来的网络安全问题使得计算机网络安全保护将会变得越来越重要。所以当我们在享受网络所带来的方便和快捷的同时也要认识到网络安全所面临的严峻考验。在防范网络攻击方面,通过数据截取及分析输出结果可以捕获到透过防火墙而进入网络的非法数据,成功的监视记录黑客的入侵过程,保障网络的安全。而且数据截取和协议分析是入侵检测系统的重要部分,是入侵检测系统的最基础的环节。二、需求分析2.
4、1需求分析实现Sniffer的基本功能。Sniffer是一种用于监测网络性能、使用情况的工具。能够侦听所有进出本主机的数据包,完整显示数据包网络层和传输层(ICMP、IP、TCP和UDP)的头信息。比如,对IP头而言,需要显示版本、头长度、服务类型、数据包长度、标识、DF/MF标志、段内偏移、生存期、协议类型、源目的IP地址、选项内容。要求显示数据的实际含义;侦听来源于指定IP地址的数据,显示接收到的TCP数据包的全部实际内容。需要考虑一个TCP包划分为多个IP包传输的情况;功能验证手段:在运行Sniffer的同时,执行标准的Ping、Telnet和浏览网页等操作,检查Sniffier能否返回
5、预期的结果。2.2功能分析有于水平有限,不可能实现Sniffer或者wireshark那样复杂的设置和分析,所以我们只对抓取到的本机在网络中的通信数据(如协议类型,源、目的地址和端口、数据包的大小等)加以分析,实现一个简单的网络嗅探器。一个窗体显示主页面,另一个页面显示详细的包信息。详细信息页面,我们显示一下信息:开始时间:嗅探器抓取数据包的时间;源端口:源目的IP地址+端口号;目的端口:目的IP地址+端口号;协议类型:只分析一下类型,GPG,ICMP,IDP,IGMP,IP,ND,PUP,TCP,UDP,其他的不再分析;抓包时间:;报头大小:报文报首部大小;报文总长:整个数据报的大小;三、概
6、要设计网络嗅探器3.1功能图数据包的显示混杂模式的开启及套接字的调用网卡信息的获取及本机IP的获取数据包的过滤及显示数据包的日志文件保存数据包的捕获图1 网络嗅探器的功能结构图3.2设计界面工具:Visual studio 2013使用编程语言:C#窗体编程Button类实现的功能有:开始,暂停,清除信息,显示所有信息,保存日志文件、过滤抓包信息Textbox:显示本机IP地址、输入IP地址用来过滤出所需的抓包信息Listview:显示抓包的详细信息,包括源IP,源端口,目的IP,目的端口,传输协议类型,时间,总长度,抓包信息显示Richtextbox:显示抓包的具体内容Lable标签:解释信
7、息,显示具体的接收信息和抓包长度,做注释用具体控件的定义private System.Windows.Forms.CheckBox filterCheckBox; private System.Windows.Forms.Button startButton; private System.Windows.Forms.Button stopButton; private System.Windows.Forms.ToolTip toolTip1; private System.Windows.Forms.TextBox ipTextBox; private System.Windows.For
8、ms.Label hintLabel; private MyButton clearButton; private System.Windows.Forms.BindingSource packetBindingSource; private System.Windows.Forms.ListView listView; private ColumnHeader header; private ColumnHeader columnHeader1; private ColumnHeader columnHeader2; private ColumnHeader columnHeader3; p
9、rivate ColumnHeader columnHeader4; private ColumnHeader columnHeader5; private ColumnHeader columnHeader6; private ColumnHeader columnHeader7; private ColumnHeader columnHeader8; private ComboBox typeComboBox; private MyRichTextBox hexTextBox; private MyRichTextBox charTextBox; private Button allBut
10、ton; private Button filterButton; private ToolTip toolTip2; private ToolTip toolTip3; private Label label1; private Label label2; private TextBox textBox1; private RichTextBox richTextBox1; private Button button1; private Label label3; private Button ToolStripMenuItem;四、详细设计与实现4.1文字介绍实现的方法具体到编程实现上,这
11、种对网卡混杂模式的设置是通过原始套接字(raw socket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。在创建了原始套接字后,需要通过setsockopt()函数来设置IP头操作选项,然后再通过bind()函数将原始套接字绑定到本地网卡。为了让原始套接字能接受所有的数据,还需要通过ioctlsocket()来进行设置,对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成。但是与其他两种套接字不同的是,原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息,而是包含有 IP头、 TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。通过对这
12、些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。4.1.1程序流程图关闭套接字是开始建立套接字绑定套接字设置网卡为混杂模式初始化数据包接收结构停止接收分析处理数据包否开始捕获显示分析结果图2 嗅探器工作流程如图2所示,在利用套接字开发网络嗅探器程序时的一般步骤是:首先,创建原始套接字,并设置其操作选项;其次将原始套接字绑定到本地网卡地址上;设置网卡为混杂模式,这样网卡就可以收到任何在网络中传输的数据包;在以上条件下开始对数据包进行捕获、分析。4.1.2 关键技术(1)socket创建网络嗅探器作为一种网络
13、通讯程序,是通过对网卡的编对网卡的编程是使用Socket函数来实现的。是引用网络连接的特殊的文件描述符,是在客户和服务器之间通信的实体。当客户连接到服务器时,就会有两socket:客户方socket和对应的服务器端的套接字,这里将它们称作CLIENTSOCK 和 SERVERSOCK。当客户方在 CLIENTSOCK 使用 send()函数时,服务器方可以在 SERVERSOCK 上使用 recv()函数来获取客户方发送的数据。反之亦然。socket由三个基本要素组成:网络类型、数据传输类型、采用的网络协议。socket编程是网络编程的核心。以下是创建socket的代码:SOCKETconn;
14、Conn=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(conn=INVAILD_SOCKET);return;原始socket是允许访问底层传输协议的一种socket 类型。使用原始socket操作 IP 数据报,可以进行路由跟踪、Ping等。另外,使用原始socket需要知道许多下层协议结构的知识。原始socket有两种类型,第一种类型是在 IP 头中使用预定义的协议, ICMP;如第二种类型是在 IP 头中使用自定义的协议1718。(2)数据类型分析套接字程序接收到 IP 数据包之后,调用自定义函数 DecodeIPPacket 进行解析。这个函数萃取出数据包中的协议头,向用户输出协议信息。即在设置SIO_RCVALLioctl 之后,在原始套接字上对 recv/WSARecv的调用将返回 IP 数据报,其中包含了完整