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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

sniff理论及其框架.docx

1、sniff理论及其框架Sniff网络基础原理和软件实现技巧详解一、前言 SNIFF真是一个古老的话题,关于在网络上采用SNIFF来获取敏感信息已经不是什么新鲜事,也不乏很多成功的案例,那么,SNIFF究竟是什么呢? SNIFF就是嗅探器,就是窃听器,SNIFF静悄悄的工作在网络的底层,把你的秘密全部记录下来。看过威尔史密斯演的全民公敌吗?SNIFF就象里面精巧的窃听器一样,让你防不胜防。 SNIFF可以是软件,也可以是硬件,既然是软件那就要分平台,有WINDOWS下的、UNXI 下的等,硬件的SNIFF称为网络分析仪,反正不管硬件软件,目标只有一个,就是获取在网络上传输的各种信息。本文仅仅介绍

2、软件的SNIFF。 当你舒适的坐在家里,惬意的享受网络给你带来的便利,收取你的EMAIL,购买你喜欢的物品的时候,你是否会想到你的朋友给你的信件,你的信用卡帐号变成了一个又一个的信息包在网络上不停的传送着,你是否曾经这些信息包会通过网络流入别人的机器呢?你的担忧不是没有道理的,因为SNIFF可以让你的担忧变成实实在在的危险。就好象一个人躲在你身后偷看一样。 二、网络基础知识 网络基础知识,是不是听起来有点跑题了?虽然听起来这和我们要谈的SNIFF没什么关系,可是还是要说一说的,万丈高楼平地起,如果连地基都没打好,怎么盖楼?!如果你对网络还不是十分清楚的话,最好能静下心来好好看看,要知道,这是基

3、础的基础,在这里我只是简单的说一下,免得到时候有人迷糊,详细的最好能够自己去找书看看。 (1)TCP/IP体系结构 开放系统互连(OSI)模型将网络划分为七层模型,分别用以在各层上实现不同的功能,这七层分别为:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。而TCP/IP体系也同样遵循这七层标准,只不过在某些OSI功能上进行了压缩,将表示层及会话层合并入应用层中,所以实际上我们打交道的TCP/IP仅仅有5层而已,网络上的分层结构决定了在各层上的协议分布及功能实现,从而决定了各层上网络设备的使用。实际上很多成功的系统都是基于OSI模型的,如:如帧中继、ATM、ISDN等。 TCP/I

4、P的网络体系结构 - | SMTP | DNS | HTTP | FTP | TELNET| 应用层 - | TCP | UDP | 传输层 - | IP | ICMP | ARP RARP | 网络层 - | IEEE 802 以太网 SLIP/PPP PDN etc| 数据链路层 - | 网卡 电缆 双绞线 etc | 物理层 -从上面的图中我们可以看出,第一层物理层和第二层数据链路层是TCP/IP的基础,而 TCP/IP本身并不十分关心低层,因为处在数据链路层的网络设备驱动程序将上层的协议和实际的物理接口隔离开来。网络设备驱动程序位于介质访问子层(MAC)。 (2)网络上的设备 中继器:

5、中继器的主要功能是终结一个网段的信号并在另一个网段再生该信号,一句话,就是简单的放大而已,工作在物理层上。网桥:网桥使用MAC物理地址实现中继功能,可以用来分隔网段或连接部分异种网络,工作在数据链路层。路由器:路由器使用网络层地址(IP,X.121,E.164等),主要负责资料包的路由寻径,也能处理物理层和数据链路层上的工作。网关:主要工作在网络第四层以上,主要实现收敛功能及协议转换,不过很多时候网关都被用来描述任何网络互连设备。(3)TCP/IP与以太网 以太网和TCP/IP可以说是相互相成的,可以说两者的关系几乎是密不可分,以太网在一二层提供物理上的联机,而TCP/IP工作在上层,使用32

6、位的IP地址,以太网则使用48位的MAC地址,两者间使用ARP和RARP协议进行相互转换。从我们上面TCP/IP的模型图中可以清楚的看到两者的关系。 载波监听/冲突检测(CSMA/CD)技术被普遍的使用在以太网中,所谓载波监听是指在以太网中的每个站点都具有同等的权利,在传输自己的资料时,首先监听信道是否空闲,如果空闲,就传输自己的数据,如果信道被占用,就等待信道空闲。而冲突检测则是为了防止发生两个站点同时监测到网络没有被使用时而产生冲突。以太网采用广播机制,所有与网络连接的工作站都可以看到网络上传递的资料。 为了加深你的理解,我们来看看下面的图,一个典型的在以太网中客户与服务器使用 TCP/I

7、P协议的通信。 用户进程 FTP客户 FTP服务器 应用层 内核中的协议栈 TCP TCP 传输层 内核中的协议栈 IP IP 网络层 以太网驱动程序 以太网驱动程序 数据链路层 说了这么多,有人烦了吧?相信我,这是基础的基础,可以说是说得是很简单拉,如果需要,拿出个几十万字来说上面的内容,我想也不嫌多,好了,让我们进入下一节, sniff的原理。 三 SNIFF的原理 要知道在以太网中,所有的通讯都是广播的,也就是说通常在同一个网段的所有网络接口都可以访问在物理媒体上传输的所有资料,而每一个网络接口都有一个唯一的硬件地址,这个硬件地址也就是网卡的MAC地址,大多数系统使用48比特的地址,这个

8、地址用来表示网络中的每一个设备,一般来说每一块网卡上的MFC地址都是不同的,每个网卡厂家得到一段地址,然后用这段地址分配给其生产的每个网卡一个地址。在硬件地址和IP地址间使用ARP和RARP协议进行相互转换。在正常的情况下,一个网络接口应该只响应这样的两种资料帧: 1.与自己硬件地址相匹配的资料帧。 2.发向所有机器的广播资料帧。 在一个实际的系统中,资料的收发是由网卡来完成的,网卡接收到传输来的资料,网卡内的单片程序接收资料帧的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就接收后产生中断信号通知CPU,认为不该接收就丢掉不管,所以不该接收的资料网卡就截断

9、了,计算机根本就不知道。CPU得到中断信号产生中断,操作系统就根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收资料,驱动程序接收资料后放入信号堆栈让操作系统处理。而对于网卡来说一般有四种接收模式: 广播方式:该模式下的网卡能够接收网络中的广播信息。 组播方式:设置在该模式下 的网卡能够接收组播资料。直接方式:在这种模式下,只有目的网卡才能接收该数据。 混杂模式:在这种模式下的网卡能够接收一切通过它 的资料,而不管该资料是否是 传给它的。 好了,现在我们总结一下,首先,我们知道了在以太网中是基于广播方式传送资料的,也就是说,所有的物理信号都要经过我的机器,再次,网卡可以置于一种模式叫混杂

10、模式(promiscuous),在这种模式下工作的网卡能够接收到一切通过它的资料,而不管实际上数据的目的地址是不是他。这实际上就是我们SNIFF工作的基本原理:让网卡接收一切他所能接收的数据。 我们来看一个简单的例子,机器A、B、C与集线器HUB相连接,集线器HUB通过路由器Router访问外部网络。这是一个很简单也很常见的情况,比如说在公司大楼里,我所在的网络部办公室里的几台机器通过集线器连接,而网络部、开发部、市场部也是同样如此,几个部门的集线器通过路由器连接。还是回到我们的图一上来,值得注意的一点是机器A、B、C使用一个普通的HUB连接的,不是用SWITCH,也不是用ROUTER,使用S

11、WITCH和ROUTER的情况要比这复杂得多。 我们假设一下机器A上的管理员为了维护机器C,使用了一个FTP命令向机器C进行远程登陆,那么在这个用HUB连接的网络里资料走向过程是这样的。首先机器A上的管理员输入的登陆机器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来资料帧送到了HUB上,现在由HUB向每一个接点广播由机器A发出的资料帧,机器B接收到由HUB广播发出的资料帧,并检查在资料帧中的地址是否和自己的地址相匹配,发现不是发向自己的后把这资料帧丢弃,不予理睬。而机器C也接收到了资料帧,

12、并在比较之后发现是发现自己的,接下来他就对这数据帧进行分析处理。 在上面这个简单的例子中,机器B上的管理员如果很好奇,他很想知道究竟登陆机器C上FTP口令是什么?那么他要做的很简单,仅仅需要把自己机器上的网卡置于混杂模式,并对接收到的资料帧进行分析,从而找到包含在资料帧中的口令信息。四 做一个自己的sniff 在上一节里,我们已经知道了SNIFF的基本原理是怎么一回事,这一节我们来亲自动手做一个自己的sniff,毕竟,用程序代码来说话比什么都要来得真实,也容易加深理解。回头想一想我们上面说的原理,我们要做的事情有几件: 1. 把网卡置于混杂模式。 2. 捕获数据包。 3. 分析资料包。 注:下

13、面的源代码取至Chad Renfro的一文中 /*Tcp_sniff_2.c*/ 1.#include 2.#include 3.#include 4.#include 5.#include 6.#include 7.#include 8.#include 9.#include headers.h #define INTERFACE eth0 /*Prototype area*/ 10.int Open_Raw_Socket(void); 11.int Set_Promisc(char *interface, int sock); 12.int main() 13.int sock, byte

14、s_recieved, fromlen; 14.char buffer65535; 15.struct sockaddr_in from; 16.struct ip *ip; 17.struct tcp *tcp; 18.sock = Open_Raw_Socket(); 19. Set_Promisc(INTERFACE, sock); 20. while(1) 22. 23. fromlen = sizeof from; 24. bytes_recieved = recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddr *)&fro

15、m, &fromlen); 25. printf(nBytes received : %5dn,bytes_recieved); 26. printf(Source address : %sn,inet_ntoa(from.sin_addr); 27. ip = (struct ip *)buffer; /*See if this is a TCP packet*/ 28. if(ip-ip_protocol = 6) 29. printf(IP header length : %dn,ip-ip_length); 30. printf(Protocol : %dn,ip-ip_protoco

16、l); 31. tcp = (struct tcp *)(buffer + (4*ip-ip_length); 32. printf(Source port : %dn,ntohs(tcp-tcp_source_port); 33. printf(Dest port : %dn,ntohs(tcp-tcp_dest_port); 34. 35. 36. 37.int Open_Raw_Socket() 38. int sock; 39. if(sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP) 0) /*Then the socket was not c

17、reated properly and must die*/ 40. perror(The raw socket was not created); 41. exit(0); 42. ; 43. return(sock); 44. 45.int Set_Promisc(char *interface, int sock ) 46. struct ifreq ifr; 47. strncpy(ifr.ifr_name, interface,strnlen(interface)+1); 48. if(ioctl(sock, SIOCGIFFLAGS, &ifr) = -1) /*Could not

18、 retrieve flags for the interface*/ 49. perror(Could not retrive flags for the interface); 50. exit(0); 51. 52. printf(The interface is : %sn, interface); 53. perror(Retrieved flags from interface successfully); 54. ifr.ifr_flags |= IFF_PROMISC; 55. if (ioctl (sock, SIOCSIFFLAGS, &ifr) = -1 ) /*Coul

19、d not set the flags on the interface */ 56. perror(Could not set the PROMISC flag:); 57. exit(0); 58. 59. printf(Setting interface : %s : to promisc, interface); 60. return(0); 61. /*EOF*/上面这段程序中有很详细的注解,不过我想还是有必要说一说,首先 第10行-int Open_Raw_Socket(void); 是我们的自定义函数,具体内容如下: 37.int Open_Raw_Socket() 38. in

20、t sock; 39. if(sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP) 0) /*Then the socket was not created properly and must die*/ 40. perror(The raw socket was not created); 41. exit(0); 42. ; 43. return(sock); 44. 第39行 if(sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP) ip_protocol = 6) ,如果答案是,tcp信息包从整个IP/TCP

21、包 buffer + (4*ip-ip_length) 地址处开始,所以31行 tcp = (struct tcp *)(buffer + (4*ip-ip_length),然后对应结构把你所需要的信息输出。 /*headers.h*/ /*structure of an ip header*/ struct ip unsigned int ip_length:4; /*little-endian*/ unsigned int ip_version:4; unsigned char ip_tos; unsigned short ip_total_length; unsigned short i

22、p_id; unsigned short ip_flags; unsigned char ip_ttl; unsigned char ip_protocol; unsigned short ip_cksum; unsigned int ip_source; unsigned int ip_dest; ; /* Structure of a TCP header */ struct tcp unsigned short tcp_source_port; unsigned short tcp_dest_port; unsigned int tcp_seqno; unsigned int tcp_a

23、ckno; unsigned int tcp_res1:4, /*little-endian*/ tcp_hlen:4, tcp_fin:1, tcp_syn:1, tcp_rst:1, tcp_psh:1, tcp_ack:1, tcp_urg:1, tcp_res2:2; unsigned short tcp_winsize; unsigned short tcp_cksum; unsigned short tcp_urgent; ;/*EOF*/ 从上面的分析我们可以清楚的认识到,认识一个SNIFF需要对TCP/IP协议有着详细的了解,否则你根本无法找到你需要的信息。有了上面的基础,你可

24、以自己来做一个你需要的SNIFF了。五 常用的SNIFF 很少有原因会让你自己亲自动手来做一个自己的SNIFF,除非你是想了解他的原理,或者是其它一些特别的原因,比如你要在某个特殊的环境拦截一些特殊的资料包。下面我们就来看看一些在网络上经常使用的SNIFF。 (1)windows环境下 windows环境下当然是大名鼎鼎的netxray以及sniffer pro了,实际上很多人都是用他在 windows环境下抓包来分析,不过我想很少有人笨到去在别人的机器上安装一个图形接口的SNIFF,除非他和管理员很熟悉. netxray的使用就不多说了,反正windows下的东西就是click,click,click,非常的方便用户。 (2)UNUX环境下 UNUX环境下的sniff可以说是百花齐放,一抓就是一大把,如sniffit,snoop,tcpdump,dsniff等都是比较常见的,他们都有一个好处就是发布源代码,可以让你研究,当然也都是免费的。 1. sniffit sniffit可以运行在Solaris、SGI和Linux等平台上,由Lawrence Berkeley Laboratory 实验室开发的一个免费的网络监听软件。最

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

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