网络嗅探器论文

上传人:新** 文档编号:501863808 上传时间:2023-07-30 格式:DOC 页数:22 大小:113KB
返回 下载 相关 举报
网络嗅探器论文_第1页
第1页 / 共22页
网络嗅探器论文_第2页
第2页 / 共22页
网络嗅探器论文_第3页
第3页 / 共22页
网络嗅探器论文_第4页
第4页 / 共22页
网络嗅探器论文_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《网络嗅探器论文》由会员分享,可在线阅读,更多相关《网络嗅探器论文(22页珍藏版)》请在金锄头文库上搜索。

1、网络嗅探器论文 目录摘要1正文11)什么是网络嗅探器12)网络嗅探器的作用23)网络嗅探器的原理24)网络嗅探器的设计65)详细分析8a)嗅探器设计需要包含的头文件有:8b)Ip数据报头的结构体:8c)Tcp报头结构体:9d)Udp报头结构体:9e)变量:9f)过滤规那么:10g)循环抓包:11h)源代码:14总结19参考文献20摘要本设计是关于网络嗅探器的设计与实现 ,功能包括实现网络层抓包 ,对获得包的源和目的地址、端口、协议等进行分析和实现简单的包嗅探器功能。以vc为开发平台,使用Windows环境下的网络数据包捕获开发库WinPcap认真学习和掌握网络嗅探器工作原理,设计出一个嗅探器,

2、使其实现网络层抓包,并对获得包的源和目的地址、端口、协议等进行分析,实现简单的包嗅探器功能。本文的关键字为网络嗅探器,sniffer抓包,winpcap, c+ 正文1) 什么是网络嗅探器随着网络开展的不断延续,网络应用日益复杂,以满足人们对信息的大量需求,但伴随而来的是,大量网络故障及网络病毒冲击着网络与终端用户,因此对于网络平安管理与网络日常的要求日益加重。嗅探器Sniffer Pro有着至关重要的作用。嗅探器是利用计算机网络接口截获所需网络内部数据报文的一种工具,它广泛地应用于流量分析、平安监控的实现中。Sniffer主要被用来在网络上截获位于OSI协议模型中各个协议层次上的数据包,通过

3、对截获数据包的分析,嗅探器可以掌握目标主机的信息。嗅探器,可以理解为一个安装在计算机上的窃听设备它可以用来窃听计算机在网络上所产生的众多的信息。简单一点解释:一部 的窃听装置, 可以用来窃听双方通话的内容,而计算机网络嗅探器那么可以窃听计算机程序在网络上发送和接收到的数据。 可是,计算机直接所传送的数据,事实上是大量的二进制数据。因此, 一个网络窃听程序必须也使用特定的网络协议来分解嗅探到的数据, 嗅探器也就必须能够识别出那个协议对应于这个数据片断,只有这样才能够进行正确的解码。 计算机的嗅探器比起 窃听器,有他独特的优势: 很多的计算机网络采用的是“共享媒体。也就是说,你不必中断他的通讯,并

4、且配置特别的线路,再安装嗅探器,你几乎可以在任何连接着的网络上直接窃听到你同一掩码范围内的计算机网络数据。我们称这种窃听方式为“基于混杂模式的嗅探promiscuous mode 。 尽管如此,这种“共享 的技术开展的很快,慢慢转向“交换 技术,这种技术会长期内会继续使用下去, 它可以实现有目的选择的收发数据。2) 网络嗅探器的作用 嗅探器是网络的抓包工具,可以对网络中大量数据抓取,从而方便使用者对网络中用户的一些信息进行分析,所以,通常被黑客运用于网络攻击。我们如果也能掌握网络嗅探器的原理和设计,可以将它运用与网络故障检测、网络状况的监视,还可以加强企业信息平安防护。3) 网络嗅探器的原理嗅

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

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

7、信息保存了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。下面先给出结构.数据包的总体结构:数据包IP头 TCP头(或其他信息头) 数据数据在从应用层到达传输层时,将添加TCP数据段头,或是UDP数据段头。其中UDP数据段头比拟简单,由一个8字节的头和数据局部组成,具体格式如下:16位 16位源端口 目的端口UDP长度 UDP校验和而TCP数据头那么比拟复杂,以20个固定字节开始,在固定头后面还可以有一些长度不固定的可选项,下面给出TCP数据段头的格式组成:16位 16位源端

8、口 目的端口顺序号确认号TCP头长 (保存)7位 URG ACK PSH RST SYN FIN 窗口大小校验和 紧急指针可选项(0或更多的32位字)数据(可选项)对于此TCP数据段头的分析在编程实现中可通过数据结构_TCP来定义:typedef struct _TCP WORD SrcPort; / 源端口WORD DstPort; / 目的端口DWORD SeqNum; / 顺序号DWORD AckNum; / 确认号BYTE DataOff; / TCP头长BYTE Flags; / 标志(URG、ACK等)WORD Window; / 窗口大小WORD Chksum; / 校验和WOR

9、D UrgPtr; / 紧急指针 TCP;typedef TCP *LPTCP;typedef TCP UNALIGNED * ULPTCP;在网络层,还要给TCP数据包添加一个IP数据段头以组成IP数据报。IP数据头以大端点机次序传送,从左到右,版本字段的高位字节先传输(SPARC是大端点机;Pentium是小端点机)。如果是小端点机,就要在发送和接收时先行转换然后才能进行传输。IP数据段头格式如下:16位 16位版本 IHL 效劳类型 总长标识 标志 分段偏移生命期 协议 头校验和源地址目的地址选项(0或更多)同样,在实际编程中也需要通过一个数据结构来表示此IP数据段头,下面给出此数据结构

10、的定义:typedef struct _IPunion BYTE Version; / 版本BYTE HdrLen; / IHL;BYTE ServiceType; / 效劳类型WORD TotalLen; / 总长WORD ID; / 标识union WORD Flags; / 标志WORD FragOff; / 分段偏移;BYTE TimeToLive; / 生命期BYTE Protocol; / 协议WORD HdrChksum; / 头校验和DWORD SrcAddr; / 源地址DWORD DstAddr; / 目的地址BYTE Options; / 选项 IP;typedef IP

11、 * LPIP;typedef IP UNALIGNED * ULPIP;在明确了以上几个数据段头的组成结构后,就可以对捕获到的数据包进行分析了。嗅探器的具体实现根据前面的设计思路,不难写出网络嗅探器的实现代码,下面就给出一个简单的例如,该例如可以捕获到所有经过本地网卡的数据包,并可从中分析出协议、IP源地址、IP目标地址、TCP源端口号、TCP目标端口号以及数据包长度等信息。由于前面已经将程序的设计流程讲述的比拟清楚了,因此这里就不在赘述了,下面就结合注释对程序的具体是实现进行讲解,同时为程序流程的清晰起见,去掉了错误检查等保护性代码。主要代码实现清单为:/ 检查 Winsock 版本号,W

12、SAData为WSADATA结构对象WSAStartup(MAKEWORD(2, 2), &WSAData);/ 创立原始套接字sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);/ 设置IP头操作选项,其中flag 设置为ture,亲自对IP头进行处理setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag);/ 获取本机名gethostname(char*)LocalName, sizeof(LocalName)-1);/ 获取本地 IP 地址pHost = gethostb

13、yname(char*)LocalName);/ 填充SOCKADDR_IN结构addr_in.sin_addr = *(in_addr *)pHost-h_addr_list0; /IPaddr_in.sin_family = AF_INET;addr_in.sin_port = htons(57274);/ 把原始套接字sock 绑定到本地网卡地址上bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in);/ dwValue为输入输出参数,为1时执行,0时取消DWORD dwValue = 1;/ 设置 SOCK_RAW 为SIO_RCVALL,以便接

14、收所有的IP包。其中SIO_RCVALL/ 的定义为: #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)ioctlsocket(sock, SIO_RCVALL, &dwValue);前面的工作根本上都是对原始套接字进行设置,在将原始套接字设置完毕,使其能按预期目的工作时,就可以了。4) 网络嗅探器的设计在以太网中, 信息是以明文的形式在网络上传输 2 , 当将网络适配器设置为混杂模式时, 由于采用以太网播送信道争用的方式, 使得监听系统与正常通信的网络能够并联连接, 并可捕获任何一个在同一冲突域上传输的数据包。IEEE802. 3 标准的以太网采用的是持续CSMA 的方式, 正是由于以太网采用这种播送信道争用的方式, 使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截我所要的信息, 这是捕获数据包的物理根底。首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包, 这就要求一局部运行在操作系统核心内部, 直接与网络接口驱动交互。这个局部是系统依赖的, 在W inpcap 的解决方案里它被认为是一个设备驱动, 称作NPF

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号