ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:442.57KB ,
资源ID:8437875      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8437875.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(参考网络嗅探器设计与实现.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

参考网络嗅探器设计与实现.docx

1、参考网络嗅探器设计与实现 JIANGSU UNIVERSITY入侵检测技术课程报告-网络嗅探器的设计与实现学院名称: 计算机学院 专业班级: 研 1101 学生姓名: 朱 锋 教师姓名: 周 莲 英 2012 年 5 月 12 日网络嗅探器的设计与实现 Design and implementation of network sniffer目录1 网络嗅探概述 31.1 网络嗅探的简介 31.2 相关的网络知识 41.3 基于网卡混杂模式的嗅探原理 61.4 基于arp欺骗的嗅探原理 71.5 网络嗅探的安全威胁 71.6 网络嗅探的防范 82 基于原始套接字的嗅探程序 92.1 嗅探实现 9

2、2.2 嗅探运行结果 253 网络嗅探工具应用-Win Sniffer 使用方法 273.1 Win Sniffer简介 273.2 Win Sniffer嗅探功能使用方法 271 网络嗅探概述1.1 网络嗅探的简介网络嗅探器又称为网络监听器,简称为Sniffer子系统,放置于网络节点处,对网络中的数据帧进行捕获的一种被动监听手段,是一种常用的收集有用数据的方法,这些数据可以是用户的账号和密码,可以是一些商用机密数据等等。Sniffer是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具。Sniffer的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络

3、的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器截获网络中的数据包,分析问题的所在。而嗅探器也可作为攻击工具被黑客所利用为其发动进一步的攻击提供有价值的信息。1.2 相关的网络知识1.2.1交换基础交换发生网络的第二层,即数据链路层。谈到交换的问题,从广义上讲,任何数据的转发都可以称作交换。当然,现在我们指的是狭义上的交换,仅包括数据链路层的转发。1.2.1.1交换原理所谓交换,就是将分组(或帧)从一个端口移到另一个端口的简单动作。交换机在操作过程当中会不断的收集资料去建立它本身的一个地址表,MAC地址表显示了主机的MAC地址与以太网交换机端口映射关

4、系,指出数据帧去往目的主机的方向。当以太网交换机收到一个数据帧时,将收到数据帧的目的MAC地址与MAC地址表进行查找匹配。如果在MAC地址表中没有相应的匹配项,则向除接收端口外的所有端口广播该数据帧,有人将这种操作翻译为泛洪。在我们测试过的交换机中,有的除了能够对广播帧的转发进行限制之外,也能对泛洪这种操作进行限制。而当MAC地址表中有匹配项时,该匹配项指定的交换机端口与接收端口相同则表明该数据帧的目的主机和源主机在同一广播域中,不通过交换机可以完成通信,交换机将丢弃该数据帧。否则,交换机将把该数据帧转发到相应的端口。1.2.1.2交换技术局域网交换技术是作为对共享式局域网提供有效的网段划分的

5、解决方案而出现的,它可以使每个用户尽可能地分享到最大带宽。交换技术是在OSI七层网络模型中的第二层,即数据链路层进行操作的,因此交换机对数据包的转发是建立在MAC地址基础上的,对于IP网络协议来说,它是透明的,即交换机在转发数据包时,不知道也无须知道信源机和目标机的IP地址,只需知其物理地址。从网络交换产品的形态来看,交换产品大致有三种:端口交换、帧交换和信元交换。1.2.2路由基础所谓路由就是指通过相互连接的网络把信息从源地点移动到目标地点的过程。1.2.2.1路由原理 当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时,它将直接把IP分组送到网络上,对方就能收到。而要送给不同I

6、P子网上的主机时,它要选择一个能到达目的子网上的路由器,把IP分组送给该路由器,由路由器负责把IP分组送到目的地。如果没有找到这样的路由器,主机就把IP分组送给一个称为“缺省网关”的路由器上。“缺省网关”是每台主机上的一个配置参数,它是接在同一个网络上的某个路由器端口的IP地址。路由器转发IP分组时,只根据IP分组目的IP地址的网络号部分,选择合适的端口,把IP分组送出去。同主机一样,路由器也要判定端口所接的是否是目的子网,如果是,就直接把分组通过端口送到网络上,否则,也要选择下一个路由器来传送分组。路由器也有它的缺省网关,用来传送不知道往哪儿送的IP分组。这样,通过路由器把知道如何传送的IP

7、分组正确转发出去,不知道的IP分组送给“缺省网关”路由器,这样一级一级的传送,IP分组最终将送到目的地,送不到目的地的IP分组则被网络丢弃了。1.2.2.2路由技术路由器不仅负责对IP分组的转发,还要负责与别的路由器进行联络,共同确定“网间网”的路由选择和维护路由表。路由包含两个基本的动作:选择最佳路径和通过网络传输信息。在路由的过程中,后者也称为(数据)交换。交换相对来说比较简单,而选择路径很复杂。1.2.2.3路径选择路径选择是判定到达目的地的最佳路径,由路由选择算法来实现。由于涉及到不同的路由选择协议和路由选择算法,要相对复杂一些。为了判定最佳路径,路由选择算法必须启动并维护包含路由信息

8、的路由表,其中路由信息依赖于所用的路由选择算法而不尽相同。metric是路由算法用以确定到达目的地的最佳路径的计量标准,如路径长度。为了帮助选路,路由算法初始化并维护包含路径信息的路由表,路径信息根据使用的路由算法不同而不同。1.2.3网卡的工作原理发送数据时,网卡首先侦听介质上是否有载波,如果有,则认为其他站点正在传送信息,继续侦听介质。一旦通信介质在一定时间段内是安静的,即没有被其他站点占用,则开始进行帧数据发送,同时继续侦听通信介质,以检测冲突。在发送数据期间。如果检测到冲突,则立即停止该次发送,并向介质发送一个“阻塞”信号,告知其他站点已经发生冲突,从而丢弃那些可能一直在接收的受到损坏

9、的帧数据,并等待一段随机时间。在等待一段随机时间后,再进行新的发送。如果重传多次后(大于16次)仍发生冲突,就放弃发送。 接收时,网卡浏览介质上传输的每个帧,如果其长度小于64字节,则认为是冲突碎片。如果接收到的帧不是冲突碎片且目的地址是本地地址,则对帧进行完整性校验,如果帧长度大于1518字节或未能通过CRC校验,则认为该帧发生了畸变。通过校验的帧被认为是有效的,网卡将它接收下来进行本地处理。接受到报文的计算机的网卡处理报文的过程如下图所示:1.3 基于网卡混杂模式的嗅探原理在网络中,嗅探器接收所有的分组,而不发送任何非法分组。它不会妨碍网络数据的流动,因此很难对其进行检测。不过,处于混杂模

10、式网卡的状态很显然和处于普通模式下不同。在混杂模式下,应该被硬件过滤掉的分组文会进入到系统的内核。是否回应这种分组完全依赖与内核。 下面我举一个现实世界中的例子,说明我们检测处于混杂模式网络节点的方法。设想一下,在一个会议室中正在举行一个会议。某个人把耳朵放在会议室就可以进行窃听。当她进行窃听时,会屏住呼吸,安静地聆听会议室内所有的发言。然而,如果此时会议室内有人忽然叫窃听者的名字:“太太”,她就可能答应“唉”。这听起来有点好笑,但是完全可以用于网络嗅探行为的检测。网络进行网络嗅探的节点会接收网络的所有报文,因此其内核可能对某些本该被硬件过滤的分组作出错误回应。根据这个原理,我们可以通过检查节

11、点对ARP报文的响应来检测网络的嗅探行为。1.4 基于arp欺骗的嗅探原理所谓ARP欺骗,就是利用广播地址上主机保持周边计算机信息方式的固有安全弱点,使用伪造的MAC地址和IP地址伪装成ARP高速缓存中的另一台主机的技术。根据交换机的工作原理,有以下两种基于ARP欺骗的网络嗅探方法。(1)基于交换机的MAC-端口映射表修改的嗅探。(2)基于中间人攻击的嗅探。1.5 网络嗅探的安全威胁实际应用中的嗅探器分软、硬两种。软件嗅探器便宜易于使用,缺点是往往无法抓取网络上所有的传输数据,也就可能无法全面了解网络的故障和运行情况;硬件嗅探器的通常称为协议分析仪,它的优点恰恰是软件嗅探器所欠缺的,但是价格昂

12、贵。目前主要使用的嗅探器是软件的。嗅探器捕获真实的网络报文。嗅探器通过将其置身于网络接口来达到这个目的-例如将以太网卡设置成杂收模式。数据在网络上是以帧的单位传输的。帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上。通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。就是在这个传输和接收的过程中,每一个在LAN上的工作站都有其硬件地址。这些地址唯一地表示着网络上的机器。当用户发送一个报文时,这些报文就会发送到LAN上所有可用的机器。在一般情况下,网络上所有的机器都可以听到通过的流量,但对不属

13、于自己的报文则不予响应。如果某在工作站的网络接口处于杂收模式,那么它就可以捕获网络上所有的报文和帧,如果一个工作站被配置成这样的方式,它就是一个嗅探器。这也是嗅探器会造成安全方面的问题的原因。通常使用嗅探器的入侵者,都必须拥有基点用来放置嗅探器。对于外部入侵者来说,能通过入侵外网服务器、往内部工作站发送木马等获得需要,然后放置其嗅探器,而内部破坏者就能够直接获得嗅探器的放置点,比如使用附加的物理设备作为嗅探器(例如,他们可以将嗅探器接在网络的某个点上,而这个点通常用肉眼不容易发现。除非人为地对网络中的每一段网线进行检测,没有其他容易方法能够识别出这种连接。嗅探器可能造成的危害: (1) 嗅探器

14、能够捕获口令. (2) 能够捕获专用的或者机密的信息. (3) 可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限. (4) 分析网络结构,进行网络渗透。1.6 网络嗅探的防范1.6.1 检测嗅探器检测嗅探器可以采用检测混杂模式网卡的工具。由于嗅探器需要将网络中入侵的网卡设置为混杂模式才能工作,能够检测混杂模式网卡的AntiSniff是一个工具。证明你的网络有嗅探器有两条经验: (1)网络通讯丢包率非常高:通过一些网管软件,可以看到信息包传送情况,最简单是ping命令。它会告诉你掉了百分之多少的包。如果你的网络结构正常,而又有2030数据包丢失以致数据包无法顺畅的流到目的地。就有可能有

15、人在监听,这是由于嗅探器拦截数据包导致的。 (2)网络带宽出现反常:通过某些带宽控制器,可以实时看到目前网络带宽的分布情况,如果某台机器长时间的占用了较大的带宽,这台机器就有可能在监听。应该也可以察觉出网络通讯速度的变化。 1.6.2 将数据隐藏,使嗅探器无法发现嗅探器非常难以被发现, 因为它们是被动的程序一个老练的攻击者可以轻易通过破坏日志文件来掩盖信息。它们并不会给别人留下进行核查的尾巴.。完全主动的解决方案很难找到,我们可以采用一些被动的防御措施: (1)安全的拓扑结构。 (2)会话加密。 (3)用静态的ARP或者IPMAC对应表代替动态的。 除了以上三点另外还要重视重点区域的安全防范

16、。这里说的重点区域,主要是针对嗅探器的放置位置而言。入侵者要让嗅探器发挥较大功效,通常会把嗅探器放置在数据交汇集中区域,比如网关、交换机、路由器等附近,以便能够捕获更多的数据。因此,对于这些区域就应该加强防范,防止在这些区域存在嗅探器。2 基于原始套接字的嗅探程序2.1 嗅探实现下面通过c语言实现基于原始套接字的嗅探程序,代码以及代码分析如下:#include #include #include #include #include #pragma comment (lib, ws2_32.lib)#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)#define M

17、AX_PACK_LEN 65535 / 最大包长度#define MAX_ADDR_LEN 16 / 最大地址长度#define MAX_PROTO_TEXT_LEN 16 / 子协议名称最大长度#define MAX_PROTO_NUM 12 / 子协议数量#define MAX_HOSTNAME_LEN 255 / 最大主机名长度上面程序主要包含了工程所需的头文件和进行了相关的宏定义。其中 ,SIO_RCVALL表示套接字接收所有的数据包。/ 定义IP首部格式typedef struct _IPHeader unsigned char h_verlen; / 版本和首部长度 unsigne

18、d char tos; / 服务类型 unsigned short total_len; / 总长度 unsigned short ident; / 标识号 unsigned short frag_and_flags; / 段偏移量 unsigned char ttl; / 生存时间 unsigned char proto; / 协议 unsigned short checksum; / 首部校验和 unsigned int sourceIP; / 源IP地址 unsigned int destIP; / 目的地址 IPHEADER;/ 定义TCP首部格式typedef struct _TCP

19、Header unsigned short th_sport; / 源端口号 unsigned short th_dport; / 目的端口号 unsigned int th_seq; / SEQ序号 unsigned int th_ack; / ACK序号 unsigned char th_lenres; / 首部长度 unsigned char th_flag; / 控制位 unsigned short th_win; / 窗口大小 unsigned short th_sum; / 校验和 unsigned short th_urp; / 紧急指针 TCPHEADER;上面程序定义了IP数

20、据包和TCP数据包的首部格式,以便进行数据包的解析。/ 定义UDP首部格式typedef struct _UDPHeader unsigned short uh_sport; / 16位源端口 unsigned short uh_dport; / 16位目的端口 unsigned short uh_len; / 16位长度 unsigned short uh_sum; / 16位校验和UDPHEADER;/ 定义ICMP首部格式typedef struct _ICMPHeader BYTE i_type; / 8位类型 BYTE i_code; / 8位代码 unsigned short i_

21、cksum; / 16位校验和 unsigned short i_id; / 识别号 unsigned short i_seq; / 报文序列号 unsigned long timestamp; / 时间戳ICMPHEADER;上面程序定义了UDP数据包和ICMP数据包的首部格式,以便进行数据包的解析。/ 定义子协议映射表typedef struct _protomap int ProtoNum; char ProtoTextMAX_PROTO_TEXT_LEN;PROTOMAP;/ 为子协议映射表赋值PROTOMAP ProtoMapMAX_PROTO_NUM= IPPROTO_IP,IP,

22、 IPPROTO_ICMP,ICMP, IPPROTO_IGMP,IGMP, IPPROTO_GGP,GGP, IPPROTO_TCP,TCP, IPPROTO_PUP,PUP, IPPROTO_UDP,UDP, IPPROTO_IDP,IDP, IPPROTO_ND,ND, IPPROTO_RAW,RAW, IPPROTO_MAX,MAX, NULL,;上面程序定义了子协议映射表并对映射表进行了赋值。SOCKET SockRaw; / 全局套接字char TcpFlag6=F,S,R,P,A,U; / TCP标志位bool paramAll = false; / 嗅探所有的数据包bool p

23、aramTcp = false; / 嗅探TCP数据包bool paramUdp = false; / 嗅探UDP数据包bool paramIcmp = false; / 嗅探ICMP数据包int paramkeyword = 0; / 是否进行关键字查询int packet_totallen = 0; / 数据包总长度char paramHostAddr_A20; / 嗅探的主机Achar paramHostAddr_B20; / 嗅探的主机Bchar keyword100; / 嗅探的关键信息/ IP数据包解析函数int DecodeIpPack(char *);/ TCP数据包解析函数i

24、nt DecodeTcpPack(char *);/ UDP数据包解析函数int DecodeUdpPack(char *);/ ICMP数据包解析函数int DecodeIcmpPack(char *);/ 显示数据包信息void ShowPackInfo(char *buf, int iProtocol, char *szSoueceIP, char *szDestIP, char *szProtocol);/ 显示子协议数据包函数void ShowSubPackInfo(char *, int);/ 错误检测函数void CheckSockError(int, char*);/ 协议检测

25、函数char *CheckProtocol(int);/ 设置嗅探器参数函数bool SetSnifferParam();上面程序主要定义了相关的全部变量和声明了相关函数。变量SockRaw是负责接收数据包的原始套接字。变量TcpFlag定义了TCP的标识位,以便进行TCP的数据包解析。变量paramAll表示是否对所有类型数据包进行嗅探。变量paramTcp表示是否对TCP数据包进行嗅探。变量paramUdp表示是否对UDP数据包进行嗅探。变量paramIcmp表示是否对ICMP数据包进行嗅探。变量paramKeyword表示是否进行关键字搜索。变量Keyword表示关键字。变量packet

26、_totallen表示嗅探到的每个数据包的总长度,变量aramHostAddr_A和aramHostAddr_B表示通信双方的IP地址。/ SOCK错误处理函数void CheckSockError(int iErrorCode, char *pErrorMsg) if(iErrorCode = SOCKET_ERROR) printf(%s Error : %d,pErrorMsg,GetLastError(); closesocket(SockRaw); exit(0); 上面程序是实现SOCK错误的功能函数。参数iErrorCode是输入的校验码; 参数pErrorMsg是输入的错误信息

27、。程序流程是:如果校验码表示的是错误码SOCKET_ERROR,则调用GetLastError函数将具体的错误信息输出。/ 协议识别函数char *CheckProtocol(int iProtocol) for(int i=0; i%d ,ntohs(pTcpHeader-th_sport),ntohs(pTcpHeader-th_dport); unsigned char FlagMask = 1; / 输出标志位 for(i=0;ith_flag) & FlagMask) printf(%c,TcpFlagi); else printf(-); FlagMask = FlagMask1;

28、 printf(n); 上面程序是实现解析TCP数据包函数的部分代码。参数TcpBuf是输入的TCP首部和数据段的头指针。程序流程是:首先将TcpBuf转换成TCP首部格式。然后输出TCP首部中的源端口号th_sport和目的端口号th_dport。最后采用循环与位的方法输出TCP首部中的标志位。 / 求数据段长度 int totalheadlen = sizeof(IPHEADER)+sizeof(TCPHEADER); int tcpheadlen = sizeof(TCPHEADER); memcpy(data,TcpBuf+tcpheadlen,packet_totallen-totalheadlen); / 进行关键字寻求和输出 if(paramkeyword = 1) / 如果找到关键字,则输出数据段 if(strstr(data,keyword) printf(n*DATA*n); for(i =0 ;ipacket_totallen-totalheadlen;i+) printf(%c,datai); printf(n*DATA*n);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1