计算机网络课程设计报告-简单的网络嗅探器 设计_第1页
计算机网络课程设计报告-简单的网络嗅探器 设计_第2页
计算机网络课程设计报告-简单的网络嗅探器 设计_第3页
计算机网络课程设计报告-简单的网络嗅探器 设计_第4页
计算机网络课程设计报告-简单的网络嗅探器 设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

课程设计报告2014—2015学年第一学期课程名称计算机网络设计题目简单的网络嗅探器目录TOC\o"1-4"\h\u32342一、网络嗅探器 【摘要】随着网络技术的飞速发展,网络安全问题越来越被人重视。嗅探技术作为网络安全攻防中最基础的技术,随着网络技术的飞速发展,网络安全问题越来越被人重视。嗅探技术作为网络安全攻防中最基础的技术,既可以用于获取网络中传输的大量敏感信息,也可以用于网络管理。通过获取网络数据包的流向和内容等信息,可以进行网络安全分析和网络威胁应对。因此对网络嗅探器的研究具有重要意义。

本课程设计通过分析网络上常用的嗅探器软件,在了解其功能和原理的基础上,以VC为开发平台,使用Windows环境下的网络数据包捕获开发库WinPcap,按照软件工程的思想进行设计并实现了一个网络嗅探工具。该嗅探工具的总体架构划分为5部分,分别是最底层的数据缓存和数据访问,中间层的数据捕获,协议过滤,协议分析和最顶层的图形画用户界面。

本嗅探器工具完成了数据包捕获及分析,协议过滤的主要功能,实现了对网络协议,源IP地址,目标IP地址及端口号等信息的显示,使得程序能够比较全面地分析出相关信息以供用户参考决策。一、网络嗅探器1.1网络嗅探1.1.1网络嗅探的背景网络嗅探是指利用计算机的网络接口截获目的地为其它计算机的数据报文的一种手段。

网络嗅探需要用到网络嗅探器,其最早是为网络管理人员配备的工具,有了嗅探器网络管理员可以随时掌握网络的实际情况,查找网络漏洞和检测网络性能,当网络性能急剧下降的时候,可以通过嗅探器分析网络流量,找出网络阻塞的来源。嗅探器也是很多程序人员在编写网络程序时抓包测试的工具,因为我们知道网络程序都是以数据包的形式在网络中进行传输的,因此难免有协议头定义不对的。

网络嗅探的基础是数据捕获,网络嗅探系统是并接在网络中来实现对于数据的捕获的,这种方式和入侵检测系统相同,因此被称为网络嗅探。网络嗅探是网络监控系统的实现基础。1.1.2网络嗅探的简介网络嗅探器利用的是共享式的网络传输介质。共享即意味着网络中的一台机器可以嗅探到传递给本网段(冲突域)中的所有机器的报文。网络嗅探器通过将网卡设置为混杂模式来实现对网络的嗅探。一个实际的主机系统中,数据的收发是由网卡来完成的,当网卡接收到传输来的数据包时,网卡内的单片程序首先解析数据包的目的网卡物理地址,然后根据网卡驱动程序设置的接收模式判断该不该接收,认为该接收就产生中断信号通知CPU,认为不该接收就丢掉数据包,所以不该接收的数据包就被网卡截断了,上层应用根本就不知道这个过程。CPU如果得到网卡的中断信号,则根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收数据,并将接收的数据交给上层协议软件处理。1.1.3嗅探器设计原理

嗅探器作为一种网络通讯程序,也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行。但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包即可以是发给它的也可以是发往别处的。显然,要达到此目的就不能再让网卡按通常的正常模式工作,而必须将其设置为混杂模式。

具体到编程实现上,这种对网卡混杂模式的设置是通过原始套接字(raw

socket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。在创建了原始套接字后,需要通过setsockopt()函数来设置IP头操作选项,然后再通过bind()函数将原始套接字绑定到本地网卡。为了让原始套接字能接受所有的数据,还需要通过ioctlsocket()来进行设置,而且还可以指定是否亲自处理IP头。至此,实际就可以开始对网络数据包进行嗅探了,对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成。但是与其他两种套接字不同的是,原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息,而是包含有

IP头、

TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。1.2相关的网络知识1.2.1

交换基础交换机的定义局域网交换机拥有许多端口,每个端口有自己的专用带宽,并且可以连接不同的网段。交换机各个端口之间的通信是同时的、并行的,这就大大提高了信息吞吐量。

为了进一步提高性能,每个端口还可以只连接一个设备。

为了实现交换机之间的互连或与高档服务器的连接,局域网交换机一般拥有一个或几个高速端口,如100M以太网端口、FDDI端口或155M

ATM端口,从而保证整个网络的传输性能。

交换原理传统的交换机本质上是具有流量控制能力的多端口网桥,即传统的(二层)交换机。

把路由技术引入交换机,可以完成网络层路由选择,故称为三层交换,这是交换机的新进展。

交换机(二层交换)的工作原理

交换机和网桥一样,是工作在链路层的联网设备,它的各个端口都具有桥接功能,每个端口可以连接一个LAN或一台高性能网站或服务器,能够通过自学习来了解每个端口的设备连接情况。所有端口由专用处理器进行控制,并经过控制管理总线转发信息。

同时可以用专门的网管软件进行集中管理。

除此之外,交换机为了提高数据交换的速度和效率,一般支持多种方式。1.2.2路由基础所谓路由就是指通过相互连接的网络把信息从源地点移动到目标地点的活动。路由原理路由器主要由以下几个部分组成:输入/输出接口部分、包转发或交换结构部分(switching

fablic)、路由计算或处理部分。

输入/输出部分实现数据链路层的封装和解封装,并按一定的路由查询算法,根据输入数据包的目的IP地址查找到转发的输出端口,该功能可用专用集成电路(ASIC)实现纯硬件查找和数据包的拆包与打包处理,也可以由专用的网络处理器实现微码转发。普通路由器中该部分的功能完全由路由器的中央处理器来执行,制约了数据包的转发速率(每秒几千到几万个数据包)。高端路由器中普遍实现了分布式硬件处理,接口部分有强大的CPU处理器和大容量的高速缓存,使接口数据速率达到10Gbps,满足了高速骨干网络的传输要求。

路由器的转发机制对路由器的性能影响很大,常见的转发方式有:进程转发、快速转发、优化转发、分布式快速转发。进程转发将数据包从接口缓存拷贝到处理器的缓存中进行处理,先查看路由表再查看ARP表,重新封装数据包后将数据包拷贝到接口缓存中准备传送出去,两次查表和拷贝数据极大的占用CPU的处理时间,所以这是最慢的交换方式,只在低档路由器中使用。快速交换将两次查表的结果作了缓存,也无需拷贝数据,所以CPU的处理数据包的时间缩短了。优化交换在快速交换的基础上略作改进,将缓存表的数据结构作了改变,用深度为4的256叉树代替了深度为32的2叉数或哈希表(hash),CPU的查找时间进一步缩短。这两种转发方式在中高档路由器中普遍加以应用。在骨干路由器中由于路由表条目的成倍增加,路由表或ARP表的任何变化都会引起大部分路由缓冲失效,以前的交换方式都不再适用,最新的交换方式是分布式快速交换,它在每个接口处理板上构建一个镜像(mirror)路由表和MAC地址表相结合的转发表,这仍是深度为4的256叉表,但每个节点的数据部分是指向另一个称为邻接表的指针,这种结构使得转发表完全由路由表和ARP表来同步更新,本身也不再需要一个老化进程,克服了其它交换方式需要不断对缓存表进行老化的缺陷。路由技术一台支持IP协议的路由器可以把网络划分成多个子网段,只有指向特殊IP地址的网络流量才可以通过路由器。对于每一个接收到的数据包,路由器都会重新计算其校验值,并写入新的物理地址。因此,使用路由器转发和过滤数据的速度往往要比只查看数据包物理地址的交换机慢。但是,对于那些结构复杂的网络,使用路由器可以提高网络的整体效率。路由器的另外一个明显优势就是可以自动过滤网络广播。1.2.3网卡的工作原理发送数据时,网卡首先侦听介质上是否有载波(载波由电压指示),如果有,则认为其他站点正在传送信息,继续侦听介质。一旦通信介质在一定时间段内(称为帧间缝隙IFG=9.6微秒)是安静的,即没有被其他站点占用,则开始进行帧数据发送,同时继续侦听通信介质,以检测冲突。在发送数据期间。

如果检测到冲突,则立即停止该次发送,并向介质发送一个“阻塞”信号,告知其他站点已经发生冲突,从而丢弃那些可能一直在接收的受到损坏的帧数据,并等待一段随机时间(CSMA/CD确定等待时间的算法是二进制指数退避算法)。在等待一段随机时间后,再进行新的发送。如果重传多次后(大于16次)仍发生冲突,就放弃发送。

接收时,网卡浏览介质上传输的每个帧,如果其长度小于64字节,则认为是冲突碎片。如果接收到的帧不是冲突碎片且目的地址是本地地址,则对帧进行完整性校验,如果帧长度大于1518字节(称为超长帧,可能由错误的LAN驱动程序或干扰造成)或未能通过CRC校验,则认为该帧发生了畸变。通过校验的帧被认为是有效的,网卡将它接收下来进行本地处理。1.3基于网卡混杂模式的嗅探原理在网络中,嗅探器接收所有的分组,而不发送任何非法分组。它不会妨碍网络数据的流动,因此很难对其进行检测。不过,处于混杂模式网卡的状态很显然和处于普通模式下不同。在混杂模式下,应该被硬件过滤掉的分组文会进入到系统的内核。是否回应这种分组完全依赖与内核。1.4基于arp欺骗的嗅探原理主机在两种情况下会保存、更新本机的ARP缓存表,

1.

接收到“ARP广播-请求”包时

2.

接收到“ARP非广播-回复”包时

从中我们可以看出,ARP协议是没有身份验证机制的,局域网内任何主机都可以随意伪造ARP数据包,ARP协议设计天生就存在严重缺陷。

1.5网络嗅探的安全危险sniffing是作用在网络基础结构的底层。通常情况下,

用户并不直接和该层打交道,有些甚至不知道有这一层存在。所以,应该说Sniffer的危害是相当之大的,通常,使用Sniffer是在网络中进行欺骗的开始。它可能造成的危害:

嗅探器能够捕获口令。这大概是绝大多数非法使用Sniffer的理由,Sniffer可以记录到明文传送的用户名和口令。能够捕获专用的或者机密的信息。比如金融帐号,许多用户很放心在网上使用自己的信用卡或现金帐号,然而Sniffer可以很轻松截获在网上传送的用户姓名、口令、信用卡号码、截止日期、帐号和pin。比如偷窥机密或敏感的信息数据,通过拦截数据包,入侵者可以很方便记录别人之间敏感的信息传送,或者干脆拦截整个的email会话过程。可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限窥探低级的协议信息。这是很可怕的事,通过对底层的信息协议记录,比如记录两台主机之间的网络接口地址、远程网络接口IP地址、IP路由信息和TCP连接的字节顺序号码等。这些信息由非法入侵的人掌握后将对网络安全构成极大的危害,通常有人用Sniffer收集这些信息只有一个原因:他正要进行一次欺骗(通常的ip地址欺骗就要求你准确插入TCP连接的字节顺序号),如果某人很关心这个问题,那么Sniffer对他来说只是前奏,今后的问题要大得多。嗅探器可能造成的危害:(1)嗅探器能够捕获口令.(2)能够捕获专用的或者机密的信息.(3)可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限.(4)分析网络结构,进行网络渗透。1.6捕获机制不同的操作系统上有不同的包捕获机制:SunOSo系统中有NIT家口;在DEC环境下有UhrisPacketFilter;在SCII的IRIX中有SNOOP;Linux系统为用户提供了一种工作在数据链接层的套接字SOCKPACKET;BSDUNIX系统下的BPF(BSDPacketFilter);在windows平台上,近几年也陆续有多重捕获应用工具面世,如NetmnonAPI,PCAUSA等,与BPF不同的是,这些产品是商业性质的。Winpcap则是window平台上为数不多的功能强大切可免费获得的包捕获接口软件之一,来源于BSD的网络数据包过滤器NPF是winpcap的核心部分。BPF和NPF是效率较高、应用广泛的包捕获机制。1.7反嗅探技术

如何才能检测网内是否存在有嗅探程序?

理论上,嗅探程序是不可能被检测出来的,因为嗅探程序是一种被动的接收程序,属于被动触发的,它只会收集数据包,而不发送出任何数据,尽管如此,嗅探程序有时候还是能够被检测出来的。

一个嗅探程序,不会发送任何数据,但是当它安装在一台正常的局域网内的计算机上的时候会产生一些数据流。举个例子,它能发出一个请求,始DNS根据IP地址进行反相序列查找。下面一种简单的检测方法:

ping

方法

很多的嗅探器程序,如果你发送一个请求给哪台有嗅探程序的机器,它将作出应答

说明:

1.

怀疑IP地址为的机器装有嗅探程序,它的MAC地址确定为00-40-05-A4-79-32.

2.

确保机器是在这个局域网中间。

3.

现在修改MAC地址为00-40-05-A4-79-33.

4.

现在用ping命令ping这个IP地址。5.

没有任何人能够看到发送的数据包,因为每台计算机的MAC地址无法与这个数据包中的目地MAC不符,所以,这个包应该会被丢弃。

6.

如果看到了应答,说明这个MAC包没有被丢弃,也就是说,很有可能有嗅探器存在。

现在,这种方法已经得到了广泛的推崇和宣扬,新一代的黑客们也学会了在他们的代码中加入虚拟的MAC地址过滤器很多的计算机操作系统(比如Windows)都支持MAC过滤器(很多过虑器只检查MAC的第一个字节,这样一来,MAC地址FF-00-00-00-00-00和FF-FF-FF-FF-FF-

FF就没有区别了。(广播地址消息会被所有的计算机所接收)。这种技术通常会用在交换模型的以太网中。当交换机发现一个未知的MAC地址的时候,它会执行类似“flood”的操作,把这个包发送给每个节点。基于原始套接字的嗅探程序2.1嗅探器的具体实现:2.2嗅探的代码实现代码输出实现:if((pIpheader->ip_p)==IPPROTO_UDP&&lentcp!=0){ pCount++; dataudp=(unsignedchar*)RecvBuf+sizeof(structipheader)+sizeof(structudphdr); printf("-UDP-\n"); printf("\n目的IP地址:%s\n",szDestIP); printf("\n目的端口:%d\n",ntohs(pTcpheader->dport)); printf("UDP数据地址:%x\n",dataudp); printf("IP头部长度:%i\n",sizeof(structipheader)); printf("UDP头部长度:%i\n",sizeof(structudphdr)); printf("包的大小:%i\n",ntohs(pIpheader->ip_len)); printf("\ncharPacket%i[%i]=\"",pCount,lenudp-1); for(i=0;i<lenudp;i++){ printf("\\x%.2x",*(dataudp+i)); if(i%10==0) printf("\"\n\""); } printf("\";\n\n\n"); for(i=0;i<lenudp;i++){ if(*(dataudp+i)<=127&&*(dataudp+i)>=20) printf("%c",*(dataudp+i)); else printf("."); } printf("\n\n*******************************************\n"); } }}结果会输出入下图所示:2.3嗅探运行结果部分代码如下:#include<winsock2.h> /*windowssocket的头文件,系统定义的*/#include<windows.h>#include<ws2tcpip.h>#include<stdio.h>#include<stdlib.h>#pragmacomment(lib,"ws2_32.lib") /*链接API相关连的Ws2_32.lib静态库*/#defineMAX_HOSTNAME_LAN255#defineSIO_RCVALL_WSAIOW(IOC_VENDOR,1)#defineMAX_ADDR_LEN16structipheader{ unsignedcharip_hl:4; /*headerlength(报头长度)*/ unsignedcharip_v:4; /*version(版本)*/ unsignedcharip_tos; /*typeosservice服务类型*/ unsignedshortintip_len; /*totallength(总长度)*/ unsignedshortintip_id; /*identification(标识符)*/ unsignedshortintip_off; /*fragmentoffsetfield(段移位域)*/ unsignedcharip_ttl; /*timetolive(生存时间)*/ unsignedcharip_p; /*protocol(协议)*/ unsignedshortintip_sum; /*checksum(校验和)*/ unsignedintip_src; /*sourceaddress(源地址)*/ unsignedintip_dst; /*destinationaddress(目的地址)*/}; /*totalipheaderlength:20bytes(=160bits)*/typedefstructtcpheader{ unsignedshortintsport; /*sourceport(源端口号)*/ unsignedshortintdport; /*destinationport(目的端口号)*/ unsignedintth_seq; /*sequencenumber(包的序列号)*/ unsignedintth_ack; /*acknowledgementnumber(确认应答号)*/ unsignedcharth_x:4; /*unused(未使用)*/ unsignedcharth_off:4; /*dataoffset(数据偏移量)*/ unsignedcharFlags; /*标志全*/ unsignedshortintth_win; /*windows(窗口)*/ unsignedshortintth_sum; /*checksum(校验和)*/ unsignedshortintth_urp; /*urgentpointer(紧急指针)*/}TCP_HDR;typedefstructudphdr{ unsignedshortsport; /*sourceport(源端口号)*/ unsignedshortdport; /*

温馨提示

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

评论

0/150

提交评论