sniffer学习手册.pdf
http://www.100md.com
2020年11月16日
![]() |
| 第1页 |
![]() |
| 第5页 |
![]() |
| 第12页 |
![]() |
| 第23页 |
![]() |
| 第35页 |
![]() |
| 第154页 |
参见附件(2679KB,158页)。
sniffer学习手册
Sniffer,中文可以翻译为嗅探器,也叫抓数据包软件,是一种基于被动侦听原理的网络分析方式。使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。,小编今天为大家准备了sniffer学习手册,欢迎学习

相关内容部分预览







简介
Sniffer软件是NAI公司推出的一款一流的便携式网管和应用故障诊断分析软件,不管是在有线网络还是在无线网络中,它都能够给予网管管理人员实时的网络监视、数据包捕获以及故障诊断分析能力。对于在现场运行快速的网络和应用问题故障诊断,基于便携式软件的解决方案具备最高的性价比,却能够让用户获得强大的网管和应用故障诊断功能。 [1]
技术代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(intargc,char**argv) {intsock,n;charbuffer[2048];unsignedchar*iphead,*ethhead;structifreqethreq;intno=0;//
设置原始套接字方式为接收所有的数据包if((sock=socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP)))<0){perror(“\n原始套接字建立失败\n”);exit(1);}//设置网卡工作方式为混杂模式,SIOCGIFFLAGS请求表示需要获取接口标志strncpy(ethreq.ifr_name,”eth0”,IFNAMSIZ);//InterfaceNamesizeif(ioctl(sock,SIOCGIFFLAGS,ðreq)==-1){perror(“\n设置混杂工作模式失败\n”);close(sock);exit(1);}//开始捕获数据并进行简单分析While(1){n=recvfrom(sock,buffer,2048,0,NULL,NULL);no++;printf(“\n************%dpacket%dbytes************\n”,no,n);//检查包是否包含了至少完整的以太帧(14),IP(20)和TCP/UDP(8)包头if(n<42){perror(“recvfrom():”);exit(0);}ethhead=buffer;printf(“DestMACaddress:%02x:%02x:%02x:%02x:%02x:%02x\n”,ethhead[0],ethhead[1],ethhead[2],ethhead[3],ethhead[4],ethhead[5]);printf(“SourceMACaddress:%02x:%02x:%02x:%02x:%02x:%02x\n”,ethhead[6],ethhead[7],ethhead[8],ethhead[9],ethhead[10],ethhead[11]);iphead=buffer+14;/*跳过Ethernetheader*/if(*iphead==0x45){/*DoublecheckforIPv4*andnooptionspresent*/printf(“Sourcehost:%d.%d.%d.%d,”,iphead[12],iphead[13],iphead[14],iphead[15]);printf(“Desthost:%d.%d.%d.%d\n”,iphead[16],iphead[17],iphead[18],iphead[19]);printf(“Sourceport:%d,Destport:%d”,(iphead[20]<<8)+iphead[21],(iphead[22]<<8)+iphead[23]);if(iphead[9]==6)printf(“TCP\n”);elseif(iphead[9]==17)printf(“UDP\n”);elseprintf(“protocolid:%d\n”,iphead[9]);}}}[2]
sniffer安装图解教程
sniffer安装方式
1. 首先并解压软件;

sniffer pro中文版(附安装教程)
大小:37.78 MB版本:4.7.5 版环境:WinXP, Win7, Win8, Win10, WinAll
进入
2. 先安装SnifferPro_4_70_530.exe英文原版
3. 汉化前退出 Sniffer Pro 4.70.530 应用程序
4. 运行补丁程序“cn-SnifferPro4.70.530.EXE”,选择您的 Sniffer Pro 4.70.530 的安装目录进
sniffer安装教程
1.双击【SnifferPro_4_70_530.exe】,打开软件安装界面,然后点击【Next】;
2.软件正在安装中……,请耐心等待;
3.继续点击【Next】进入到下一步;
4.阅读协议,点击【Yes】;
5.输入名字与公司名称后,点击【Next】;
6.如果修改安装目录请点击【Browse...】,然后再点击【Next】;
7.等待安装配置;
8.在弹出的windows安全界面,我们点击【始终安装此驱动程序软件】;
9.填写信息后,点击【下一步】;(请不要填写中文)
10.继续填写信息,不会的可根据下方图中的信息填写,填写后点击【下一步】;
11.这里填写方式如下图,输入注册序列号[SA154-2558Y-255T9-2LASH],填写后点击【下一步】;
12.该界面我们选择【Not Connected to network or dial-up. Print fax option】,点击【下一步】;
Ps:界面文字内容
Direct Connection to the internet(直接连接到互联网)
Connecton to The internet Through a proxy(连接到互联网,通过代理)
Not Connected to network or dial-up. Print fax option(没有连接到网络或拨号。打印传真选项)
13.继续点击【下一步】;
14.点击【完成】,这是软件就安装完毕了;
15.在安装完成后,软件会提示是否重启电脑,用户选择是即可;
16.重启完后,我们不要运行软件,(如果已运行我们退出软件)再接着运行汉化补丁【cn-SnifferPro4.70.530.EXE】,注意看附件包名称,不要运行错了,汉化补丁为中文界面,这里河东软件园小编就不为大家做截图了,安装方法很简单,只需要点击【下一步】……即可
sniffer,exe-无法找到入口是怎么回事
出现这种情况一般是显卡问题,更新下显卡,你用来设计的建议最好用独立显卡来显示图像。
如果更新显卡解决不了问题,可能是这个PS版本和你电脑配置不对应,那就换一个版本重新试下。一般老版本的PS对电脑配置要求比较低,通常都能正常运行。
如果你用的是WIN10,在装好程序以后,在桌面快捷方式点击右键,选择属性,在里面选择以管理员身份运行程序就可以。
其它情况这个应该是更新了最新版本的显卡驱动后,由于该驱动程序不稳定造成的。
有些人很喜欢去更新最新版本的显卡驱动,结果一更新问题就来了(楼主所说的情况就是问题之一),所以建议大家只要是稳定的驱动,最好不要去更新,因为新驱动反而不成熟、不稳定。
解决办法:找到并安装原先较低版本的显卡驱动即可。
以“驱动人生”为例,打开“驱动人生”,点击以9开头的显卡驱动(比如下图中推荐的9.18.13.4803。目前的新版驱动通常都是以10开头的),然后点击“立即修复”即可。

评论
这个应该是更新了最新版本的显卡驱动后,由于该驱动程序不稳定造成的。
有些人很喜欢去更新最新版本的显卡驱动,结果一更新问题就来了(楼主所说的情况就是问题之一),所以建议大家只要是稳定的驱动,最好不要去更新,因为新驱动反而不成熟、不稳定。
解决办法:找到并安装原先较低版本的显卡驱动即可。
以“驱动人生”为例,打开“驱动人生”,点击以9开头的显卡驱动(比如下图中推荐的9.18.13.4803。目前的新版驱动通常都是以10开头的),然后点击“立即修复”即可。

sniffer学习手册截图




SNIFFER: Troubleshooting with the Sniffer
Sniffer 学习手册
编者:毛晋晋 著
深圳龙岗
毛晋晋 MSN:maojinjincn@hotmail.com E-mail:maojinjin@gmail.com 欢迎指正 提出建议 共同学习
绪 言
最近沉下心来在学习 sniffer,对于 sniffer 没有什么好说的,大凡稍微懂
点网络知识的或喜欢黑客的朋友都知道 sniffer=嗅探器,在这个方面相信很多
人比我学的好,因为这个东西我接触的晚,而且网络这东西这也是最近两年才刚
开始,所以很多东西还需要改进,前些日子在网上看了一篇《范伟导老师 Sniffer
课程资料》的贴子觉得很不错,感觉很深,实话直说这篇贴子我看了三遍,先介
绍一下让我感兴趣的范老师(虽然我至今还没见过他照片当然本人更是没见过),而且在这篇教程中也借用许多范老师讲课的内容。
范老师,范伟导,现在是Sniffer中国技术中心的技术总监,中国唯一的
Sniffer大师(SCM),CISCO和Sniffer的授权讲师,这是范老师的邮箱:
fanweidao@hotmail.com,大家没有什么特别的事不要轻易去打扰他。
我本人,毛晋晋,现在在深圳一家制造业公司做网络管理,2006 年获信息
产业部的网络工程师中级职称,毕业后留校任教半年,现正在向CISCO方向学习,个人技术博客: http:blog.csdn.netmaodou521,MSN: maojinjincn@gmail.com
希望有这方面爱好的人一起来学习。
决定写 sniffer 教程有三个原因,一是因为个人最近在学习比较的清闲,第二方面就是前面说到的范老师的讲课给我很大的刺激,下面我到时会全文引用
范老师一个学生写的范老师讲课内容。第三点是因为我自已也是一个搞网络的,毕竟这年头什么都要学点才不至于落伍嘛。
下面我稍微叙述一下 sniffer 教程的一些基本内容,以便让大家做个决定,哪些该看,哪些可以跳过去的,当然我希望大家能跳过去的越多越好,这样一来
就表明大家的知识比起我来就丰富的多了,同时我这上面也有很多是从网上整理
来的,所以大家的看时不要觉得奇怪,这里我在哪看过了,这里是什么地方来的,我现在申明就是这个意思。
首先,我要介绍给大家的就是范老师的那篇讲演稿,为什么会把这个做为
开始呢,这是因为这篇稿恰恰是引领大家入门的一个好方法,在稿里范老师由浅
入深的介绍了 sniffer 及为什么学网络的人要学,当然不单单是学网络的人要
学,很多 IT 人都要学。
第二篇,主要讲讲我自已的一些感受,当然你也可以跳过。
第三篇,介绍嗅探的基本原理,从大体上了解一下它的运行环境,复习一下
我们的基本网络知识,从大体上介绍 TCPIP 体系,Sniffer 技术与 antisniffer
技术,这些都能很好的让我们了解 Sniffer 的发展,让大家从根本上明白这个东
西.
第四篇,从大概上我介绍一下 sniffer 的产品及常见应用,这是一个开始,只有让大家熟悉了,大家才会从根本上去了解它。同时也让大家明白 sniffer
的一些功能和作用,当然同时还是复习了原理的东西.
第五篇,介绍 sniffer 的界面,大家在这一章节里可以自已动手实验一下,当然你要有条件才行。同时对一些基本的使用及案例进行分析,让大家有机会一
边操作一边学习,更好的学习和在工作中使用sniffer,体验Sniffer带来的乐趣,其中牵涉到的案例大家一定要动手去做,不然就没有效果了.
第六篇,谈及到了 TCPIP,建议大家有可能将 TCPIP 详解看看,当然可以
让大家学习如何使用 Sniffer 学习 TCPIP,同时让大家明白网络的运作原理等,希望能让大家受益.
2第七篇,是关于嗅探的基本原理,也不能让大家快结束了,还不知道这个
东西是怎么实现的。再次复习一次,在这里大约说了三遍,让大家加深印象,不然
马上就忘了,那就不好了.
第八篇,Sniffer 的基本使用与实例,这一章节里就是真正的让你明白怎么
去使用 Sniffer 了,再次实战操作了,希望大家好好利用最后一次操作的机会,记
住:一定要动手去做!
最后介绍给大家的就是你用 Sniffer 之后,对得到的东西怎么去理解,这
便就是数据分析实例,基本上就是按照一个循序渐进的过程,让大家从开始入门,再到最后,就是一个问为什么的过程,只要明白了这点,不管以后在什么样的工
作中你都会相当不错。
最后感谢我的同事王志明先生,在整本书写作期间一直默默的提供实验环
境,积极的加入到 Sniffer Pro 的各个测试过程及提供建议,在此表示感谢!
编者:毛晋晋
于深圳龙岗
3
目 录
1-开篇…………………………………………………………2
2-范伟导老师Sniffer 课程资………………………………5
3-自已的看法………………………………………………28
4-嗅探的基本原理…………………………………………34
5-SNIFFER (嗅探器) 简介……………………………………51
6-Sniffer 使用简介(一)……………………………………66
7-Sniffer 使用简介(二)……………………………………81
8-Sniffer学习TCP…………………………………………101
9-sniffer 原理……………………………………………128
10-Sniffer Pro 的基本使用和实例(一)…………………132
10-Sniffer Pro 的基本使用和实例(二)…………………151
4范伟导老师 Sniffer 课程资料
言:
范老师现在是 Sniffer 中国技术服务中心的技术总监,是中国唯一的
Sniffer 大师(SCM),他有丰富的经验和经典案例,讲课讲得不错。
我是范老师的学生,我 2005 年学习了 Sniffer,发现收获很大,但我不能
透露我的单位,因为我想范老师不会允许我把他的讲课内容公开。
以下内容是我根据上课录音编写的,基本上是范老师的原话。我整理了一
个星期才整理出来,因为范老师在上课时有很多笔书,整理起来很困难, 有人
会问,为什么不把录音共享出来,主要是课程中很多实验,只有录音,作用不大,我把他整理成文字,看起来会方便一些,当我全部整理完,估计可以出书了,版
权费给谁呢?哈哈,我希望大家喜欢,如果反应良好,我把后面的内容也贴出来,很辛苦的,大家要珍惜。
大家不要放映,精华内容都在注释里。
大家有什么问题,可以发E-mail给范老师,fanweidao@hotmail.com,记住
如果他问你是谁,你说是北京移动或广东移动或工商银行随便一个省分行的,因
为这些单位的学生特别多,他肯定搞不清楚。哈哈,对不起了!范老师,我只是
想帮你推广Sniffer.
课程内容:
大家好!欢迎大家参加 Sniffer 的认证课程!
先自我介绍一下!我叫范伟导,这是我的邮件(fanweidao@hotmail.com),我现在没有工作(同学们:自由职业者)可以这么说。
介绍一下我的经历:毕业后我在一个台资电脑厂工作了一年,做硬件的。
后来到了日本三洋工作,作 X400 的软件开发,做 ERP,用 RPG 开发,做了 4 年
后来到了神州数码,作 CISCO 网络,原来在技术中心做实施,后来在培训中心做
讲师,一共做了 5 年。
现在我是 CISCO 和 Sniffer 的授权讲师,不过现在我不想做 CISCO 了,想
做 Sniffer,因为我觉得网络分析是一个很好的技术方向。等一下我还会跟大家
聊一聊我们该往哪一个方向发展。
先看一下我们这个课程,这个课程事实上是两门课,第一门我们介绍怎样
用 Sniffer 来做网络故障诊断,还有网络管理的一些方法和思路,第二门课我们
介绍如何做应用的分析,这是 Sniffer 的新课程,我个人觉得非常好,以前的几
个班学员也很喜欢。第一门课我们会讲 3 天,第二门课我们会讲 2 天。
5接下来的半个小时我们不讲书本知识,讲讲我的经历和 Sniffer 究竟能用
来做什么,我们为什么要学 Sniffer,其实我的目的是提起大家的学习兴趣,大
家愿意学,我才讲的起劲。要不我一边讲,大家在噼噼啪啪上网,那我就讲不下
去了(同学们笑)。
大家做网络都很多年了,想想我们以前的 10 兆以太网,现在的万兆以太网,想想 14.4k 的 modem,现在的 2M 宽带,以前的 x25,桢中继,现在的 SDH,MSTP,裸
光纤。大家都经历这些,但我们才工作几年?就这几年,变化这么大,我不知道
大家的工资有没有变化这么大,(同学们大笑),从 10 兆到万兆,1000 倍,几年
工资张 1000 倍。有点难(同学们:不是有点难,是很难,不可能)。
再看看我们工作的变化,以前能配配路由器就很牛了,现在似乎谁都会了,记得几年前,我帮一个小集成商配一台 4000 系列交换机,收了 2000 元,15 分
钟搞定。(同学们:好爽,介绍一些给我们做),没有了说说你们的工作。平常
工作中做些什么(同学们:做做网线,杀病毒,帮领导装机器)大家想想,这是
我们想做的工作吗,以前这些都不用我们做,现在大家感觉是不是地位在下降,工资也不涨,好歹我们也是蜘蛛级的人物呀,不是有个笑话说蜜蜂是空姐,做网
络的是蜘蛛吗。(同学们笑)
我们该怎么办?
现在说说我的观点,我们都希望工资能年年涨,不要求 1000 倍,(同学们:
不要求那么高,一年 20%就行了),20%?不止吧,从毕业到现在,你们工资不
止年均涨不止 20%吧。 (同学们:我们不能跟您比)也有可能,你们的起点高,我毕业的时候才有 650 元。
大家回顾一下,做 IT 的谁的收入高?
1、销售
2、领导
3、咨询专家
4、售前工程师
5、售后工程师
我们在座的有 3 个是网络中心的主任或科长,他们的收入肯定比一般工程
师高,我祝愿你们步步高升,收入节节高。在座大多数是网络工程师,我们该怎
么走,其实你们现在的单位都很好,但将来怎样很难知道,比如前几年银行的收
入令人羡慕,现在他们却担心降工资,现在移动的收入不错吧,我有汽车厂商的
学员,他告诉我他们的收入比移动好点,(同学们:哇)这是他们自己说的,好
多少就没说了,还有某政府单位的,什么单位不便说,他们没告诉我他们的收入,只说,价格少于 4 万的笔记本他们不用,哇靠,4 万的笔记本,什么配置?(同
学们:那是服务器)我们不能比,人比人,气死人。我们没法进入这些公司的,还是脚踏实地一点好,但我们做技术的也要考虑如何提高我们的收入,做技术的
要提高收入,地位是关键,前面大家说只做做线,杀杀病毒,我们的地位在下降,工资怎么长得起来呢?想想我们做技术的,谁的收入高,做数据库的比做服务器
的高,为什么 Oracle 那么火,做服务器的比写程序的高,写程序的比做网络高,6这是普遍现象,不说特殊情况。其实大家发现一个特点没有,凡是掌握企业关键
业务的收入都很高,你看作数据库的,数据库坏了,企业完蛋了,领导当然重视,现在不仅讲存储,还讲灾备,你看很多银行,北京一个数据中心,上海一个数据
中心。
我们网络怎样,设计的都是高可靠性的端到端备份,出问题的机会很少,而当应用出什么问题,都说是网络问题。举个例子,有个单位(税务的学员告诉
我的),有一天应用突然变慢,大家都说网络慢了,我们用尽 troubleshooting
的技术也发现不了问题,结果作数据库的工程师偷偷改一下表空间,好了,没问
题了,我们不知道怎么好了,做数据库的不说他们有问题,还说网络好了,领导
问我网络怎么好的,我不知道呀,领导说:赶快查出原因,避免再出现类似问题,哇塞,怎么查,本来网络就没问题,查什么查。(同学们笑)
所以现在大家用一个字来形容我们的工作?你们会用什么字(同学们:累、苦)很贴切,苦、累所以我们不能一直停留在网络的 troubleshooting,我们必
须提高我们的地位,要不我们会累死。
怎么提高地位,我们必须了解我们的业务,也就是要了解应用,了解应用
在我们网络上的行为特征,很重要的一个词行为特征。当我们了解了业务的行为
特征,我们能定位某一个问题的真正故障点,举个例子:网络应用变慢,可能的
原因有什么?网络问题,服务器问题,数据库问题,应用程序问题,客户机问题。
如果我们能够判断是哪一部分问题,我们就有发言权了,比如说刚才那种情况,如果我们直接说这是数据库问题,不是网络问题,领导会问,你凭什么说是数据
库问题,你可以拿出 Sniffer,专家系统上写着,DB Slow Server response 诊
断,(范老师在演示)再看解码,做一个用户验证操作,花了 1.731 秒,有根有
据,大家想一想,有了 Sniffer 我们可以了解我们的业务行为特征,可以排除我
们的责任,不但工作轻松了,地位也提高了。(同学们笑)
以前我们应用出现问题的时候我们总是分头查找问题,结果往往是没有结
果,因为这种查找方式范围太大了,我们做 troubleshooting 第一步应该是:隔
离故障。
如果我们有了 Sniffer,首先用 Sniffer 看一下,最有可能是哪一部分问题,再安排检查,这样不但节省人力,速度会更快,效率也更高。
如果有人问我们Sniffer是什么?大家都会说是协议分析仪,你看sniffer
网站(www.networkgeneral.com)上说的是应用和网络分析系统。究竟Sniffer
是什么样的一个东西,我们要了解他的发展过程。其实很多类似的产品比如
ethereal,netscout,wildpacket等都有类似的发展过程。
第一阶段是抓包和解码,也就是把网络上的数据包抓下来,然后进行解码,那时候谁能解开的协议多,谁就是老大,Sniffer 当时能解开的协议最多,也就
理所当然地成了老大,现在 Sniffer 能解开 550 种协议,还是业界最多的,7第二阶段是专家系统,也就是通过抓下来的数据包,根据他的特征和前后
时间戳的关系,判断网络的数据流有没有问题,是哪一层的问题,有多严重,专
家系统都会给出建议和解决方案,现在 Sniffer 的专家系统还是业界最强的
第三阶段:是把网络分析工具发展成网络管理工具,为什么要这样,如果
Sniffer 知识用作网络分析,那 Sniffer 的软件就够用了,现在软件的 portable
基本上都是盗版的,sniffer 没钱赚了,所以它必须往网络管理方向转,要作为
网络管理工具,就必须能部署在网络中心,能长期监控,能主动管理网络,能排
除潜在问题,要做到这些,就要求有更高的性能,所以 Sniffer 就有了相应的硬
件产品,比如说分布式硬件平台,InfiniStream 等,我知道在座各位都买了
Sniffer 的硬件,这时候如果用软件的 Sniffer 性能就不行了。
我们看一下,Sniffer 究竟有什么用?
第一,Sniffer 可以帮助我们评估业务运行状态,如果你能告诉老板说,我
们的业务运行正常,性能良好,比起你跟老板报告说网络没有问题,我想老板会
更愿意听前面的报告,但我们要做这样的报告,光说是不行的,必须有根据,我
们能提供什么样的根据呢。比如各个应用的响应时间,一个操作需要的时间,应
用带宽的消耗,应用的行为特征,应用性能的瓶颈等等,到第二门课,我会告诉
大家怎么做到有根有据。
第二,Sniffer 能够帮助我们评估网络的性能,比如,各连路的使用率,网
络的性能的趋势,网络中哪一些应用消耗最多带宽,网络上哪一些用户消耗最多
带宽,各分支机构流量状况,影响我们网络性能的主要因素,我们可否做一些相
应的控制,等等。
第三,Sniffer 帮助我们快速定位故障,这个大家比较有经验,我们记住
Sniffer 的三大功能:monitor,expert,decode 这三大功能都可以帮助我们快速
定位故障,我后面通过案例演示给大家看,大家再做做实验,很快就上手了(同
学问:范老师,是否要学 Sniffer 必须对协议很熟,)不一定,我们可以通过
Sniffer 来学习各种协议,比如 ospf,以前学网络的时候,讲 OSPF 的 LSA 好像很
复杂,你用 Sniffer 看看,其实他的协议结构还是不复杂的,一般情况下,我会
要求学 Sniffer 的学员有 CCNP 的基础,或者有几年的网络管理经验,我自己也
是这样,刚开始只是用 Sniffer 抓抓包,抓下来也不知道怎么分析,当我学完
CCNP 后,学了 CIT,以为自己不错了,会排除很多网络故障,但实际上很多问题
我还是解决不了,比如网络慢,他又不断,断了我很快能解决,网络慢,或者丢
包,一般的排错知识还是很难的,那时候开始学 Sniffer,才发现很好用。
第四,Sniffer 可以帮助我们排除潜在的威胁,我们网络中有各种各样的应
用,有一些是关键应用,有一些是 OA,有一些是非业务应用,还有一些就是威
胁,他不但对我们的业务没有帮助,还可能带来危害,比如病毒、木马、扫描等,Sniffer 可以快速地发现他们,并且发现攻击的来源,这就为我们做控制提供根
据,比如我们要做 QOS,不是说随便根据应用去分配带宽就解决了,我们要知道
哪一些应用要多少带宽,带宽如何分配,要有根有据。我们再回过头看一下
Sniffer 什么时候开始流行的,再 2003 年冲击波发作的时候,很多 Sniffer 的
8用户通过 Sniffer 快速定位受感染的机器,后来很多人都知道 Sniffer 可以用来
发现病毒,Sniffer 的知名度暴涨,盗版用户也暴涨(同学们大笑),后来震荡
波发作的时候,很多人用 Sniffer 来协助解决问题。我想强调的是 Sniffer 不是
防病毒工具,这也只是他的一个用途,而且只对蠕虫类型对网络影响大的病毒有
效,对于文件型的病毒,他很难发现。
另外要说明的事,Sniffer 还可以用来排除来自内部的威胁,现在我们网络
中有各种各样的网络安全产品,防火墙、IDS、防病毒软件,他们都有相应的功
能,但真的有效吗,能解决全部威胁吗,我们要进行评估,用 Sniffer 就能评估
内网的安全状况,有没有病毒,有没有攻击,有没有扫描,像防火墙、IDS、防
病毒软件他们都是后知后觉的,它必须有特征才能阻绝,而 Sniffer 是即时监控
的工具,通过发现网络中的行为特征,判断网络是否有异常流量,所以 Sniffer
可能比防病毒软件更快地发现病毒。我在神州数码的时候,冲击波震荡波都是我
先发现的,有趣的是当时我都在上 Sniffer 的课,中午休息,我把 sniffer 驾到
公司网络,再 Hosttable 看到广州一台机器很多广播,接着广州另外一台机器也
开始发广播,接着深圳也感染了,我马上通知 IT 管理人员,他们把这几台机器
断网,后来才知道有冲击波病毒,防病毒软件还不能杀。
刚才讲到异常流量,这是一个很重要的概念,什么是异常流量?我们怎么
判断是否异常,这又涉及另外一个概念,叫基准线分析,什么是基准线,基准线
是指我们网络正常情况下的行为特征,包括利用率、应用响应时间、协议分布,各用户贷款消耗等,不同工程师会有不同基准线,因为他关心的内容不同,只有
知道我们网络正常情况下的行为特征,我们才能判断什么是异常流量。
第五,做流量的趋势分析,通过长期监控,可以发现网络流量的发展趋势,为我
们将来网络改造提供建议和依据
第六点就是应用性能预测,这点很有用,会用的人不多,我们第二门课会
讲,Sniffer 能够根据捕获的流量分析一个应用的行为特征,比如,你现在有一
个新的应用,还没有上线,我能评估他上线后的性能,比如在用户在网络中心有
多快,用户在省中心有多快,用户在市中心有多快,都可以提供量化的预测,准
确率挺高的,误差不超过 10%。我们还可以用她来评估应用的瓶颈在哪,不同应
用瓶颈不同,比如有些应用慢了,增加网络带宽效果很明显,比如 FTP 这种应用,有些应用慢了增加带宽没什么效果,比如 TELNET 应用,我们还可以预测网络带
宽增加的效果,比如我将 2 兆提高到 8 兆应用性能有多大的提升,Sniffer 能比
较准确地预测。
在这里我们提到三个重要概念,网络行为特征,异常流量,基准线,大家
理解了吗?在这里,我不想太多介绍产品,我不是来推销 Sniffer 的(同学们笑),我们主要探讨网络分析技术。
Sniffer 的便携式就是我们用的那种盗版软件(同学们笑), 我不用介绍了,这门课我们用 Sniffer 的便携式来讲,因为分布式和 InfiniStream 也有一样的
界面,上课的时候我们都是用便携式。
9Sniffer 的分布式包括 4100 和 6040,主要是放在网络核心可以长期监控、分析,4100 可以处理千兆流量,6040 可以处理 8 千兆流量,这是业界性能最高
的产品。
Sniffer 的 InfiniStream 的特点是可以长期抓包,最多有4个T 的存储空
间,可以长期抓包,可以进行回溯性分析,这点对有些用户来说很重要,比如今
天早上 10 点半,某个应用很慢,十分钟后又正常了,如果没有 InfiniStream,流量没有保存,我们就很难分析问题在哪,如果有了 InfiniStream,这些流量都
会保存下来,自动的,就是长期抓包,我们就可以找出当时的流量,进行分析,一个很好的设备,现在支持 1800 兆线速捕获,这也是其他厂商没有的。
这些你们买设备的时候代理都给你们说清楚了,我就不多讲了。
怎么样,听了这么久,感觉如何?有兴趣吗?
其实我个人是很喜欢 Sniffer 的,我当时从三洋出来的时候,错过了去 IBM
的机会,去了神州数码才知道,他们 IBM 需要做 X400 的人,去了神州数码,老
板问我想做网络还是想做主机,我说做网络吧,那时一个 CCIE 二三十万的收入
是有的,结果到我考过 CCIE 笔试的时候,CCIE 就值 10 万吧,真是绝望了, (同
学们笑)为什么当时不做主机呢,我那些做 6000 的同事现在都不错,又不累。
做网络不就一个字:累吗(同学们笑)我也没有去考实验了,01 年的时候我考
了 CCSI,就是 CISCO 授权讲师,后来讲了很多 cisco 的课,我 CISCO 的学员有
1000 个,后来又讲 Sniffer 的课,Sniffer 的学员有 300 个,我的学员不少,有
不少关系不错的,他们过的比我好(同学们笑,你做讲师也不错呀,收入不低吧),以前讲CISCO的时候收入不高,一天也就1000到1500,讲Sniffer会好一些,(同
学们:讲 Sniffer 一天多少)这还不好公开,如果你们有兴趣开班,我们再聊 (同
学们笑)。后来我考过了 SCM,Sniffer 的最高级认证,叫 Sniffer 大师。中国
就我一个人,(同学们:哇,难不难考,考几门),Sniffer的考试不难,这个
我后面会讲,考过 SCM 的全球也只有 62 个,亚太区只有 5 个,所以 Sniffer 原
厂的课程都是我讲的。在今年,我会去协助组建 Sniffer 中国技术服务中心,以
后你们有什么问题都可以联系我,我在那里是技术总监。我们还有在各行各业的
Sniffer 专家小组,都是喜欢使用 Sniffer 的人在一起交流使用心得,分享一些
案例,你们如有兴趣,到时我可以邀请你们参加,不过首先要认真听课。(同学
们笑)
好了,讲了这么多,目标只有一个,提起大家的学习兴趣,接下来讲课程
的内容,首先把 Sniffer 打开。
好,大家都打开了吗,有问题随时告诉我,(跑去解答问题去了)如果大
家在上课的时候有任何疑问,随时可以打断我,不用给我面子,我也不一定能回
答所有问题,不过没关系,交流总会进步的。
好,我们继续第一个我要介绍的是 local agent。什么叫 local agent,大
家打开菜单“File->select settings”,这时候,大家可能只看到一个 local 下
10面是你的网卡,这就叫做一个“local agent”。
事实上,一个“local agent” 就像一个探针。我们知道 Sniffer 的工作
原理很简单,就是把网卡设成混杂模式(叫做 promiscuous),所谓混杂模式,就是把所有数据包接受下来放入内存,大家知道一般情况下,PC 机只接受目的
mac 地址为自己网卡或广播、组播的数据包。sniffer 就是这样把所有数据包都
接收下来,在进行分析。
大家看我这里有多个 agent,怎样可以做多个 agent 呢,可以不同网卡做不
同的 agent,就像你们的分布式 sniffer 一样,有多个网卡,那就是多个
agent,infinistream 也一样。
其实一个网卡,也可以做多个 agent,大家试一下,new 一个,给他加上说
明,就叫 101 把,选中你们的网卡,下面选 no pod,copy setting 留空,那个
pod 是你外接 sniffer book 时候用的。大家看看你们的 agent 多了一个,101
括号 local_2。对不对(同学们:对)
好,不错。
我们为什么建立多个 agent 呢。不同的 agent 可以定义不同的阀值,可以
有不同的过滤器,可以有不同的触发器,不同的地址本。
比如说,你们有一台笔记本装着 sniffer,大家都用它,那不同的工程师可
以自己定义一个 agent,自己定义自己的过滤器,互不干涉,比如不同的网段有
不同的阀值,也可以定义不同的 agent。
那 agent 的参数保存在哪里呢,大家打开 c:\program
files\nai\sniffernt\program,大家看到 local local_2,这就是两个不同的
agent 保存参数的地方。大家看到两个 CSF 文件,一个是 sniffer.csf,另外一
个是 Snifferdisplay.csf。这是过滤器文件,当我们使用 sniffer 一段时间之
后,大家会累积许多好的过滤器,一定记得保存下来,就是把这两个文件考出来
就行了,如果你看到别人那里有好的过滤器,也可以拷过来。不过当你要倒回去
11的时候,4.8 比较好办直接倒入就行了,4.75 比较麻烦,我后面讲定义过滤器的
时候再教大家。过滤器是 sniffer 最难、最有意思、最重要的一部分,大家放心,我能让大家成为高手。(同学们笑)
好,“local agent”讲完了,local agent 是什么?事实上就是定义一个
环境变量,不同的环境不同的参数。
好,休息一下,待会儿讲 monitor 功能。
中间休息的时候,我问了范老师一个问题:我看书上说,TCP 是可靠的,UDP
是不可靠的,那要不可靠 UDP 来干什么?(各位:我的问题是不是很傻?但我确
实不知道呀)
范老师:不错,这个问题非常好!(嘿嘿!)
TCP 叫传输控制协议,他的特点是:有连接,有流控,有顺序号确认号,开销比较大,一般是 20 个字节的头。
UDP 叫用户数据报协议,开销小,8 个字节的头,无可靠保证。
我后面有详细介绍 TCP 和 UDP,我们先看您的问题。
首先,UDP,不可靠,是指,在传输层不提供可靠保证,并不意味着所有使
用 UDP 的应用都不可靠。
我们来比较几个应用(范老师用他的 trace file 给我演示)
DNS,53 端口,进行查询时,用的是 UDP,因为要求速度快,比如我要查
networkgeneral 的地址,你只要告诉我 ip 是多少就行了,如果要进行 3 次握手
建立连接,再去取到 IP,那就慢了,所以用的是 UDP,一个字:快。没响应怎么
办,事实你看(他在演示)它会同时向多个 DNS 查询,所以没响应也没关系,你
看这个响应名字错误,找不到。所以 UDP 还是有用的,特别是像 DNS 查询这种应
用,丢了也就丢了,我再查。但 DNS 也有用 TCP 的时候,比如 DNS 服务器的同步,用的就是 TCP 的 53 端口
TFTP,您所了解的 TFTP,用的是 UDP 吧,他不可靠吗,事实上文件传输,必
须保证可靠。不但要保证能知道丢包重传,还要有顺序号,应付错序到达的情况,也就是我们常说的后发先至。事实上 TFTP 是怎样工作的,你看(他在演示),每一个数据块都有 Id 号,一块 512 字节,一次传输,一次确认,这就相当于 TCP
的顺序号和确认号。所以 UDP 是不可靠的,但很多使用 UDP 协议的应用是可靠的,只是在应用层去保证可靠性,很多人说用 UDP 效率高,事实上 TFTP 在传输大文
件的时候,比 FTP 效率更地,我们后面有专门的实验。
视频流量,(没有演示)对于视频流量,也是需要可靠保证的,但要求不
是很高,所以不会像 TFTP 那样每一个数据报都确认,而是传多个数据包确认一
12次,要不效率就太低了,究竟多少个数据包确认一次,开发人员需要不断测试。
我的解释清楚吗,(我说:明白了!谢谢!)
(确实看着演示,很容易就理解了,中间我们有许多对话,我省略了,确实如果
只听录音是不明白的,这是我为什么要整理成文字给大家看,好累呀!大家给我
加油!)
好,我们继续!
我们来看一下 Sniffer 的七大 monitor 功能,有
Dashboard,hosttable,matrix,ART,protocol distribution,history
sample,global statistics 我们一个一个来看,
先看 dashboard。
13
这个大家很熟悉了,我不用多讲,dashboard 有 3 个仪表,分别是使用率,每秒钟包数量,每秒钟错误率,下面都有两个数字,前面一个表示当前值,后面
一个表示最大值。
下面还有 long term,和 short term,Long term 每 30 分钟采样一次,一共
可以采样 24 小时,short term 每 30 秒钟采样一次,可以采样 25 分钟大家自己
试一下,首先把 File 里面的 loopback 选上,这样我们发的数据包就不会发到
网络中去,然后打开 101 目录里的 TCPdemo7a 那个 trace file ,再用 packet
general 发包,选 send current buffer,连续发送。 (我们是跟着范老师做的)。
好了,大家试了一遍,感觉应该是一样的,就是这有什么用?没用,对吧,我也这样觉得(同学们笑)但如果你要监控某一台服务器的时候,这个是有用的,比如你把一台服务器的接口 monitor 过来,这样你就可以看到这台服务器的流
量状况了,这就是一个很好的基准线呀。当然大家用的是硬件产品,就更方便了。
大家注意到下面还有错误报的统计,要注意的是一般的网卡是抓不了错误包的,要用专用网卡,一块网卡上万块,NG 好黑呀(同学们笑)其实大家知道通过交
换机的存储转发,基本上很少错误包,所以不用关注它。
在这里我想解释一下以太网的错误包,这对大家学习网络是很有帮助的,特别是了解一下封装的概念。
(请看下一页:以太网为什么要 64 个字节)
14
(这是范老师的板书,我画不出来,大家将就点吧)
(这是范老师的板书,我画不出来,大家将就点吧)
以太网是无连接的,不可靠的服务,采用尽力传输的机制。以太网 CSMACD 我就
不多讲了,我相信大家都了解这个原理。
以太网是不可靠的,这意味着它并不知道对方有没有收到自己发出的数据
包,但如果他发出的数据包发生错误,他会进行重传。以太网的错误主要是发生
碰撞,碰撞是指两台机器同时监听到网络是空闲的,同时发送数据,就会发生碰
撞,碰撞对于以太网来说是正常的。
我们来看一下,假设 A 检测到网络是空闲的,开始发数据包,尽力传输,当数据包还没有到达 B 时,B 也监测到网络是空闲的,开始发数据包,这时就会
发生碰撞,B 首先发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续
的 01010101 或者 10101010,十六进制就是 55 或 AA。这个碰撞信号会返回到 A,如果碰撞信号到达 A 时,A 还没有发完这个数据包,A 就知道这个数据包发生了
错误,就会重传这个数据包。但如果碰撞信号会返回到 A 时,数据包已经发完,则 A 不会重传这个数据包。
我们先看一下,以太网为什么要设计这样的重传机制。首先,以太网不想
采用连接机制,因为会降低效率,但他又想有一定的重传机制,因为以太网的重
传是微秒级,而传输层的重传,如 TCP 的重传达到毫秒级,应用层的重传更达到
秒级,我们可以看到越底层的重传,速度越快,所以对于以太网错误,以太网必
须有重传机制。
要保证以太网的重传,必须保证 A 收到碰撞信号的时候,数据包没有传完,要实现这一要求,A 和 B 之间的距离很关键,也就是说信号在A和B 之间传输的
来回时间必须控制在一定范围之内。IEEE 定义了这个标准,一个碰撞域内,最
15远的两台机器之间的 round-trip time 要小于 512bit time.(来回时间小于 512
位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域
的直径。
512 个位时,也就是 64 字节的传输时间,如果以太网数据包大于或等于 64
个字节,就能保证碰撞信号到达 A 的时候,数据包还没有传完。
这就是为什么以太网要最小 64 个字节,同样,在正常的情况下,碰撞信号应该
出现在 64 个字节之内,这是正常的以太网碰撞,如果碰撞信号出现在 64 个字节
之后,叫 late collision。这是不正常的。
我们以前学习 CISCO 网络的时候,CISCO 交换机有一种转发方式叫
fragment-free,叫无碎片转发,他就是检查 64 个字节之内有没有错误,有的话
不转发,这样就排除了正常的以太网错误包。
(这是范老师的板书,我画不出来,大家将就点吧)
我们再来看一看以太网的帧结构。
要讲帧结构,就要说一说 OSI 七层参考模型。七层参考模型大家很熟悉,以前我们看书的时候会觉得不知所云,我刚学的时候就是这感觉,其实我们只要
掌握两点就行了。
一个是访问服务点,每一层都对上层提供访问服务点(SAP),或者我们可
以说,每一层的头里面都有一个字段来区分上层协议。
比如说传输层对应上层的访问服务点就是端口号,比如说 23 端口是
telnet,80 端口是 http。IP 层的 SAP 是什么?(同学们没说话)。
其实就是 protocol 字段,17 表示上层是 UDP,6 是 TCP,89 是 OSPF,88 是
EGIRP,1 是 ICMP 等等。
以太网对应上层的 SAP 是什么呢?就是这个 type 或 length。比如 0800 表
示上层是 IP,0806 表示上层是 ARP。我后面还会将各种以太网的帧类型。
16第二个要了解的就是对等层通讯,对等层通讯比较好理解,发送端某一层
的封装,接收端要同一层才能解封装。
我们再来看看帧结构,以太网发送方式是一个帧一个帧发送的,帧与帧之
间需要间隙。这个叫帧间隙 IFG—InterFrame Gap
IFG 长度是 96bit。当然还可能有 Idle 时间。
以太网的帧是从目的 MAC 地址到 FCS,事实上以太网帧的前面还有
preamble,我们把它叫做先导字段。作用是用来同步的,当接受端收到 preamble,就知道以太网帧就要来了。preamble 有 8 个字节前面 7 个字节是 10101010 也就
是 16 进制的 AA,最后一个字节是 10101011,也就是 AB,当接受端接受到连续的
两个高点平,就知道接着来的就是 D_mac。所以最后一个字节 AB 我们也叫他 SFD
(帧开始标示符)。
所以在以太网传输过程中,即使没有 idle,也就是连续传输,也有 20 个字
节的间隔。对于大量 64 字节数据来说,效率也就显得不高。
所以,有时我们用下载数据来检查我们的网速,这是不完全准确地,我们
要了解他的传输特征,才能准确判断电信究竟给了你多少带宽。我有一个移动的
学员,他说用户总怀疑我给他的带宽不够,其实我肯定给他两兆了,所以有时运
营商也挺不容易(同学们笑)。后来我告诉他怎么样用 sniffer 来测带宽,不知
道他后来成功了吗,我没有得到反馈。后面我会介绍怎样用 Sniffer 来做带宽测
试,非常精确的喔。我给很多用户作过带宽测试,他们大多都是怀疑电信给的带
宽不够。(同学们问:有没有不够的时候?)我测试的案例里还没有。还有就是
帮集成商作方案验证,比如,集成商给用户作了多链路捆绑,或路由负载均衡,用户说比原来更慢了,我去证明给用户看,负载均衡确实做起来了,流量分担很
正常。(同学们问:那为什么会慢呢),这就涉及到应用的特征和不同厂商采用
均衡的机制。我还没试过作进一步分析。因为这是集成商的朋友叫我去帮忙的,我只要证明给用户看方案没问题,并告诉集成商如何给用户解释就行了,在做下
去,就会画蛇添足了,因为可能让用户觉得我的水平比我朋友高,那不是帮倒忙
了。(同学们笑)所以帮忙也要适可而止。 (同学们笑)
好了,有点扯远了。前面讲这些主要是帮大家复习以下以太网知识,大家
别担心,时间是足够的,因为这门课里有很一些基础的知识,比如交换原理、 vlan
原理,那些知识我都会跳过,我第一天的内容不会很难,考虑到大家远道而来,第一天都很累。但后面回越来越难,大家要有心理准备。晚上要早点睡觉(同学
们笑)。还有一个,就是大家别指望能记得住我讲得全部内容,今天讲得明天还
记得一点,后天就全忘了,(同学们笑),到了课程结束的时候,基本上全忘光
了,(同学们大笑),所以做笔记很重要,我建议大家把笔记写在书上,到时才
对得起来。我也注意到一些同学在录音,我知道的,不用放在桌子底下(同学们
笑),那样效果不好,(同学们大笑),其实这是不允许的,不过没关系,只有
一个要求,不要放在互联网上。
17(编者:写到这里,有点写不下去了,觉得很内疚,觉得对不起范老师。
我参加过很多培训,范老师是我很喜欢的一个老师,他讲课不会非常幽默,但很
实用,这是因为他有很多经历,他在讲课过程中,会补充很多课程以外的东西,比如很多网络中的细节知识,很多工作中的思路,我觉得这方面收获很大,我个
人觉得是对我知识的全面补充,学完之后觉得不仅学会了 Sniffer,网络管理的
思路更清晰了,现在我指导工程师时,套了很多范老师的话,我觉得范老师很好。
怎么办?我在进行思想斗争。。。该不该再写下去。我想在论坛里发起投票,听
听大家的意见,我该不该再写下去。)
(编者:范老师的课程内容: 第一天 monitor 功能,Sniffer 的部署 。
第二天 expert,capture filter ,troubleshooting
第三天 decode,display filter ,trigger
第四天 应用的类型,应用的剖析,应用的分析思路
第五天 应用性能的分析,应用性能预测)
好,我们继续看第二个 monitor 功能,Host table,我们叫他主机列表。
这是非常好用的一个功能,有什么用呢?
第一看流量最大的 TOP10 主机,第二看广播量有多少,当时我发现冲击波、振荡波的时候, 就是看 这个host
table,发现有大量的全子网广播
18第三可以快速过滤单一主机流量。
第四通过过滤功能可以看到单一业务主机的流量分布,当然也可以通过镜
像接口去实现 。
我们一个一个来看。
首先 TOP10 主机,我们可以点击各列的标题来排序,方便我们分析,比如
收发包情况。大家可以试一下。
第二广播量有多少
我们点击 broadcast 或 multicast 的标题,查看广播量,有一点要注意,不要忘记看 MAC 层的广播和组播,因为 MAC 的广播不一定有 IP 头,比如 ARP,同样 IP 的广播在 MAC 也可能是单播,比如子网广播。
MAC 层的广播是目的 MAC 为 48 个 1,MAC 层的组播为目的 MAC 第一个字节最
低位是 1。(范老师有板书,我的本子上有,懒得画了)
IP 的广播有三种:255.255.255.255 叫本地广播,也叫直播,direct
broadcast,不跨路由器。
172.16.33.255 叫子网广播,广播给 172.16.33.0 这个子网,可以跨路由器。
172.16.255.255 叫全子网广播,广播给 172.16.0.0 这个主网,可以跨路由器。
大家以前学网络的时候,老师会给一个概念,说路由器是三层设备,隔离广播,对吧,我也是这样给同学介绍的,但我在后面会告诉同学,并不是所有广播都隔
离。
事实上只有 255.255.255.255 这类本地广播,路由器才不转发,对于子网
广播和全子网广播,路由器是转发的,这是为什么呢?
我们来看 4 个 255 的广播,在 MAC 的封装中,对应的目的 MAC 是广播,而
子网广播和全子网广播,对应的目的 MAC 是单播,所以路由器会转发。(范老师
在演示)所以我们注意到,路由器隔离的广播是目的 MAC 为全 1 的广播,对于目
的 MAC 是单播的上层广播,路由器是不能隔离的。
现在想想冲击波震荡波为什么影响那么大,因为它采用的是全子网广播,可以跨路由感染。所以对于这种流量我们要小心,希望下次再出现蠕虫病毒时,大家能快速发现,做个世界第一(同学们笑),同样我们要关注 MAC 层的广播。
第三,就是我们可以关注单一主机流量。
第一种办法,抓包。选中主机,点一下抓蝴蝶的工具,这样通过专家系统
和解码你就可以分析他在干什么了。这个我们后面再讲 。
19第二种办法,用 single station。选中主机,点一下下面这个电脑的图标,你可以看到他在跟谁通信,如果你看到他跟几十台、上百台机器同时通讯,可能
是什么?(同学们:BT),对,像 BT,电驴等 P2P 应用会有这个特征。
第四,就是我们如果我们把单一业务服务器的接口镜像过来,我们就可以
看到这台机器的流量状况,我们也可以采用过滤的方式。
Sniffer 有一种叫 Monitor 过滤器。大家选中一台机器,假设这是你要关
心的业务主机,再点一下这个定义过滤器的图标,(范老师在演示),你看他自
动产生一个叫 NEW1 的过滤器,就是这台机器跟任何机器通讯这样的一个过滤器。
我们点一下确定。
我们在选择 monitor 菜单上的 select filter,选 apply monitor filter,再选 new1,确定。
大家注意到,现在 host table 就只有和这台机器通讯的所有主机流量情况。
要注意一点是,monitor filter 应用的时候,对所有 monitor 功能生效,所以
在分析单一业务的时候,特别好用。当然如果你们买的是 InfiniStream 的话,就更方便了,想分析那个业务就分析哪个业务。
怎么样?Host table 好用吧?(同学问:为什么广播也是一台主机?不是
说广播地址不会作为主机地址吗?)(编者:这个问题好像比较低级)。
这是流量分析技术的特点,再流量分析中,它纯粹从包结构中去取得主机
信息,也就是目的 MAC,源 MAC,目的 IP,源 IP,他都作为主机处理,广播地址不
会在原地址中出现,但在目的地址中出现,也是一台主机。这并不影响我们分析。
好。还有什么问题吗?大家用 5 分钟自己试一下。
20好,我们继续看第 3 个 monitor 功能,Matrix,我们叫他矩阵,其实就是
主机会话情况,很多人用他来发现病毒,其实用他来评估网络状况,和异常流量,是一个很好用的工具。
大家看,一下子就满了,大多数网络中都是这样的,我们可以按一下崭停。
然后来分析
分析什么呢?
看那一台主机的连接数最多,要注意这个连接数不是传输层的连接数,是
指谁跟最多的主机连接 ,按右建选 zoom,放大。 ,找到对外连接最多的机器,选中,按右建,选 show select nodes,大家自己试一下。
我们注意到这台机器跟很多机器通讯,这正常吗?(同学们:不正常)
这要看实际情况,如果这时一台业务主机,太正常了,如果这时一台 PC 机,或
许在作 P2P。
究竟在作什么呢?
21
我们注意到这台机器向公网发出大量的 ICMP 包,那是在作什么?(同学们:
在 ping)对!PING 采用 ICMP 协议,ping 可以用来扫描,也可以用来攻击。
扫描就是看那一台机器活着,接着扫描端口,在攻击,所以扫描是攻击主机的前
奏。
另外 ,还可以用 ping 来冲击路由器,或占用带宽,是一种 DOS 攻击。
大家看这个过程更像哪一种类型。
(同学们:扫描,DOS 攻击)
一般情况下,扫描会是比较连续的地址,我们看这个地址并不连续,我们
先排除扫描,当然不是绝对的,也有比较聪明的扫描。
有同学说,这是 DOS 攻击,那是冲击路由器,还是占用带宽?
(同学们:冲击路由器)
嘿,这次比较统一,我也觉得他在冲击路由器,我们看,他的目标地址基
本不在一个网段,这样路由器收到这样的数据包会消耗大量资源在查找路由表上
面。所以对路由器有一定冲击。
一般来说,如果他想占用带宽的话,会发大包,我们发现,包的长度不大,并且一秒钟才发 10 几个包,所以对贷款冲击不大。
或许大家会觉得这没秒 10 几个包对路由器冲击也不大呀。大家想像一下,如果有很多机器在作这个操作,那影响就会很大。
22大家自己在找一找,是否还有其他机器在作同类事情。
(同学们找出 7 台这样的机器)
好大家找出 7 台这样的机器,怎么找出来的?有同学用钢材的办法,有同
学用过滤,都市好办法。
现在假设在你们的网络中出现这样的情况,我们发现了异常,接下来怎么
做?
(同学们:找到这台机器)
然后呢?
我们可以看看这台机器的任务管理器,看看有什么不常见的进程,把他去
掉,看是否解决。在看其他的机器,是否有类似的特征。
这是我的一个学员发给我的,当时他发现这 7 台机器都有一个特殊的进程,但是
他的防病毒软件没有查出来。他手工解决了。
这很好说明用 Sniffer 可以比防病毒软件更快发现病毒,因为防病毒软件
是后知后觉得,什么意思?防病毒软件必须有相应的特征才能查病毒。而
Sniffer 通过流量可以发现一些特征,一些异常。
但是有一点,我们不能拿 Sniffer 当防病毒软件用,那不是他的特长,同
时也太低沽 Sniffer 的功能了(同学们笑)
好我们在看看扫描是怎么一回事,大家看这个 trace file(范老师在演示,我就不写了)
先是 ARP 扫描,再端口扫描,接下来就是攻击了。
(编者:接着我们做了一个游戏,范老师让大家用 Sniffer 攻击他的机器,结果 1 台机器就把他的机器搞死了,这个就不细说了)
23
好,我们再看第四个 monitor 功能,ART,Application Response Time,应用响应时间。
应用响应时间是分析应用的一个很好工具,主要用来分析应用的性能。
ART 是指一个客户端发出一个请求,到服务器响应回来的时间差。
一般来说,应用响应的快慢,是应用性能的一个重要指标。
应用性能主要决定于几个因素:网络因素、服务器因素、客户端因素、应
用协议因素 。
我们先看看如何操作,再来看看应用这个功能。
我们打开 ART,大家看到 Http 的应用响应时间分析,这里有几个列, server
Address,Client Address.
他是怎么知道谁是 Server,谁是 Client?其实也就是看端口号和 IP 的对应
关系,比如如果一个数据包的目的 IP 是 1.1.1.1,目的端口是 80,Sniffer 就
会认为 1.1.1.1 就是 Http 服务器。对应的源 IP 就是 Client。
AvgRsp—平均响应时间
90%Rsp—90%响应时间,去掉头尾个 5%,其实我个人觉得去掉最大的 10%更
合理一些。
还有最大最小的响应时间,这些都是以毫秒为单位。
接着就是 TotalRsp,这个是响应次数,单位是次。
24接着是0到25 毫秒的响应有多少次,25 到 50 毫秒的响应有多少次。。等
等。
后面还有 server 发送子节数,client 发送子节数,timeout 次数等等,5
秒不响应则 Timeout。
我们再看看怎么增加其他应用,按属性,选择 display protocol,添加你关
心的协议,再确定,ART 会重新刷新(范老师在演示)
你看我这里就有了 telnet,Oracle。
(同学们:我们没有 Oracle)
我知道,其实平时我们更关心的是我们关键业务,所以我们要把我们关键
业务的端口添加进来,怎么添加?大家跟我来,选菜单上的“tool”->“option”
“protocol”,拉到下面,添加一种应用,比如 Oracle,端口 1521。
再在属性里把这个新协议选上,有了吗?(跑去解答问题去了)
好,大家都做出来了,我们平常分析关键业务就行了,有一点要说明,一
种业务可能有多个应用,也就是多个端口,需要同时分析。
有些同学喜欢把所有 well known 的协议添加到协议列表里,我在共享目录
上有两个注册表注入工具,大家只要运行以下就可以将这些常用端口都注入到协
议列表里,就不用一个一个敲了。其实我个人觉得不太必要,多了反而乱。
大家打开注册表,我们看一下协议列表,找到这两项:
HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates,Inc.\Sniffer\4.7\1CommonSettings\Protocols\IP Protocols\TCP
HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates,Inc.\Sniffer\4.7\1CommonSettings\Protocols\IP Protocols\UDP
这就是协议列表。注意不要有重复的,否则会报错。
25
(编者:这是范老师的板书)
应用响应时间是评估影响应用性能因素的一种很好的工具。我们看这样一
个例子。
比如通过 client 通过广域网连接到服务器。
我们同时在 AB 两点部署 Sniffer,分析某一业务的响应时间。
假设 Sniffer 在 A 点,他所看到的响应时间包括网络消耗时间和服务器处
理时间在 B 点的 Sniffer 看到的响应时间主要是服务器处理时间。这样我们比较
AB 两点的响应时间,来判断影响性能的主要因素是网络还是服务器。
假设 A 点的响应时间是 400 毫秒,B 点的响应时间是 100 毫秒,我们就知道
A 点的 400 毫秒中有 300 毫秒是消耗在网络上的,我们可以认为对于这个业务,性能的主要瓶颈在网络上,如果我们在深入分析是距离因素还是贷款因素,我们
就可以判断是否有改善空间。这个细节我们在第二门课讲。
如果 B 点的响应时间达到 250 毫秒,我们可以认为改善服务器的性能对于这个应
用来说会更明显一些。
如果我们 Sniffer 用多了。我们就可以做一个 AB 点的响应时间的基准线,假设正常情况下 A 点的响应时间是 400 毫秒,有一天你发现平均响应时间达到
600 毫秒,你就应该关注了,或许用户还没有抱怨,如果你这时分析应用性能下
降的原因,你就可以避免故障的产生,同时避免用户投诉。当然你也会有 B 点的
基准线,比较跟平时有何不同,很快就知道应该检查网络还是服务器。
对于 ART 还有什么不清楚地吗?或者大家平常还有其他用法?
26(编者:本来这次想写完第一天课程再共享,看到论坛中大家在催,就先
写到这吧,过几天就可以把第一天全部内容发完)
(编者:范老师已经找过我了,他说他的 MSN 有很多陌生人,后来看了内
容就知道是我写的,他说分享知识可以,但不要透露敏感信息,还说我比他讲得
好,汗。。。。所以这次我没有完全按他的录音翻译,自己有所删节,但基本上
是原汁原味。)
(编者:我发现写这个真的很累,因为有很多演示,很难写出来,最近很
忙,我都没有忘记我的承诺,给我加油,好吗?)
(编者:所有 PPT 都市我自己做的,范老师的 ppt 是不给我们的,我很努
力吧!)
27自已的一些看法
看完《范伟导老师 sniffer 课程资料》大家有什么想法,大家可以提出来
讨论,当然也可以跟身边有共同爱好朋友一起讨论,让大家讨论的目的就是让大
家有一个思想交流的过程,我不知道大家对这个是什么想法,我的想法就跟当初
学路由器,交换机和 TCPIP 一样,突然觉得搞网络的不懂这个东西就枉然了,跟路由器差不多,路由器,交换机是网络的的核心东西,你不搞懂这个你就白学
网络了,我想学 sniffer 也一样,你不懂 sniffer,你也枉然了,你想,在工作
中你不能很好的排除网络中存在的故障,不能很好的发现网络中存在的问题,不
能跟老板解释清楚故障所在,那么从根本上你就是不称职的,是吧,所以学习
sniffer 不但是对自已的一个提高,更是对自已的负责,我们搞技术的不能为了
几个工钱什么都干不了啊,呵,说的太严肃了点。
不知范老师的课程大家看了几次,呵,这篇稿子中的有些图是我自已添上
去的怕大家不明白,其中有些出入还请大家见谅。使用时有一个问题我不得不提
出来,在 windows2003 中运行 Dashboard 表可能会出现下面这个问题:
所以最好在 win2000 下运行,大家有时间去查查,我的学习时间快结束了,就来不及了,所以就此打住,有时间再向范老师请教。
我相信在上一篇范老师的课程记录中,大家应该明白了关于 sniffer 的一
些基本应用,当然其中说的网络技术人员的职业发展也应对大家有所启示才对,还希望大家能明白,不是很费力才对,网络这东西有的时候说需要自已去琢磨,单纯的靠理论知识也解决不了问题,因此建议大家在学习过程中自已的电脑上一
28定要安装上 sniffer 才好,不能凭空的在这听我说,那就没有意义了,也枉费我
花心思去整理这么一片东西,希望对大家有所帮助,要告诉大家的是我用的是
SnifferPro_4_70_530 这个版本的,当然现在也有更高版本的,大家可以在网上
找的到,但可能在安装时要注册所以请大家在安装前务必先准备一个能用的注册
码,好了,费话就不说了,先谈到这里,以后有什么内容再慢慢来。
在前面的那一稿中主要提到了几点,一是 sniffer 的作用,其中说到一点
就是检测病毒,当然这个病毒是指蠕虫病毒,因为这个病毒发作时会对网络产生
很大的影响,首先就是网络的数据流量会加大很多,这个就可以做为根据去判断
发生源,这对网管来说是一个很好的东西,能够发现问题嘛!当然还有很多作用
如:评估网络的性能,快速定位故障,排除潜在的威胁,排除来自内部的威胁。
就这些对网络管理都很有用啊,这就是工具给我们带来的方便啊,你自已说说,是这样不,对于网络管理来说,这些就是我们最基本的工作啊。你说一个东西能
帮我们解决这么多的问题那我们还找什么?
第二点就是基本介绍的了 sniffer 的一些基本功能及界面和一些使用,这方
便我们在这里会详细的介绍,如果大家不是很熟的话,我们也可以把安装过程给
大家讲解一下,这个我可以通过抓图的方式让大家很明白这个过程,当然在最后
我们还会通过一些实例来讲解它的使用及如果对一些常用的功能进行使用,不过
请大家不要拿来做别的事,那就脱离我写这些东西的本意了。再次重申一下,我
写这些东西都是为了让大家明白一个工具的使用及原理让大家在工作能更好的
完成自已的任务,因此请大家不要用来做为其它的用途。
第三点就是关于一些协议的东西,学习 sniffer 建议最好学过 CCNP,当然
你有网络基础也是一样的,这里就不多说了,在后面我们也会着重讲解这方面的
知识,所以希望大家不要着急,在 sniffer 中 TCPIP 协议是很重要的,因为在
使用过程中我们都要对 TCPIP 协议进行分析。
好了不多说了,说的再多还不如让大家自已动手,好吧,开始我们的学习
过程。
29NAI 的 Sniffer 系统
网络对你公司的作用愈来愈重要,同时随之而来的是你要为网络故障付出越
来越昂贵的代价。网络速度变慢和停机可以轻而易举使你损失数十万美元的收
入。为确保客户和合作伙伴的网络正常使用,在瓶颈造成故障之前,你应该应用
网络安全检测和解决的方案。
确保网络的稳定性
在电子商务时代,企业网络已经触及到你公司的每一个角落。在全球范围内,每时每地都有员工使用网络访问商业应用程序,每时每地都有客户登录网站进行
交易。为确保持续的网络性能,你需要拥有先进的监控和故障解决工具。Sniffer
作为减少网络故障的解决方案,这个先进的软件包提供的网络管理工具,可以帮
助你主动监控网络,在故障对使用者、客户和你公司的基础线路产生影响之前将
其解决。
Sniffer Technologies
适用于当今复杂的企业网络
Sniffer 能确保整个 LAN 和 WAN 拓扑网络的最高性能,从 10100 兆以太网
到最新的高速 ATM 和千兆位主干网-----贯穿所有企业和 Internet。
可以对整个网络的所有七层进行分析
Sniffer 软件可以对所有网络七层进行主动的监控和故障解决----从物理
层到应用层----所有这些功能都可以实时实现。
确保网络性能
30Sniffer Informant 软件将为你提供关于网络状况和性能的完整描述,从可
使用的带宽网络利用率到应用程序的效率。
可进行完整的网络监测
为使你的网络运行能够保持最高的效率,Sniffer Technologies 提供了一
整套的便携式及分布式软件工具,可以对网络性能进行监控、故障解决、报告和
主动管理。它是用于企业网络故障和性能管理的智能工具系列。
显然,没有两个网络具有相同的配置、用户基准、需求或设备。Sniffer 在
集成的软件包中提供全套主要组件,可以满足你对网络的精确要求。
Sniffer 便携式分析软件包
实时网络分析
如果要迅速检测和解决网络故障和性能问题,NAI 的便携式 Sniffer 的专家
分析功能可以找出网络、数据库和应用程序故障的根本原因。
Sniffer 的网络分析器可以运行于桌面、便携式和笔记本 PC,使用了 400
多种协议解释和强大的专家分析功能,可以对网络传输进行分析,找出故障和响
应缓慢的原因。它甚至可以对多拓扑、多协议网络进行分析---所有这些功能都
可以自动地实时实现。
部门网采用 Sniffer Basic,可以使用 Sniffer 的监控和解释分析功能。低
成本的实时监控和解释功能使得 Sniffer Basic 成为 MIS 人员的理想选择,他们
可以对小型企业、远程办公室和部门网进行支持。同时,Sniffer Basic 为一线
的 IS 人员提供了一个可以进行常规故障解决的强大工具。
Sniffer Pro LAN 和 Sniffer Pro WAN
它们适用于有完整的专家分析和 Sniffer 先进的协议解释功能要求的网络。
Sniffer Pro 对 LAN 和 WAN 网段上的网络传输的所有层进行监测,揭示性能问
题,分析反常情况,并推荐解决方案---所有这些功能都可以自动地实时实现。
Sniffer Pro High-Speed
它是用于优化最新的 ATM 及千兆位以太网性能和其可靠性的工具,Sniffer
的 SmartCapture 功能提供了对 LAN 仿真数据流和 IP 交换环境的监测。
31支持 ATM,它在企业网络中,针对每个 ATM OC-3 和 OC-12 高速链路,为你
提供了一个单独的解决方案。
支持 Gigabit,它是以全双工速度捕获,解决千兆位协同性问题的分析器。
其强大的处理功能可以提供对千兆位以太网的非对称监测。
Sniffer 分布式分析软件包
集成的专家分析和 RMON 监控软件包。
NAI的分布式Sniffer解决方案对应用程序传输和网络设备状态进行全天候
分析,可以使应用程序保持最高的运行效率。其中包括对部门网、校园网和主干
网的集中监控、设备级别报告和故障解决。
分布式 Sniffer 系统
从一个单独的管理控制台启动自动 RMON-适应网段监控和故障识别。
Sniffer 专家分析软件可以使你以最快的速度解决故障---即使有复杂的网络拓
扑、协议和应用程序。
企业故障和网络性能管理解决方案--Distributed Sniffer SystemRMON 可
以对整个网络中的主要网段(LAN、WAN、ATM 和千兆位以太网)提供网络监控、协议解释和专家分析功能。基于标准的监控和专家分析的强有力的结合使之成为
多拓扑结构和多协议网络的最优管理工具。
Network Informant Suite
对总体网络性能作出报告
NAI 强大的基于浏览器的网络信息解决方案可以帮助你识别趋势并管理服
务等级。这个企业报告解决方案采取了主动的方式进行网络管理。它通过网络自
动从设备中获取数据,然后编译成为网络性能的图形视图。基于浏览器的报告可
以提供总体概要分析和详细异常分析,帮助你管理服务级别,控制 WAN 线路占用,减少网络故障。
Network Informant 是用于企业网络性能报告、服务等级管理、WAN 线路占
用控制和企业诊断的首要的高级解决方案。灵活的基于浏览器的解决方案包括标
准的和任选的报告,可以进行配置以满足你公司的特殊需求。Network Informant
32还可以允许你使用 Crystal Reports 创建自定义报告,即业界公认的关系数据库
报告系统。
RouterPM 也是 Network Informant 软件包中的一个集成部分,为你提供了
进行企业 WAN 和 LAN 连续性能分析的的工具。它具有预处理和异常报告功能,使你可以预先发现问题并避免故障。
Sniffer Predictor
当网络需要进行升级时,Sniffer Predictor 将进行预报,确保资源适当以
保持运行通畅。
Sniffer Predictor 是一个基于工具的解决方案,它可以在几秒内预测变化
将对网络性能产生何种影响。适用于 Sniffer 便携式分析软件包和 Sniffer
分布式分析软件包。Sniffer Predictor 将供给企业网络管理员和计划者日
常使用,他们需要的整个网络及时的性能及计划数据。
这里对 NAI 的 Sniffer pro 进行介绍了。让大家大至上了解一下,在后面
的章节里我们主要对 Sniffer pro 进行介绍。
33嗅探的基本原理
一 前言
SNIFF 真是一个古老的话题,关于在网络上采用 SNIFF 来获取敏感信息已经
不是什么新鲜事,也不乏很多成功的案例,那么,SNIFF 究竟是什么呢?SNIFF
就是嗅探器,就是窃听器,SNIFF 静悄悄的工作在网络的底层,把你的秘密全部
记录下来。看过威尔史密斯演的《全民公敌》吗?SNIFF 就象里面精巧的窃听器
一样,让你防不胜防。
SNIFF 可以是软件,也可以是硬件,既然是软件那就要分平台,有 WINDOWS
下的、UNXI 下的等,硬件的 SNIFF 称为网络分析仪,反正不管硬件软件,目标
只有一个,就是获取在网络上传输的各种信息。本文仅仅介绍软件的 SNIFF。
当你舒适的坐在家里,惬意的享受网络给你带来的便利,收取你的 EMAIL,购买你喜欢的物品的时候,你是否会想到你的朋友给你的信件,你的信用卡帐号
变成了一个又一个的信息包在网络上不停的传送着,你是否曾经这些信息包会通
过网络流入别人的机器呢?你的担忧不是没有道理的,因为 SNIFF 可以让你的担
忧变成实实在在的危险。就好象一个人躲在你身后偷看一样………
二 网络基础知识
“网络基础知识”,是不是听起来有点跑题了?虽然听起来这和我们要谈的
SNIFF 没什么关系,可是还是要说一说的,万丈高楼平地起,如果连地基都没打
好,怎么盖楼?!如果你对网络还不是十分清楚的话,最好能静下心来好好看看,要知道,这是基础的基础,在这里我只是简单的说一下,免得到时候有人迷糊,详细的最好能够自己去找书看看。
(1) TCPIP 体系结构
开放系统互连(OSI)模型将网络划分为七层模型,分别用以在各层上实现
不同的功能,这七层分别为:应用层、表示层、会话层、传输层、网络层、数据
链路层及物理层。而 TCPIP 体系也同样遵循这七层标准,只不过在某些 OSI 功
能上进行了压缩,将表示层及会话层合并入应用层中,所以实际上我们打交道的
TCPIP 仅仅有 5 层而已,网络上的分层结构决定了在各层上的协议分布及功能
实现,从而决定了各层上网络设备的使用。实际上很多成功的系统都是基于 OSI
模型的,如:如帧中继、ATM、ISDN 等。
34 TCPIP 的网络体系结构(部分)
从上面的图中我们可以看出,第一层物理层和第二层数据链路层是 TCPIP
的基础,而 TCPIP 本身并不十分关心低层,因为处在数据链路层的网络设备驱
动程序将上层的协议和实际的物理接口隔离开来。网络设备驱动程序位于介质访
问子层(MAC)
(2) 网络上的设备
中继器:中继器的主要功能是终结一个网段的信号并在另一个网段再生该信
号,一句话,就是简单的放大而已,工作在物理层上。
网 桥:网桥使用 MAC 物理地址实现中继功能,可以用来分隔网段或连接部
分异种网络,工作在数据链路层。
路由器:路由器使用网络层地址(IP,X.121,E.164 等),主要负责数据包的
路由寻径,也能处理物理层和数据链路层上的工作。
网 关:主要工作在网络第四层以上,主要实现收敛功能及协议转换,不过
很多时候网关都被用来描述任何网络互连设备。
(3)TCPIP 与以太网
以太网和 TCPIP 可以说是相互相成的,可以说两者的关系几乎是密不可分,以太网在一二层提供物理上的连线,而 TCPIP 工作在上层,使用 32 位的 IP 地
址,以太网则使用 48 位的 MAC 地址,两者间使用 ARP 和 RARP 协议进行相互转换。
从我们上面 TCPIP 的模型图中可以清楚的看到两者的关系。
载波监听冲突检测(CSMACD)技术被普遍的使用在以太网中,所谓载波监听
是指在以太网中的每个站点都具有同等的权利,在传输自己的数据时,首先监听
信道是否空闲,如果空闲,就传输自己的数据,如果信道被占用,就等待信道空
闲。而冲突检测则是为了防止发生两个站点同时监测到网络没有被使用时而产生
冲突。以太网采用广播机制,所有与网络连接的工作站都可以看到网络上传递的
35数据。
为了加深你的理解,我们来看看下面的图,一个典型的在以太网中客户与服
务器使用 TCPIP 协议的通信
以太网
唆唆了这么多,有人烦了吧?相信我,这是基础的基础,可以说是说得是很
简单拉,如果需要,拿出个几十万字来说上面的内容,我想也不嫌多,好了,让
我们进入下一节,sniff 的原理。
三 SNIFF 的原理
要知道在以太网中,所有的通讯都是广播的,也就是说通常在同一个网段
的所有网络接口都可以访问在物理媒体上传输的所有数据,而每一个网络接口都
有一个唯一的硬件地址,这个硬件地址也就是网卡的 MAC 地址,大多数系统使用
48 比特的地址,这个地址用来表示网络中的每一个设备,一般来说每一块网卡
上的 MAC 地址都是不同的,每个网卡厂家得到一段地址,然后用这段地址分配给
其生产的每个网卡一个地址。在硬件地址和 IP 地址间使用 ARP 和 RARP 协议进行
相互转换。
在正常的情况下,一个网络接口应该只响应这样的两种数据帧:
1.与自己硬件地址相匹配的数据帧。
2.发向所有机器的广播数据帧。
在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来
的数据,网卡内的单片程序接收数据帧的目的 MAC 地址,根据计算机上的网卡驱
动程序设置的接收模式判断该不该接收,认为该接收就接收后产生中断信号通知
CPU,认为不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根
本就不知道。CPU 得到中断信号产生中断,操作系统就根据网卡的驱动程序设置
的网卡中断程序地址调用驱动程序接收数据,驱动程序接收数据后放入信号堆栈
36让操作系统处理。而对于网卡来说一般有四种接收模式:
广播方式:该模式下的网卡能够接收网络中的广播信息。
组播方式:设置在该模式下的网卡能够接收组播数据。
直接方式:在这种模式下,只有目的网卡才能接收该数据。
混杂模式:在这种模式下的网卡能够接收一切通过它的数据,而不管该数据
是否是传给它的。
好了,现在我们总结一下,首先,我们知道了在以太网中是基于广播方式传
送数据的,也就是说,所有的物理信号都要经过我的机器,再次,网卡可以置于
一种模式叫混杂模式(promiscuous),在这种模式下工作的网卡能够接收到一切
通过它的数据,而不管实际上数据的目的地址是不是他。这实际上就是我们
SNIFF 工作的基本原理:让网卡接收一切他所能接收的数据。
(图一)
我们来看一个简单的例子,如图一所示,机器 A、B、C 与集线器 HUB 相连
接,集线器 HUB 通过路由器 Router 访问外部网络。这是一个很简单也很常见的
情况,比如说在公司大楼里,我所在的网络部办公室里的几台机器通过集线器连
接,而网络部、开发部、市场部也是同样如此,几个部门的集线器通过路由器连
接。还是回到我们的图一上来,值得注意的一点是机器 A、B、C 使用一个普通的
HUB 连接的,不是用 SWITCH,也不是用 ROUTER,使用 SWITCH 和 ROUTER 的情况
要比这复杂得多。
我们假设一下机器 A 上的管理员为了维护机器 C,使用了一个 FTP 命令向
37机器 C 进行远程登陆,那么在这个用 HUB 连接的网络里数据走向过程是这样的。
首先机器 A 上的管理员输入的登陆机器 C 的 FTP 口令经过应用层 FTP 协议、传输
层 TCP 协议、网络层 IP 协议、数据链路层上的以太网驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了 HUB 上,现在由 HUB
向每一个接点广播由机器 A 发出的数据帧,机器 B 接收到由 HUB 广播发出的数据
帧,并检查在数据帧中的地址是否和自己的地址相匹配,发现不是发向自己的后
把这数据帧丢弃,不予理睬。而机器 C 也接收到了数据帧,并在比较之后发现是
发现自己的,接下来他就对这数据帧进行分析处理。
在上面这个简单的例子中,机器 B 上的管理员如果很好奇,他很想知道究
竟登陆机器 C 上 FTP 口令是什么?那么他要做的很简单,仅仅需要把自己机器上
的网卡置于混杂模式,并对接收到的数据帧进行分析,从而找到包含在数据帧中
的口令信息。
四 做一个自己的 sniff
在上一节里,我们已经知道了 SNIFF 的基本原理是怎么一回事,这一节我
们来亲自动手做一个自己的 sniff,毕竟,用程序代码来说话比什么都要来得真
实,也容易加深理解。
回头想一想我们上面说的原理,我们要做的事情有几件:
1. 把网卡置于混杂模式。
2. 捕获数据包。
3.分析数据包。
注:下面的源代码取至 Chad Renfro 的<< Basic
Packet-SnifferConstruction from the Ground Up>>一文中 (在这里不是让大
家学习编程,而是让大家明白这个原理)。
Tcp_sniff_2.c
1.include
2.include
3.include
4.include
5.include
38 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, intsock);
12.int main {
13.int sock, bytes_recieved, fromlen;
14.char buffer[65535];
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, sizeofbuffer, 0, (struct
sockaddr )from, 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_protocol);
31. tcp = (struct tcp )(buffer +(4ip->ip_length));
39 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 created 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 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 ) {
Could not set the flags on the interface
56. perror(Could not set the PROMISC flag:);
57. exit(0);
40 58. }
59. printf(Setting interface ::: %s ::: to promisc,interface);
60. return(0);
61. }
EOF
上面这段程序中有很详细的注解,不过我想还是有必要说一说,首先第 10
行--intOpen_Raw_Socket(void); 是我们的自定义函数,具体内容如下:
37.int Open_Raw_Socket {
38. int 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)) < 0) { 这
里我们调用了 socket 函数,使创建了了一个原始套接口,使之收到 TCPIP 信息
包。
接下来第 11 行-int Set_Promisc(char interface, intsock),这也是我
们的自定义函数,目的是把网卡置于混杂模式,具体内容如下:
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 retrieve flags for the interface
49. perror(Could not retrive flags for the interface);
50. exit(0);
51. }
41 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 ) {
Could 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. }
首先 struct ifreq ifr; 定一了一个 ifrreg 的结构 ifr,接下来
strncpy(ifr.ifr_name,interface,strnlen(interface)+1);,就是把我们网络
设备的名字填充到 ifr 结构中,在这里define INTERFACE eth0 ,让我们再
往下看,ioctl(sock, SIOCGIFFLAGS,ifr),SIOCGIFFLAGS 请求表示需要获取接
口标志,现在到了第 54 行,在我们成功的获取接口标志后把他设置成混杂模式,ifr.ifr_flags|= IFF_PROMISC;ioctl (sock, SIOCSIFFLAGS,ifr)。OK,现在
我们所说的第一步已经完成--------把网卡置于混杂模式。
现在进入第二步,捕获数据包。从第 20 行开始,我们进入了一个死循环,while(1),在第 24 行,recvfrom(sock,buffer, sizeof buffer, 0, (struct
sockaddr )from,fromlen),这个函数要做的就是接收数据,冰把接收到的数
据放入 buffer 中。就是这么简单,已经完成了我们要捕获数据包的任务。
到了第三步,分析数据包。27 行,ip = (struct ip)buffer,使我们在头
文件中的 IP 结构对应于所接收到的数据,接下来判断在网络层中是否使用的是
TCP 协议,if(ip->ip_protocol== 6) ,如果答案是,tcp 信息包从整个 IPTCP
包 buffer +(4ip->ip_length) 地址处开始,所以 31 行 tcp = (struct
tcp)(buffer +(4ip->ip_length)),然后对应结构把你所需要的信息输出。
headers.h
structure of an ip header
42 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 ip_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_ackno;
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;
43 unsigned short tcp_urgent;
};
EOF
从上面的分析我们可以清楚的认识到,认识一个 SNIFF 需要对 TCPIP 协议
有着详细的了解,否则你根本无法找到你需要的信息。有了上面的基础,你可以
自己来做一个你需要的 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等平台上,由LawrenceBerkeley
Laboratory 实验室开发的一个免费的网络监听软件。最近 Sniffit0.3.7 也推出
了 NT 版本,并也支持 WINDOWS2000.
使用方法:
-v 显示版本信息
-a 以 ASCII 形式将监听的结果输出。
-A 在进行记录时,所有不可打印的字符都用代替
-b 等同于同时使用参数-t -s。
44 -d 将监听所得内容以十六进制方式显示在当前终端
-p 记录连接到的包,0 为所有端口。缺省为 0。
-P protocol 选择要检查的协议,缺省为 TCP。可能的选择有 IP、TCP、ICMP、UDP 和他们的组合。
-s 指定 sniffer 检查从 发送的数据包。 -t 指定 sniffer 检查发送到的
数据包。
-i 进入交互模式
-l 设定数据包大小,default 是 300 字节
注:参数可以用@来表示一个 IP 范围,比如 -t 192.168.@ -t 和-s 只适用
于 TCPUDP 数据包,对于 ICMP 和 IP 也进行解释。但如果只选择了-p 参数,则
只用于 TCP 和 UDP 包。
举例说明:
sniffit -a -p 21 -t xxx.xxx.xxx.xxx
监听流向机器 xxx.xxx.xxx.xxx 的 21 端口(FTP)的信息,并以 ASCII 显示
sniffit -d -p 23 -b xxx.xxx.xxx.xxx
监听所有流出或流入机器 xxx.xxx.xxx.xxx 的 23 端口(telnet)的信息,并
以 16 进制显示你可以在这里找到
sniffithttp:reptile.rug.ac.be~codersniffitsniffit.html
2. snoop
snoop 默认情况安装在 Solaris 下,是一个用于显示网络交通的程序,不过
SNIFF 是把双刃剑,既然管理员能用他来监视自己的网络,当然一个心怀恶意的
入侵者也可以用他来 SNIFF 自己感兴趣的内容。值得一提的是,SNOOP 被发现存
在一个缓冲区溢出漏洞,当以导致入侵者以运行 snoop(通常为 root)的身份远程
进入系统。这是题外话,暂且就此打住。
使用方法:
[ -a ] Listen to packets on audio
[ -d device ] settable to le?, ie?, bf?, tr?
[ -s snaplen ] Truncate packets
[ -c count ] Quit after count packets
45 [ -P ] Turn OFF promiscuous mode
[ -D ] Report dropped packets
[ -S ] Report packet size
[ -i file ] Read previously captured packets
[ -o file ] Capture packets in file
[ -n file ] Load addr-to-name table from file
[ -N ] Create addr-to-name table
[ -t r|a|d ] Time: Relative, Absolute or Delta
[ -v ] Verbose packet display
[ -V ] Show all summary lines
[ -p first[,last] ] Select packet(s) to display
[ -x offset[,length] ] Hex dump from offset for length
[ -C ] Print packet filter code
例如:
snoop -o saved A B
监听机器A与B 的谈话,并把内容存储于文件 saved 中
3. tcpdump
tcpdmp 也算是一个很有名气的网络监听软件,FREEBSD 还把他附带在了系
统上,是一个被很多 UNIX 高手认为是一个专业的网络管理工具。
使用方法:
tcpdump 采用命令行方式,它的命令格式为:
tcpdump [ -adeflnNOpqStvx ][ -c 数量 ][ -F 文件名 ][ -i 网络接
口 ][ -r 文件名][ -s snaplen ][ -T 类型 ][ -w 文件名 ][表达式]
1. tcpdump 的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以 c 语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
46 -f 将外部的 Internet 地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在 ip 包中可以包括 ttl 和服务类
型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump 就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w 选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有 rpc
和 snmp
2. tcpdump 的表达式介绍
表达式是一个正则表达式,tcpdump 利用它作为过滤报文的条件,如果一
个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则
网络上所有的信息包将会被截获。
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要
包括 host,net,port,例如 host 210.27.48.2,指明 210.27.48.2 是一台主机,net 202.0.0.0 指明 202.0.0.0 是一个网络地址,port 23 指明端口号是 23。如
果没有指定类型,缺省的类型是 host.
第二种是确定传输方向的关键字,主要包括 src , dst ,dst or src, dstand
src ,这些关键字指明了 传输的方向。举例说明,src 210.27.48.2,指明 ip 包
中源地址是 210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是
202.0.0.0 。如果没有指明方向关键字,则缺省是 src ordst 关键字。
第三种是协议的关键字,主要包括 fddi,ip,arp,rarp,tcp,udp 等类型。
Fddi 指明是在 FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它
是ether的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi
47协议包当作 ether 的包进行处理和分析。其他的几个关键字就是指明了监听的包
的协议内容。如果没有指定任何协议,则 tcpdump 将会监听所有协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:
gateway,broadcast,less,greater,还有三种 逻辑运算,取非运算是 'not ' '!
',与运算是'and','';或运算 是'or' ,'||'。
举例使用:
tcpdump host AAA.BBB.CCC.DDD
将监听 IP 地址为 AAA.BBB.CCC.DDD 的机器的通话
tcpdump tcp port 23 host AAA.BBB.CCC.DDD
将监听 IP 地址为 AAA.BBB.CCC.DDD 的机器的 23 端口的通话
4. dsniff
之所以要谈谈 dsniff,是因为他不仅仅是一个 sniff,在他的整个套件包
中,包含了很多其它有用的工具,如 arpspoof,dnsspoof,macof,tcpkill 等
等,SNIFF 的手段更加的多样和复杂化。dsniff 是由 DugSong 开发的你可以在他
的主页上找到这个工具。 目前 dsniff 支持 OpenBSD (i386),Redhat Linux
(i386), 和 Solaris (sparc). 并且在 FreeBSD, DebianLinux, Slackware Linux,AIX,和 HP-UX 上也能运转得很好。但是 dsniff 需要几个其他的第三方软件进行
支持,他们分别是,BerkeleyDB ,OpenSSL, libpcap, libnet,libnids。如
果条件允许的话,你最好能够亲自读一读 dsniff 的源代码,你可以在
http:naughty.monkey.org~dugsong 找到 dsniff。
六 深入 sniff
单纯的 sniff 的功能始终是局限的,所以在大多数的情况下,sniff 往往
和其他手段结合起来使用,sniff 和 spoof 已及其他技术手段结合在一起对网络
构成的危害是巨大的。单纯的 sniff 好比缺了一只腿,无法发挥大的作用,例如
在 sniff 原理一节中我们讨论的例子里,我一再的强调我们使用的是一个普通的
HUB 进行连接是有原因的,如果我们把在图一中的 HUB 用一个 switch 代替,那
情况就要复杂一些了,如图二所示:
48
图(二)
在图二中,我们的机器 A、B、C 与 Switch 相连接,而 Switch 通过路由器
Router 访问外部网络。我们先来了解 Switch 的工作原理:
在我们图一中的 HUB 只是简单地把所接收到的信号通过所有端口(除了信
号来的那个口)重复发送出去不同,而图二中的 Switch 却可以检查每一个收到
的数据包,并对数据包进行相应的处理。在 Switch 内保存着每一个网段上所有
节点的物理地址,只允许必要的网络流量通过 Switch。举例来说,当 Switch 接
收到一个数据包之后,根据自身保存的网络地址表检查数据包内包含的发送和接
收方地址。如果接收方位于发送方网段,该数据包就会被 Switch 丢弃,不能通
过交换机传送到其它的网段;如果接收方和发送方位于两个不同的网段,该数据
包就会被 Switch 转发到目标网段。这样,通过交换机的过滤和转发,可以有效
避免网络广播风暴,减少误包和错包的出现。顺便说一句,现在 Switch 和 HUB
的价格相去无几,所以 hub 正逐渐被网络交换机取代。
现在回到我们的例子中来,在图二中仍然和图一一样,我们假设机器 A 上
的管理员为了维护机器 C,使用了一个 FTP 命令向机器 C 进行远程登陆,那么在
这里,数据是这样走的:首先机器 A 上的管理员输入的登陆机器 C 的 FTP 口令经
过应用层 FTP 协议、传输层 TCP 协议、网络层 IP 协议、数据链路层上的以太网
驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送
到了 Switch 上,而 Switch 检查数据帧中的目的地址,并在他自身保存的网络地
址表中知道了他应该把这数据帧发到机器 C 那里,于是,接下来机器 C 接收到了
从 A 发来的信息,发现他是发给自己的信息,于是进行分析处理。
49OK,现在我们机器 B 上的管理员的好奇心只能深深的埋藏在心里了,因为
数据包根本就没有经过他,就算他把自己的网卡设置成混杂模式也是有力无处
使。
在了解在一个 Switch 环境下原理后,我们结合一些手段去设法 sniff,是
的,我们可以做到这一点,有许多的手段可以让管理员 B 满足他的好奇心,在下
面我会提出几个办法,当然只是其中的一些办法而已。
1 ARP Spoof
在基于 IP 通信的内部网中,我们可以使用 ARP Spoof 的手段,了解什么
是 ARPSpoof 的前提你先要明白一下什么是 ARP 和 RARP 协议,什么是 MAC 地址,什么又是 IP 地址。ARP 协议是地址转换协议,RARP 被称为反向地址转换协议,他们负责把 IP 地址和 MAC 地址进行相互转换对应。
ARP Spoof 攻击的根本原理是因为计算机中维护着一个 ARP 高速缓存,并
且这个ARP高速缓存是随着计算机不断的发出ARP请求和收到ARP响应而不断的
更新的,ARP 高速缓存的目的是把机器的 IP 地址和 MAC 地址相互映射。你可以
使用 arp 命令来查看你自己的 ARP 高速缓存。现在设想一下,一个 Switch 工作
在数据链路层,他根据 MAC 地址来转发他所接收的数据包,而计算器维护的 ARP
高速缓存却是动态的......你想到什么了吗?
为了加深理解,现在给我们的机器编上号(如上图),机器 A:IP 地址为
10.0.0.1,MAC 地址为 20-53-52-43-00-01 ,机器 B:IP 地址为 10.0.0.2 ,MAC
50地址为 20-53-52-43-00-02,机器 C:IP 地址为 10.0.0.3 ,MAC 地址为
20-53-52-43-00-03 。现在机器 B 上的管理员是个聪明的家伙,他向机器 A 发出
一个 ARP Reply(协议没有规定一定要等 ARP Request 出现才 能发送 ARPReply,也没有规定一定要发送过 ARP Request 才能接收 ARPReply),其中的目的 IP 地
址为10.0.0.1,目的MAC地址为20-53-52-43-00-01 ,而源IP地址为10.0.0.3,源 MAC 地址为 20-53-52-43-00-02 ,好了,现在机器 A 更新了他的 ARP 高速缓
存,并相信了 IP 地址为 10.0.0.3 的机器的 MAC 地址是 20-53-52-43-00-02 。
当机器 A 上的管理员发出一条 FTP 命令时---ftp 10.0.0.3,数据包被送到了
Switch,Switch 查看数据包中的目的地址,发现 MAC 为 20-53-52-43-00-02,于
是,他把数据包发到了机器 B 上。再设想一下,如果不想影响A和C之间的通信
该怎么办?你可以同时欺骗他们双方,来一个 man-in-middle 。
当然,在实际的操作中你还需要考虑到一些其他的事,比如某些操作系统
在会主动的发送 ARP 请求包来更新相应的 ARP 入口等。
2. MAC Flooding
在上面我们曾经提到过,Switch 之所以能够由数据包中目的 MAC 地址判断
出他应该把数据包发送到那一个端口上是根据他本身维护的一张地址表。这张地
址表可能是动态的也可能是静态的, 这要看Switch的厂商和Switch的型号来定,对于某些 Switch 来说,他维护的是一张动态的地址表,并且地址表的大小是有
上限的,比如 3comSuperstack Switch 3300 (3c16981 Hardware v.1
Softwarev.2.10) 就是这样一种 Switch,我们可以通过发送大量错误的地址
信息而使 SWITCH 维护的地址表“溢出”,从而使他变成广播模式来达到我们要
sniff 机器 A 与机器 C 之间的通信的目的。
3. Fake the MAC address
伪造 MAC 地址也是一个常用的办法,不过这要基于你网络内的 Switch 是
动态更新其地址表,这实际上和我们上面说到的 ARP Spoof 有些类似,只不过现
在你是想要 Switch 相信你,而不是要机器 A 相信你。因为 Switch 是动态更新其
地址表的,你要做的事情就是告诉 Switch:HI,我是机器 C。换成技术上的问题
你只不过需要向 Switch 发送伪造过的数据包,其中源 MAC 地址对应的是机器 C
的 MAC 地址,现在 Switch 就把机器 C 和你的端口对应起来了。不过其中存在一
51个问题,现在机器 C 也会说了:HI,Switch 老大,我才是机器 C 呢! ,现在你该
怎么办?切,还用问!让他说不了话就可以了,DOS 还是其他什么,随便你
了......
4. ICMP Router Advertisements
这主要是由 ICMP 路由器发现协议(IRDP)的缺陷引起的,在 Windows95、98、2000 及 SunOS、Solaris2.6 等系统中,都使用了 IRDP 协议,SunOS 系统只在某
些特定的情况下使用该协议,而 Windows95,Windows95b, Windows98,Windows98se, 和 Windows2000 都是默认的使用 IRDP 协议。IRDP 协议的主要内
容就是告诉人们谁是路由器,设想一下,一个 HACK 利用 IRDP 宣称自己是路由器
的情况会有多么的糟糕!所有相信 HACK 的请求的机器把他们所有的数据都发送
给 HACK 所控制的机器.........
5. ICMP Redirect
所谓 ICMP 重定向,就是指告诉机器向另一个不同的路由发送他的数据包,ICMP 重定向通常使用在这样的场合下,假设A与B 两台机器分别位于同一个物
理网段内的两个逻辑子网内,而A和B都不知道这一点,只有路由器知道,当 A
发送给 B 的数据到达路由器的时候,路由器会向 A 送一个 ICMP 重定向包裹,告
诉 A:HI,别再送数据给我转交了,你就直接送到 B 那里就可以了。设想一下,一个 hack 完全可以利用这一点,使得 A 发送给 B 的数据经过他。
上面提到的这些方法只不是其中的一些,为了配合 sniff 能够工作得更有
效率,还有其他许多的办法,其实 sniff 的目的说穿了只有一个,就是抓包,从
抓包这个概念上引伸下去,所有为了能够抓到网络上的信息包而采用的技术都可
以归入 sniff,单纯的 sniff 是没有什么效率的。你还能想到什么吗?进攻路由
器,在路由器上放置 sniff......,在系统内核中植入 sniff......等等。
七 如何防止 SNIFF
防止 sniff 最有效的手段就是进行合理的网络分段,并在网络中使用交换
机和网桥,在理想的情况下使每一台机器都拥有自己的网络段,当然这会使你的
网络建设费用增加很多,所以你可以尽量使相互信任的机器属于同一个网段,使
他们互相之间不必担心 sniff 的存在。并在网段于网段间进行硬件屏障。你也可
以使用加密技术对你在网络中传送的敏感数据如户 ID 或口令,你的银行帐号,52商业机密等进行加密,你可以选用SSH等加密手段。为了防止 ARP 欺骗,你可
以使用永久的ARP缓存条目,反正上面的攻击手段和原理你也看了,你就反过
来想想该怎么办好了。不过有盾必有矛,平时的安全意识才是最重要的。
(注:以下关于 AntiSniff 的介绍取至 backend 翻译整理的 L0pht
AntiSniff 技术文档一文)
当你做做层层保护后,你还是怀疑自己的网络上存在 sniff 该怎么办?
L0pht 小组为了探测 sniff 专门发布了一个软件 AntiSniff,当然这个软件不
是免费的: ),AntiSniff 工具用于检测局域网中是否有机器处于混杂模式,AntiSniff Version1.x 被设计为运行在以太网的 Windows 系统中,提供了简单
易用的图形用户界面,AntiSniffVersion1.x 主要工作在非交换环境下的本地
网段中,如果运行在交换环境下其功能将大打折扣。AntiSniffVer 2.0 将不但
能在本地网段中,而且能够穿过路由器和交换机进行工作。
◆ 操作系统类特殊测试
Linux 内核测试
旧版本的 Linux 内核存在一个奇怪的特性,可被用于确定机器是否处于混
杂模式。在正常情形下,网卡会过滤和丢弃那些目标地址不是本机 MAC 地址或以
太网广播地址的数据包。如果数据包的目标地址为本机以太网地址或广播地址,将传送给内核进行处理,因为其认为该以太网数据帧包含了本机的正确 IP 地址
或该网络广播地址。如果网卡处于混杂模式,则每个数据包都会传递给操作系统
进行分析或处理。许多版本的 Linux 内核只检查数据包中的 IP 地址以确定是否
存放到 IP 堆栈中进行处理。为了利用这一点,AntiSniff 构造一个无效以太网
地址而IP地址有效的数据包。对于使用了这些内核版本和处于混杂模式的Linux
系统,由于只检查到 IP 地址有效而将其接收并存放到相应堆栈中。通过在这个
伪造的以太网数据帧中构造一个 ICMPECHO 请求,这些系统会返回响应包(如果处
于混杂模式)或忽略(如果不处于混杂模式),从而暴露其工作模式。当伪造的以
太网数据帧中的 IP 地址设置为网络广播地址时这个测试非常有效。AntiSniff
的使用者可以修改伪造的以太网址,缺省值为 66:66:66:66:66:66。
NetBSD
许多 NetBSD 内核具有与上述 Linux 内核相同的特性,不过伪造以太网数据
53帧中的 IP 地址必须设为广播地址。
Windows 9598NT
根据对网络驱动程序头文件的了解,可以知道当处于混杂模式时,Microsoft 的操作系统会确切地检查每个包的以太网地址。如果与网卡的以太网
地址匹配,将作为目标 IP 地址为本机的数据包存放到相应堆栈中处理。可以被
利用的一点是系统对以太网广播包的分析。在正常情形下,例如机器工作在非混
杂模式下,网卡只向系统内核传输那些目标以太网址与其匹配或为以太网广播地
址(ff:ff:ff:ff:ff:ff)的数据包。如果机器处于混杂模式下,网络驱动程序仍
然会检查每个数据包的以太网地址,但检查是否为广播包时却只检查头 8 位地址
是否为 0xff。因此,为了使处于混杂模式的系统返回响应信息,AntiSniff 构造
以太网地址为 ff:00:00:00:00:00 且含有正确目标 IP 地址的数据包,当
Microsoft 的操作系统接收到这个数据包时,将根据网络驱动程序检查到的细微
差别而返回响应包(如果处于混杂模式)或丢弃这个数据包(如果处于非混杂模
式)。
需要注意的是,这个检查与使用的网络驱动程序有关。Microsoft 缺省的网
络驱动程序具有以上特性,大多数的厂商为了保持兼容性也继承了这些特性。不
过有些网卡会在其硬件层中检查以太网地址的头 8 位,所以可能会无论系统真正
的状态是什么都总是返回正值。关于这类网卡和驱动程序请访问 AntiSniff
Ver1.x 的 web 网站。
◆ DNS 测试
进行DNS测试的原因是许多攻击者使用的网络数据收集工具都对IP地址进
行反向 DNS 解析,因为他们希望根据域名寻找更有价值的主机。例如
joepc1.foo.bar 对攻击者的吸引力往往不如 payroll.foo.bar 这种商业域名。
此时这些工具就由被动型网络工具变为主动型网络工具了。而不监听网络通讯的
机器不会试图反向解析数据包中的 IP 地址。为了利用这一点,AntiSniff Ver1.x
使自身处于混杂模式下,向网络发送虚假目标 IP 地址的数据包,然后监听是否
有机器发送该虚假目标 IP 地址的反向 DNS 查询。伪造数据包的以太网地址、检
查目标、虚假目标 IP 地址可由用户定制。
◆ 网络和主机响应时间测试
54 这种测试已被证明是最有效的。它能够发现网络中处于混杂模式的机器,而
不管其操作系统是什么。警告,这个测试会在很短的时间内产生巨大的网络通讯
流量。进行这种测试的理由是不处于混杂模式的网卡提供了一定的硬件底层过滤
机制。也就是说,目标地址非本地(广播地址除外)的数据包将被网卡的固件丢弃。
在这种情况下,骤然增加、但目标地址不是本地的网络通讯流量对操作系统的影
响只会很小。而处于混杂模式下的机器则缺乏此类底层的过滤,骤然增加、但目
标地址不是本地的网络通讯流量会对该机器造成较明显的影响(不同的操作系统
内核用户方式会有不同)。这些变化可以通过网络通讯流量工具监视到。
根据以上要点,AntiSniff Ver 1.x 首先利用 ICMPECHO 请求及响应计算出
需要检测机器的响应时间基准和平均值。在得到这个数据后,立刻向本地网络发
送大量的伪造数据包。与此同时再次发送测试数据包以确定平均响应时间的变化
值。非混杂模式的机器的响应时间变化量会很小,而混杂模式的机器的响应时间
变化量则通常会有 1-4 个数量级。为了对付攻击者和入侵者们最常用的多种工
具,AntiSniff 进行了三种网络饱和度测试:SIXTYSIX、TCPSYN 和 THREEWAY。
SIXTYSIX 测试构造的数据包数据全为 0x66。这些数据包不会被非混杂模
式的机器接收,同时方便使用常见的网络监听分析工具(如 tcpdump 和 snoop
等)记录和捕获。
TCPSYN 测试构造的数据包包含有效的 TCP 头和 IP 头,同时 TCP 标志域的
SYN 位被设置。
THREEWAY 测试采取的原理基本上与 TCPSYN 一样,但更复杂些。在这种测
试中两个实际不存在的机器间多次建立完整的 TCP 三方握手通讯。它能够更好地
欺骗那些骇客工具。
AntiSniff Ver 1.x 中能够通过以上三种数据包测试发现正处于混杂模式机
器的测试方法最好周期性地进行和与以前的数据比较。响应时间测试第一次运行
的数据还能够用于分析一个大型网络在 flooding 和非 flooding 状态时的性能,并帮助工程师调整网络性能。一旦确信本地网络已运行在正常(没有未经允许而
处于混杂模式的机器)状态,就应该设置 AntiSniff 工具周期性运行。只要发现
某台机器性能(响应时间)发生数量级的变化,一般就能确定其正处于混杂模式。
这种方法不需比较两台独立系统间的性能数据,而只需比较同一台机器不同时候
55的数据就能确定该机器是否处于混杂模式。
八 结尾
本文旨在向你描述 sniff 的基本原理,为的是要使你不仅仅能够了解什么
是 sniff 而已,而是要明白 sniff 运转的根本原理,文章参考了大量的资料,牵
涉到直接引用的已经注明出处和作者,非常的感谢他们。在此还要感谢
W.Richhard.Stevens,虽然其人已逝,但留下的 TCPIP 三卷本真是造福了大家,文章的很多地方也是拜他老人家指点迷经才得以感悟。最后还要感谢雀巢咖啡,让我得以熬夜把这篇文章写完,呵呵,谢谢大家。
说了这么多不知大家明白了没有,嗅探的基本原理,其中还涉及到了反嗅
探的一些知识,虽说不说但足以让大家够用,好了不多说了,休息一下,放松一
下眼疲劳,顺便再把刚才的知识回忆一下,呆会儿我们继续下一章节的内容。
注意:嗅探的基本原理是你明白 sniffer 工作的重要方法,因此可能会重
复出现,在些向大家申明,如果大家明白了,大可以跳过这些章节以便在后面可
以更快的进行学习!
56SNIFFER(嗅探器)-简介
SNIFFER(嗅探器)-简介
Sniffer(嗅探器)是一种常用的收集有用数据方法,这些数据可以是用户
的帐号和密码,可以是一些商用机密数据等等。Snifffer 可以作为能够捕获网
络报文的设备,ISS 为 Sniffer 这样定义:Sniffer 是利用计算机的网络接口截获
目的地为其他计算机的数据报文的一种工具。
Sniffer 的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在
的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又
不知道问题出在什么地方,此时就可以用嗅探器来作出精确的问题判断。 在合理
的网络中,sniffer 的存在对系统管理员是致关重要的,系统管理员通过 sniffer
可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间的异
常通讯有些甚至牵涉到各种的协议,借助于 sniffer 系统管理员可以方便的确定
出多少的通讯量属于哪个网络协议、占主要通讯协议的主机是哪一台、大多数通
讯目的地是哪台主机、报文发送占用多少时间、或着相互主机的报文传送间隔时
间等等,这些信息为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。
嗅探器与一般的键盘捕获程序不同。键盘捕获程序捕获在终端上输入的键
值,而嗅探器则捕获真实的网络报文。
为了对 sniffer 的工作原理有一个深入的了解,我们先简单介绍一下 HUB
与网卡的原理。
预备知识
HUB 工作原理
由于以太网等很多网络(常见共享 HUB 连接的内部网)是基于总线方式,物
理上是广播的,就是当一个机器发给另一个机器的数据,共享 HUB 先收到然后把
它接收到的数据再发给其他的(来的那个口不发了)每一个口,所以在共享 HUB
下面同一网段的所有机器的网卡都能接收到数据。
交换式 HUB 的内部单片程序能记住每个口的 MAC 地址,以后就该哪个机器接
收就发往哪个口,而不是像共享 HUB 那样发给所有的口,所以交换 HUB 下只有该
接收数据的机器的网卡能接收到数据,当然广播包还是发往所有口。显然共享
HUB 的工作模式使得两个机器传输数据的时候其他机器别的口也占用了,所以共
57享 HUB 决定了同一网段同一时间只能有两个机器进行数据通信,而交换 HUB 两个
机器传输数据的时候别的口没有占用,所以别的口之间也可以同时传输。这就是
共享 HUB 与交换 HUB 不同的两个地方,共享 HUB 是同一时间只能一个机器发数据
并且所有机器都可以接收,只要不是广播数据交换 HUB 同一时间可以有对机器进
行数据传输并且数据是私有的。
网卡工作原理
再讲讲网卡的工作原理。网卡收到传输来的数据,网卡内的单片程序先接收
数据头的目的 MAC 地址,根据计算机上的网卡驱动程序设置的接收模式判断该不
该接收,认为该接收就在接收后产生中断信号通知 CPU,认为不该接收就丢弃不
管,所以不该接收的数据网卡就截断了,计算机根本就不知道。CPU 得到中断信
号产生中断,操作系统就根据网卡驱动程序中设置的网卡中断程序地址调用驱动
程序接收数据,驱动程序接收数据后放入信号堆栈让操作系统处理。
局域网如何工作
数据在网络上是以很小的称为帧(Frame)的单位传输的帧由好几部分组成,不同的部分执行不同的功能。(例如,以太网的前 12 个字节存放的是源和目的的
地址,这些位告诉网络:数据的来源和去处。以太网帧的其他部分存放实际的用
户数据、TCPIP 的报文头或 IPX 报文头等等)。
帧通过特定的网络驱动程序进行成型,然后通过网卡发送到网线上。通过网
线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太
网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。就是在这个
传输和接收的过程中,嗅探器会造成安全方面的问题。
通常在局域网(LAN)中同一个网段的所有网络接口都有访问在物理媒体上
传输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址
不同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广
播地址。(代表所有的接口地址),在正常情况下,一个合法的网络接口应该只响
应这样的两种数据帧:
1、帧的目标区域具有和本地网络接口相匹配的硬件地址。
2、帧的目标区域具有“广播地址”。
在接受到上面两种情况的数据包时,网卡通过 cpu 产生一个硬件中断,58该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。
当采用共享 HUB,用户发送一个报文时,这些报文就会发送到 LAN 上所有可
用的机器。在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对
不属于自己的报文则不予响应(换句话说,工作站 A 不会捕获属于工作站 B 的数
据,而是简单的忽略这些数据)。
如果局域网中某台机器的网络接口处于杂收(promiscuous)模式(即网卡
可以接收其收到的所有数据包,下面会详细地讲),那么它就可以捕获网络上所
有的报文和帧,如果一台机器被配置成这样的方式,它(包括其软件)就是一个
嗅探器。
Sniffer
Sniffer原理
有了这HUB、网卡的工作原理就可以开始讲讲SNIFFER。首先,要知道SNIFFER
要捕获的东西必须是要物理信号能收到的报文信息。显然只要通知网卡接收其收
到的所有包(一般叫作杂收 promiscuous 模式:指网络上的所有设备都对总线上
传送的数据进行侦听,并不仅仅是它们自己的数据。),在共享 HUB 下就能接收到
这个网段的所有包,但是交换 HUB 下就只能是自己的包加上广播包。
要想在交换 HUB 下接收别人的包,那就要让其发往你的机器所在口。交换
HUB 记住一个口的 MAC 是通过接收来自这个口的数据后并记住其源 MAC,就像一
个机器的 IP 与 MAC 对应的 ARP 列表,交换 HUB 维护一个物理口(就是 HUB 上的
网线插口,这之后提到的所有 HUB 口都是指网线插口)与 MAC 的表,所以可以欺
骗交换 HUB 的。可以发一个包设置源 MAC 是你想接收的机器的 MAC,那么交换 HUB
就把你机器的网线插的物理口与那个 MAC 对应起来了,以后发给那个 MAC 的包就
发往你的网线插口了,也就是你的网卡可以 SNIFFER 到了。注意这物理口与 MAC
的表与机器的 ARP 表一样是动态刷新的,那机器发包后交换 HUB 就又记住他的口
了,所以实际上是两个在争,这只能应用在只要收听少量包就可以的场合。
内部网基于 IP 的通信可以用 ARP 欺骗别人机器让其发送给你的机器,如果
要想不影响原来两方的通信,可以欺骗两方,让其都发给你的机器再由你的机器
转发,相当于做中间人,这用 ARP 加上编程很容易实现。并且现在很多设备支持
远程管理,有很多交换 HUB 可以设置一个口监听别的口,不过这就要管理权限了。
59利用这一点,可以将一台计算机的网络连接设置为接受所有以太网总线上的
数据,从而实现 sniffer。Sniffer 就是一种能将本地网卡状态设成‘杂收’状
态的软件,当网卡处于这种“杂收”方式时,该网卡具备“广播地址”,它对遇
到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的
每一个报文包。(绝大多数的网卡具备置成杂收方式的能力)
可见,sniffer 工作在网络环境中的底层,它会拦截所有的正在网络上传送
的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所
处的网络状态和整体布局。值得注意的是:sniffer 是极其安静的,它是一种消
极的安全攻击。
嗅探器在功能和设计方面有很多不同。有些只能分析一种协议,而另一些可
能能够分析几百种协议。一般情况下,大多数的嗅探器至少能够分析下面的协议:
标准以太网、TCPIP、IPX、DECNet。
嗅探器造成的危害
Sniffing 是作用在网络基础结构的底层。通常情况下, 用户并不直接和该
层打交道,有些甚至不知道有这一层存在。所以,应该说 snffer 的危害是相当
之大的,通常,使用 sniffer 是在网络中进行欺骗的开始。它可能造成的危害:
嗅探器能够捕获口令。这大概是绝大多数非法使用 sniffer 的理由,sniffer
可以记录到明文传送的 userid 和 passwd。
能够捕获专用的或者机密的信息。比如金融帐号,许多用户很放心在网上使
用自己的信用卡或现金帐号,然而 sniffer 可以很轻松截获在网上传送的用户姓
名、口令、信用卡号码、截止日期、帐号和 pin。比如偷窥机密或敏感的信息数
据,通过拦截数据包,入侵者可以很方便记录别人之间敏感的信息传送,或者干
脆拦截整个的 email 会话过程。
可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限。
窥探低级的协议信息。
这是很可怕的事,通过对底层的信息协议记录,比如记录两台主机之间的网
络接口地址、远程网络接口 ip 地址、ip 路由信息和 tcp 连接的字节顺序号码等。
这些信息由非法入侵的人掌握后将对网络安全构成极大的危害,通常有人用
sniffer 收集这些信息只有一个原因:他正要进行一次欺骗(通常的 ip 地址欺
60骗就要求你准确插入 tcp 连接的字节顺序号),如果某人很关心这个问题,那么
sniffer 对他来说只是前奏,今后的问题要大得多。(对于高级的 hacker 而言,我想这是使用 sniffer 的唯一理由吧)
事实上,如果你在网络上存在非授权的嗅探器就意味着你的系统已经暴露在
别人面前了。
一般 Sniffer 只嗅探每个报文的前 200 到 300 个字节。用户名和口令都包含
在这一部分中,这是我们关心的真正部分。工人,也可以嗅探给定接口上的所有
报文,如果有足够的空间进行存储,有足够的那里进行处理的话,将会发现另一
些非常有趣的东西……
简单的放置一个嗅探器并将其放到随便什么地方将不会起到什么作用。将嗅
探器放置于被攻击机器或网络附近,这样将捕获到很多口令,还有一个比较好的
方法就是放在网关上。sniffer 通常运行在路由器,或有路由器功能的主机上。
这样就能对大量的数据进行监控。sniffer 属第二层次的攻击。通常是攻击者已
经进入了目标系统,然后使用 sniffer 这种攻击手段,以便得到更多的信息。
sniffer 除了能得到口令或用户名外,还能得到更多的其他信息,比如一个
其他重要的信息,在网上传送的金融信息等等。sniffer 几乎能得到任何以太网
上的传送的数据包。黑客会使用各种方法,获得系统的控制权并留下再次侵入的
后门,以保证 sniffer 能够执行。在 Solaris 2.x 平台上,sniffer 程序通常被
安装在usrbin 或dev 目录下。黑客还会巧妙的修改时间,使得 sniffer 程序
看上去是和其它系统程序同时安装的。
大多数以太网 sniffer 程序在后台运行,将结果输出到某个记录文件中。
黑客常常会修改 ps 程序,使得系统管理员很难发现运行的 sniffer 程序。
以太网 sniffer 程序将系统的网络接口设定为混合模式。这样,它就可以监
听到所有流经同一以太网网段的数据包,不管它的接受者或发送者是不是运行
sniffer 的主机。 程序将用户名、密码和其它黑客感兴趣的数据存入 log 文件。
黑客会等待一段时间 ----- 比如一周后,再回到这里下载记录文件。
讲了这么多,那么到底我们可以用什么通俗的话来介绍 sniffer 呢?
计算机网络与电话电路不同,计算机网络是共享通讯通道的。共享意味着计
算机能够接收到发送给其它计算机的信息。捕获在网络中传输的数据信息就称为
61sniffing(窃听)。
以太网是现在应用最广泛的计算机连网方式。以太网协议是在同一回路向
所有主机发送数据包信息。数据包头包含有目标主机的正确地址。一般情况下只
有具有该地址的主机会接受这个数据包。如果一台主机能够接收所有数据包,而
不理会数据包头内容,这种方式通常称为混杂 模式。
由于在一个普通的网络环境中,帐号和口令信息以明文方式在以太网中传
输, 一旦入侵者获得其中一台主机的 root 权限,并将其置于混杂模式以窃听网
络数据,从而有可能入侵网络中的所有计算机。
一句话,sniffer 就是一个用来窃听的黑客手段和工具。
再次叙述一遍,通常在同一个网段的所有网络接口都有访问在物理媒体上传
输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不
同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广播
地址。(代表所有的接口地址),在正常情况下,一个合法的网络接口应该只响应
这样的两种数据帧:
1、帧的目标区域具有和本地网络接口相匹配的硬件地址。
2、帧的目标区域具有广播地址。
在接受到上面两种情况的数据包时,nc 通过 cpu 产生一个硬件中断,该中
断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。
而 sniffer 就是一种能将本地 nc 状态设成(promiscuous)状态的软件,当
nc 处于这种混杂方式时,该 nc 具备广播地址,它对所有遭遇到的每一个帧
都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。
(绝大多数的 nc 具备置成 promiscuous 方式的能力)
可见,sniffer 工作在网络环境中的底层,它会拦截所有的正在网络上传送
的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所
处的网络状态和整体布局。值得注意的是:sniffer 是极其安静的,它是一种消
极的安全攻击。
通常 sniffer 所要关心的内容可以分成这样几类:
1、口令
我想这是绝大多数非法使用 sniffer 的理由,sniffer 可以记录到明文传送的
62userid 和 passwd.就算你在网络传送过程中使用了加密的数据,sniffer 记录的
数据一样有可能使入侵者在家里边吃肉串边想办法算出你的算法。
2、金融帐号
许多用户很放心在网上使用自己的信用卡或现金帐号,然而 sniffer 可以很
轻松截获在网上传送的用户姓名、口令、信用卡号码、截止日期、帐号和 pin.
3、偷窥机密或敏感的信息数据
通过拦截数据包,入侵者可以很方便记录别人之间敏感的信息传送,或
者干脆拦截整个的 email 会话过程。
3、窥探低级的协议信息。
这是很可怕的事,我认为,通过对底层的信息协议记录,比如记录两台
主机之间的网络接口地址、远程网络接口 ip 地址、ip 路由信息和 tcp 连接的字
节顺序号码等。这些信息由非法入侵的人掌握后将对网络安全构成极大的危害,通常有人用 sniffer 收集这些信息只有一个原因:他正在进行一次欺诈,(通常
的ip地址欺诈就要求你准确插入tcp连接的字节顺序号,这将在以后整理的文章
中指出)如果某人很关心这个问题,那么 sniffer 对他来说只是前奏,今后的问
题要大得多。(对于高级的 hacker 而言,我想这是使用 sniffer 的唯一理由吧)
Sniffer 的工作环境
snifffer 就是能够捕获网络报文的设备。嗅探器的正当用处在于分析网络
的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不
是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅
探器来作出精确的问题判断。
嗅探器在功能和设计方面有很多不同。有些只能分析一种协议,而另一些可
能能够分析几百种协议。一般情况下,大多数的嗅探器至少能够分析下面的协议:
1.标准以太网
2.TCPIP
3.IPX
4.DECNet
嗅探器通常是软硬件的结合。专用的嗅探器价格非常昂贵。另一方面,免费
的嗅探器虽然不需要花什么钱,但得不到什么支持。
63 嗅探器与一般的键盘捕获程序不同。键盘捕获程序捕获在终端上输入的键
值,而嗅探器则捕获真实的网络报文。嗅探器通过将其置身于网络接口来达到这
个目的——例如将以太网卡设置成杂收模式。 (为了理解杂收模式是怎么回事,先解释局域网是怎么工作的)。
数据在网络上是以很小的称为帧(Ftame)的单位传输的帧由好几部分组成,不同的部分执行不同的功能。(例如,以太网的前 12 个字节存放的是源和目的的
地址,这些位告诉网络:数据的来源和去处。以太网帧的其他部分存放实际的用
户数据、TCPIP 的报文头或 IPX 报文头等等)。
帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线
上。通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端
机器的以太网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。
就是在这个传输和接收的过程中,嗅探器会造成安全方面的问题。
每一个在 LAN 上的工作站都有其硬件地址。这些地址唯一地表示着网络上的
机器(这一点于 Internet 地址系统比较相似)。当用户发送一个报文时,这些报
文就会发送到 LAN 上所有可用的机器。
在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于
自己的报文则不予响应(换句话说,工作站 A 不会捕获属于工作站 B 的数据,而
是简单的忽略这些数据)。
如果某在工作站的网络接口处于杂收模式,那么它就可以捕获网络上所有的
报文和帧,如果一个工作站被配置成这样的方式,它(包括其软件)就是一个嗅
探器。
嗅探器可能造成的危害:
1.嗅探器能够捕获口令
2.能够捕获专用的或者机密的信息
3.可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限
事实上,如果你在网络上存在非授权的嗅探器就以为着你的系统已经暴露在
别人面前了。(大家可以试试天行 2 的嗅探功能)
一般我们只嗅探每个报文的前 200 到 300 个字节。用户名和口令都包含在这
一部分中,这是我们关心的真正部分。工人,也可以嗅探给定接口上的所有报文,64如果有足够的空间进行存储,有足够的那里进行处理的话,将会发现另一些非常
有趣的东西……
简单的放置一个嗅探器宾将其放到随便什么地方将不会起到什么作用。
65Sniffer 使用简介(一)
在这一章节里我们要学习到的是从sniffer的安装到sniffer的基本使用,这是对 sniffer 熟悉的一个过程,因此在这里请大家不要忘记,你首先要估的准
备工作就是自已要拥有 sniffer 安装程序与安装序列号,当然如果你不喜欢英文
界面你还可以拥有一个汉化包可以使你的 sniffer 有中文版式,那么你还等什
么,去下载或者去购买都可以,如果你还不会,那么建议你用 baidu 或是 google
找找吧,我不好把地址写出来,现在互联网更新太快了,变化也太快了,所以请
大家自已动手去找找。
好了,开始我们激动人心的探索吧!!!
一、 sniffer的安装
双击 sniffer 的安装程序。
下面就不用说了吧,一路 NEXT 就行了,
在上面填入你的个人信息,记住有号的一定要填上。
66
在这里的选项并不重要,最后一个 Sniffer Serial Number 才是关键,需
要你填入产品序列号,第一个“Please let us know where you heard about this
product”表示“你是通过什么途径知道 sniffer 的” ,随便选一个就行了,第二
个“Do you wish receive announcements about this product?”表示“你是
否愿意用前面填写的信息接受来自 sniffer 方面的公告”当然示个人爱好而定,如果不想收到这方面的信息,选 “NO” 就行了,下面还有接收方式,如:E-mail,FAX
等,第三个“May we share your name with other companies that use NAI
products?”表示“是否愿意与其它使用 NAI 公司产品的用户分享”,这个随便选
择,不关系到 Sniffer 的使用。
67上图就显的重要些了,在这里选择你接入 Internet 的方式,第一个方式是
直接接入 Internet,第二个方式是通过代理接入 Internet,这种方式下面有个
“Configure”按钮大家需要注意:
在这里可以填入你的代理服务器及端口,如果需要用户名与密码你也必需
填入,当然在 Sniffer 中,这些是不被软件存储的,需要你自已时时填入。(注
意,在默认情况下,它会根据你浏览器的设置来自动填写)。
最后一个选项“Not connected to network or dial-up.Print fax
option”表示如果你没有接入 Internet,你的注册信息将被打印或传真表示出
来,这里要根据每个人的具体情况来填写,我的就是选择“Connection to the
Internet through a Proxy”通过代理接入,这表示你的 PC 可能是接在一个 LAN
当中。
接下来,是安装程序自动检测一些信息,这里不需要手动。
68以上都是自动完成的。
这下面这张图里是你的个人注册信息,大家可以看到你前面所填写的很多
信息。
不用管它,尽管点击“Finish”就行了。接着会要求你重新启动计算机。
按软件的要求,重启吧,点击“Finish”就成了!
至此 Sniffer 安装完成了,大家敢快运行看看吧!
如果大家要汉化的话,直接运行汉化包就行了!
69二、 Sniffer的使用
接入来我们就开始学习使用 Sniffer pro 及怎么配置它,如何实现它强大
的功能。
第一次启动 Sniffer Pro 时,如果系统安装了多个网卡,系统会要求选择
使用的代理或者网卡。结果选择储存在 Sniffer Pro 中,下次运行时就会自动选
择同样的代理。可以在启动 Sniffer Pro 后从“文件-选择设定”中改变代理。
这时会出现一个“设定”窗口,如下图
大家看到我有三块网卡,其中两块是我装 VMware Workstation 虚拟机时产
生了,第三块 Inter(R)开头的那个才是真正的物理网卡。
如果想从另一块网卡上捕获流量数据,但是在设定窗口中没有显示这块网
卡,单击 New(添加)。这时会出现下图的对话框。
输入以下信息:
■ 说明 为适配器取一个好名字。在选择了 Select Settings(选择设定)
选项时就会出现说明域。
70■ 网络适配器 这里将显示出你系统上所有 NDIS 3.1+相容网络适配器。选
择一个没有被 Sniffer Pro 探针监控的适配器。
■ 类型 说明探针是远程的还是本地的。Sniffer Pro 限定只能使用本地探
针。只有分布式 Sniffer 才支持远程探针。
■ 复制设定 从当前代理中复制配置设定。这个下拉式列表显示了你系统
上以前定义过的所有代理。
Sniffer Pro 允许同时在多个区段捕获数据。要做到这一点,就要先启动一
个 Sniffer Pro 对话,为要监控的第一个区段选择代理,并在那个接口上开始捕
获。然后启动一个新的 Sniffer Pro 对话,选择下一个代理,并开始捕获。可以
把这两个窗口平铺在屏幕上,这样可以同时观察到这些区段的情况。在想要在一
个区段同时进行捕获与监控时,也可以使用这种方法。
同时从网络上的两个不同区段捕获流量的能力非常有用。例如,如果有一台
客户端电脑位于某个区段上,一台服务器位于另一个区段,就可以同时捕获这两
个区段的流量。
NetPod
以太网可以以全双工模式工作,每个方向的传输与接收流量速度都可以达到
100Mbps。如果只使用 100Mbps 的接收通道,那么以 200Mbps 的速度捕获数据就
会出现问题。Network Associates 公司的高速以太网全双工 Pod 是一种硬件设
备,可以用它来捕获全双工流量。它可以捕获网络上的数据,并储存在一个中间
缓冲设备中。接着被捕获的数据通过另一个高速以太网连接,被传递给 Sniffer
Pro。Sniffer Pro 系统中必须有一个得到系统支持的高速以太网适配器。得到
系统支持的网卡包括:
■ 带有 NAI 增强驱动程序的 Adaptec Cogent 10100 高速以太网 21140UC
PCI 适配器。
■ 带有 NAI 增强驱动程序的 Network Associates NAI2140UC PCI 高速以
太网适配器。
■ 带有 NAI 增强驱动程序的 Xircom CBE2-100BTX CardBus 适配器。
n 带有 NAI 增强驱动程序的 Network Associates CardBus 以太网二代
10100 适配器。
71 如果要获得更多关于高速以太网全双工 Pod 的信息,或者要购买,可以与
当地 NAI 代表或者代销商联系。
如果要在 Sniffer Pro 中设置高速以太网 Pod,可以选择文件-选择设定。
单击 New(添加)按钮来定义与高速以太网全双工Pod 相适应的新的本地代理。
在Network Adapter(网卡)中,选择与高速以太网全双工 Pod 相适应的网卡。
从 NetPod Type(NetPod 类型)中,选择Full Duplex Pod(全双工Pod)。在
NetPod IP Address(NetPod IP 地址)中,输入 Sniffer Pro 系统的网络适配器
的 IP 地址再加 1。例如,如果 Sniffer Pro 的网络适配器地址为 192.168.1.1,就必须设定 192.168.1.2 为 NetPod IP 地址。如果 NetPod 要正常工作,Sniffer
Pro 系统必须安装 TCPIP。全双工 Pod 要求有静态 IP 地址,所以应该禁用 DHCP。
单击 OK 按钮完成代理安装。设定好全双工 Po ......
Sniffer 学习手册
编者:毛晋晋 著
深圳龙岗
毛晋晋 MSN:maojinjincn@hotmail.com E-mail:maojinjin@gmail.com 欢迎指正 提出建议 共同学习
绪 言
最近沉下心来在学习 sniffer,对于 sniffer 没有什么好说的,大凡稍微懂
点网络知识的或喜欢黑客的朋友都知道 sniffer=嗅探器,在这个方面相信很多
人比我学的好,因为这个东西我接触的晚,而且网络这东西这也是最近两年才刚
开始,所以很多东西还需要改进,前些日子在网上看了一篇《范伟导老师 Sniffer
课程资料》的贴子觉得很不错,感觉很深,实话直说这篇贴子我看了三遍,先介
绍一下让我感兴趣的范老师(虽然我至今还没见过他照片当然本人更是没见过),而且在这篇教程中也借用许多范老师讲课的内容。
范老师,范伟导,现在是Sniffer中国技术中心的技术总监,中国唯一的
Sniffer大师(SCM),CISCO和Sniffer的授权讲师,这是范老师的邮箱:
fanweidao@hotmail.com,大家没有什么特别的事不要轻易去打扰他。
我本人,毛晋晋,现在在深圳一家制造业公司做网络管理,2006 年获信息
产业部的网络工程师中级职称,毕业后留校任教半年,现正在向CISCO方向学习,个人技术博客: http:blog.csdn.netmaodou521,MSN: maojinjincn@gmail.com
希望有这方面爱好的人一起来学习。
决定写 sniffer 教程有三个原因,一是因为个人最近在学习比较的清闲,第二方面就是前面说到的范老师的讲课给我很大的刺激,下面我到时会全文引用
范老师一个学生写的范老师讲课内容。第三点是因为我自已也是一个搞网络的,毕竟这年头什么都要学点才不至于落伍嘛。
下面我稍微叙述一下 sniffer 教程的一些基本内容,以便让大家做个决定,哪些该看,哪些可以跳过去的,当然我希望大家能跳过去的越多越好,这样一来
就表明大家的知识比起我来就丰富的多了,同时我这上面也有很多是从网上整理
来的,所以大家的看时不要觉得奇怪,这里我在哪看过了,这里是什么地方来的,我现在申明就是这个意思。
首先,我要介绍给大家的就是范老师的那篇讲演稿,为什么会把这个做为
开始呢,这是因为这篇稿恰恰是引领大家入门的一个好方法,在稿里范老师由浅
入深的介绍了 sniffer 及为什么学网络的人要学,当然不单单是学网络的人要
学,很多 IT 人都要学。
第二篇,主要讲讲我自已的一些感受,当然你也可以跳过。
第三篇,介绍嗅探的基本原理,从大体上了解一下它的运行环境,复习一下
我们的基本网络知识,从大体上介绍 TCPIP 体系,Sniffer 技术与 antisniffer
技术,这些都能很好的让我们了解 Sniffer 的发展,让大家从根本上明白这个东
西.
第四篇,从大概上我介绍一下 sniffer 的产品及常见应用,这是一个开始,只有让大家熟悉了,大家才会从根本上去了解它。同时也让大家明白 sniffer
的一些功能和作用,当然同时还是复习了原理的东西.
第五篇,介绍 sniffer 的界面,大家在这一章节里可以自已动手实验一下,当然你要有条件才行。同时对一些基本的使用及案例进行分析,让大家有机会一
边操作一边学习,更好的学习和在工作中使用sniffer,体验Sniffer带来的乐趣,其中牵涉到的案例大家一定要动手去做,不然就没有效果了.
第六篇,谈及到了 TCPIP,建议大家有可能将 TCPIP 详解看看,当然可以
让大家学习如何使用 Sniffer 学习 TCPIP,同时让大家明白网络的运作原理等,希望能让大家受益.
2第七篇,是关于嗅探的基本原理,也不能让大家快结束了,还不知道这个
东西是怎么实现的。再次复习一次,在这里大约说了三遍,让大家加深印象,不然
马上就忘了,那就不好了.
第八篇,Sniffer 的基本使用与实例,这一章节里就是真正的让你明白怎么
去使用 Sniffer 了,再次实战操作了,希望大家好好利用最后一次操作的机会,记
住:一定要动手去做!
最后介绍给大家的就是你用 Sniffer 之后,对得到的东西怎么去理解,这
便就是数据分析实例,基本上就是按照一个循序渐进的过程,让大家从开始入门,再到最后,就是一个问为什么的过程,只要明白了这点,不管以后在什么样的工
作中你都会相当不错。
最后感谢我的同事王志明先生,在整本书写作期间一直默默的提供实验环
境,积极的加入到 Sniffer Pro 的各个测试过程及提供建议,在此表示感谢!
编者:毛晋晋
于深圳龙岗
3
目 录
1-开篇…………………………………………………………2
2-范伟导老师Sniffer 课程资………………………………5
3-自已的看法………………………………………………28
4-嗅探的基本原理…………………………………………34
5-SNIFFER (嗅探器) 简介……………………………………51
6-Sniffer 使用简介(一)……………………………………66
7-Sniffer 使用简介(二)……………………………………81
8-Sniffer学习TCP…………………………………………101
9-sniffer 原理……………………………………………128
10-Sniffer Pro 的基本使用和实例(一)…………………132
10-Sniffer Pro 的基本使用和实例(二)…………………151
4范伟导老师 Sniffer 课程资料
言:
范老师现在是 Sniffer 中国技术服务中心的技术总监,是中国唯一的
Sniffer 大师(SCM),他有丰富的经验和经典案例,讲课讲得不错。
我是范老师的学生,我 2005 年学习了 Sniffer,发现收获很大,但我不能
透露我的单位,因为我想范老师不会允许我把他的讲课内容公开。
以下内容是我根据上课录音编写的,基本上是范老师的原话。我整理了一
个星期才整理出来,因为范老师在上课时有很多笔书,整理起来很困难, 有人
会问,为什么不把录音共享出来,主要是课程中很多实验,只有录音,作用不大,我把他整理成文字,看起来会方便一些,当我全部整理完,估计可以出书了,版
权费给谁呢?哈哈,我希望大家喜欢,如果反应良好,我把后面的内容也贴出来,很辛苦的,大家要珍惜。
大家不要放映,精华内容都在注释里。
大家有什么问题,可以发E-mail给范老师,fanweidao@hotmail.com,记住
如果他问你是谁,你说是北京移动或广东移动或工商银行随便一个省分行的,因
为这些单位的学生特别多,他肯定搞不清楚。哈哈,对不起了!范老师,我只是
想帮你推广Sniffer.
课程内容:
大家好!欢迎大家参加 Sniffer 的认证课程!
先自我介绍一下!我叫范伟导,这是我的邮件(fanweidao@hotmail.com),我现在没有工作(同学们:自由职业者)可以这么说。
介绍一下我的经历:毕业后我在一个台资电脑厂工作了一年,做硬件的。
后来到了日本三洋工作,作 X400 的软件开发,做 ERP,用 RPG 开发,做了 4 年
后来到了神州数码,作 CISCO 网络,原来在技术中心做实施,后来在培训中心做
讲师,一共做了 5 年。
现在我是 CISCO 和 Sniffer 的授权讲师,不过现在我不想做 CISCO 了,想
做 Sniffer,因为我觉得网络分析是一个很好的技术方向。等一下我还会跟大家
聊一聊我们该往哪一个方向发展。
先看一下我们这个课程,这个课程事实上是两门课,第一门我们介绍怎样
用 Sniffer 来做网络故障诊断,还有网络管理的一些方法和思路,第二门课我们
介绍如何做应用的分析,这是 Sniffer 的新课程,我个人觉得非常好,以前的几
个班学员也很喜欢。第一门课我们会讲 3 天,第二门课我们会讲 2 天。
5接下来的半个小时我们不讲书本知识,讲讲我的经历和 Sniffer 究竟能用
来做什么,我们为什么要学 Sniffer,其实我的目的是提起大家的学习兴趣,大
家愿意学,我才讲的起劲。要不我一边讲,大家在噼噼啪啪上网,那我就讲不下
去了(同学们笑)。
大家做网络都很多年了,想想我们以前的 10 兆以太网,现在的万兆以太网,想想 14.4k 的 modem,现在的 2M 宽带,以前的 x25,桢中继,现在的 SDH,MSTP,裸
光纤。大家都经历这些,但我们才工作几年?就这几年,变化这么大,我不知道
大家的工资有没有变化这么大,(同学们大笑),从 10 兆到万兆,1000 倍,几年
工资张 1000 倍。有点难(同学们:不是有点难,是很难,不可能)。
再看看我们工作的变化,以前能配配路由器就很牛了,现在似乎谁都会了,记得几年前,我帮一个小集成商配一台 4000 系列交换机,收了 2000 元,15 分
钟搞定。(同学们:好爽,介绍一些给我们做),没有了说说你们的工作。平常
工作中做些什么(同学们:做做网线,杀病毒,帮领导装机器)大家想想,这是
我们想做的工作吗,以前这些都不用我们做,现在大家感觉是不是地位在下降,工资也不涨,好歹我们也是蜘蛛级的人物呀,不是有个笑话说蜜蜂是空姐,做网
络的是蜘蛛吗。(同学们笑)
我们该怎么办?
现在说说我的观点,我们都希望工资能年年涨,不要求 1000 倍,(同学们:
不要求那么高,一年 20%就行了),20%?不止吧,从毕业到现在,你们工资不
止年均涨不止 20%吧。 (同学们:我们不能跟您比)也有可能,你们的起点高,我毕业的时候才有 650 元。
大家回顾一下,做 IT 的谁的收入高?
1、销售
2、领导
3、咨询专家
4、售前工程师
5、售后工程师
我们在座的有 3 个是网络中心的主任或科长,他们的收入肯定比一般工程
师高,我祝愿你们步步高升,收入节节高。在座大多数是网络工程师,我们该怎
么走,其实你们现在的单位都很好,但将来怎样很难知道,比如前几年银行的收
入令人羡慕,现在他们却担心降工资,现在移动的收入不错吧,我有汽车厂商的
学员,他告诉我他们的收入比移动好点,(同学们:哇)这是他们自己说的,好
多少就没说了,还有某政府单位的,什么单位不便说,他们没告诉我他们的收入,只说,价格少于 4 万的笔记本他们不用,哇靠,4 万的笔记本,什么配置?(同
学们:那是服务器)我们不能比,人比人,气死人。我们没法进入这些公司的,还是脚踏实地一点好,但我们做技术的也要考虑如何提高我们的收入,做技术的
要提高收入,地位是关键,前面大家说只做做线,杀杀病毒,我们的地位在下降,工资怎么长得起来呢?想想我们做技术的,谁的收入高,做数据库的比做服务器
的高,为什么 Oracle 那么火,做服务器的比写程序的高,写程序的比做网络高,6这是普遍现象,不说特殊情况。其实大家发现一个特点没有,凡是掌握企业关键
业务的收入都很高,你看作数据库的,数据库坏了,企业完蛋了,领导当然重视,现在不仅讲存储,还讲灾备,你看很多银行,北京一个数据中心,上海一个数据
中心。
我们网络怎样,设计的都是高可靠性的端到端备份,出问题的机会很少,而当应用出什么问题,都说是网络问题。举个例子,有个单位(税务的学员告诉
我的),有一天应用突然变慢,大家都说网络慢了,我们用尽 troubleshooting
的技术也发现不了问题,结果作数据库的工程师偷偷改一下表空间,好了,没问
题了,我们不知道怎么好了,做数据库的不说他们有问题,还说网络好了,领导
问我网络怎么好的,我不知道呀,领导说:赶快查出原因,避免再出现类似问题,哇塞,怎么查,本来网络就没问题,查什么查。(同学们笑)
所以现在大家用一个字来形容我们的工作?你们会用什么字(同学们:累、苦)很贴切,苦、累所以我们不能一直停留在网络的 troubleshooting,我们必
须提高我们的地位,要不我们会累死。
怎么提高地位,我们必须了解我们的业务,也就是要了解应用,了解应用
在我们网络上的行为特征,很重要的一个词行为特征。当我们了解了业务的行为
特征,我们能定位某一个问题的真正故障点,举个例子:网络应用变慢,可能的
原因有什么?网络问题,服务器问题,数据库问题,应用程序问题,客户机问题。
如果我们能够判断是哪一部分问题,我们就有发言权了,比如说刚才那种情况,如果我们直接说这是数据库问题,不是网络问题,领导会问,你凭什么说是数据
库问题,你可以拿出 Sniffer,专家系统上写着,DB Slow Server response 诊
断,(范老师在演示)再看解码,做一个用户验证操作,花了 1.731 秒,有根有
据,大家想一想,有了 Sniffer 我们可以了解我们的业务行为特征,可以排除我
们的责任,不但工作轻松了,地位也提高了。(同学们笑)
以前我们应用出现问题的时候我们总是分头查找问题,结果往往是没有结
果,因为这种查找方式范围太大了,我们做 troubleshooting 第一步应该是:隔
离故障。
如果我们有了 Sniffer,首先用 Sniffer 看一下,最有可能是哪一部分问题,再安排检查,这样不但节省人力,速度会更快,效率也更高。
如果有人问我们Sniffer是什么?大家都会说是协议分析仪,你看sniffer
网站(www.networkgeneral.com)上说的是应用和网络分析系统。究竟Sniffer
是什么样的一个东西,我们要了解他的发展过程。其实很多类似的产品比如
ethereal,netscout,wildpacket等都有类似的发展过程。
第一阶段是抓包和解码,也就是把网络上的数据包抓下来,然后进行解码,那时候谁能解开的协议多,谁就是老大,Sniffer 当时能解开的协议最多,也就
理所当然地成了老大,现在 Sniffer 能解开 550 种协议,还是业界最多的,7第二阶段是专家系统,也就是通过抓下来的数据包,根据他的特征和前后
时间戳的关系,判断网络的数据流有没有问题,是哪一层的问题,有多严重,专
家系统都会给出建议和解决方案,现在 Sniffer 的专家系统还是业界最强的
第三阶段:是把网络分析工具发展成网络管理工具,为什么要这样,如果
Sniffer 知识用作网络分析,那 Sniffer 的软件就够用了,现在软件的 portable
基本上都是盗版的,sniffer 没钱赚了,所以它必须往网络管理方向转,要作为
网络管理工具,就必须能部署在网络中心,能长期监控,能主动管理网络,能排
除潜在问题,要做到这些,就要求有更高的性能,所以 Sniffer 就有了相应的硬
件产品,比如说分布式硬件平台,InfiniStream 等,我知道在座各位都买了
Sniffer 的硬件,这时候如果用软件的 Sniffer 性能就不行了。
我们看一下,Sniffer 究竟有什么用?
第一,Sniffer 可以帮助我们评估业务运行状态,如果你能告诉老板说,我
们的业务运行正常,性能良好,比起你跟老板报告说网络没有问题,我想老板会
更愿意听前面的报告,但我们要做这样的报告,光说是不行的,必须有根据,我
们能提供什么样的根据呢。比如各个应用的响应时间,一个操作需要的时间,应
用带宽的消耗,应用的行为特征,应用性能的瓶颈等等,到第二门课,我会告诉
大家怎么做到有根有据。
第二,Sniffer 能够帮助我们评估网络的性能,比如,各连路的使用率,网
络的性能的趋势,网络中哪一些应用消耗最多带宽,网络上哪一些用户消耗最多
带宽,各分支机构流量状况,影响我们网络性能的主要因素,我们可否做一些相
应的控制,等等。
第三,Sniffer 帮助我们快速定位故障,这个大家比较有经验,我们记住
Sniffer 的三大功能:monitor,expert,decode 这三大功能都可以帮助我们快速
定位故障,我后面通过案例演示给大家看,大家再做做实验,很快就上手了(同
学问:范老师,是否要学 Sniffer 必须对协议很熟,)不一定,我们可以通过
Sniffer 来学习各种协议,比如 ospf,以前学网络的时候,讲 OSPF 的 LSA 好像很
复杂,你用 Sniffer 看看,其实他的协议结构还是不复杂的,一般情况下,我会
要求学 Sniffer 的学员有 CCNP 的基础,或者有几年的网络管理经验,我自己也
是这样,刚开始只是用 Sniffer 抓抓包,抓下来也不知道怎么分析,当我学完
CCNP 后,学了 CIT,以为自己不错了,会排除很多网络故障,但实际上很多问题
我还是解决不了,比如网络慢,他又不断,断了我很快能解决,网络慢,或者丢
包,一般的排错知识还是很难的,那时候开始学 Sniffer,才发现很好用。
第四,Sniffer 可以帮助我们排除潜在的威胁,我们网络中有各种各样的应
用,有一些是关键应用,有一些是 OA,有一些是非业务应用,还有一些就是威
胁,他不但对我们的业务没有帮助,还可能带来危害,比如病毒、木马、扫描等,Sniffer 可以快速地发现他们,并且发现攻击的来源,这就为我们做控制提供根
据,比如我们要做 QOS,不是说随便根据应用去分配带宽就解决了,我们要知道
哪一些应用要多少带宽,带宽如何分配,要有根有据。我们再回过头看一下
Sniffer 什么时候开始流行的,再 2003 年冲击波发作的时候,很多 Sniffer 的
8用户通过 Sniffer 快速定位受感染的机器,后来很多人都知道 Sniffer 可以用来
发现病毒,Sniffer 的知名度暴涨,盗版用户也暴涨(同学们大笑),后来震荡
波发作的时候,很多人用 Sniffer 来协助解决问题。我想强调的是 Sniffer 不是
防病毒工具,这也只是他的一个用途,而且只对蠕虫类型对网络影响大的病毒有
效,对于文件型的病毒,他很难发现。
另外要说明的事,Sniffer 还可以用来排除来自内部的威胁,现在我们网络
中有各种各样的网络安全产品,防火墙、IDS、防病毒软件,他们都有相应的功
能,但真的有效吗,能解决全部威胁吗,我们要进行评估,用 Sniffer 就能评估
内网的安全状况,有没有病毒,有没有攻击,有没有扫描,像防火墙、IDS、防
病毒软件他们都是后知后觉的,它必须有特征才能阻绝,而 Sniffer 是即时监控
的工具,通过发现网络中的行为特征,判断网络是否有异常流量,所以 Sniffer
可能比防病毒软件更快地发现病毒。我在神州数码的时候,冲击波震荡波都是我
先发现的,有趣的是当时我都在上 Sniffer 的课,中午休息,我把 sniffer 驾到
公司网络,再 Hosttable 看到广州一台机器很多广播,接着广州另外一台机器也
开始发广播,接着深圳也感染了,我马上通知 IT 管理人员,他们把这几台机器
断网,后来才知道有冲击波病毒,防病毒软件还不能杀。
刚才讲到异常流量,这是一个很重要的概念,什么是异常流量?我们怎么
判断是否异常,这又涉及另外一个概念,叫基准线分析,什么是基准线,基准线
是指我们网络正常情况下的行为特征,包括利用率、应用响应时间、协议分布,各用户贷款消耗等,不同工程师会有不同基准线,因为他关心的内容不同,只有
知道我们网络正常情况下的行为特征,我们才能判断什么是异常流量。
第五,做流量的趋势分析,通过长期监控,可以发现网络流量的发展趋势,为我
们将来网络改造提供建议和依据
第六点就是应用性能预测,这点很有用,会用的人不多,我们第二门课会
讲,Sniffer 能够根据捕获的流量分析一个应用的行为特征,比如,你现在有一
个新的应用,还没有上线,我能评估他上线后的性能,比如在用户在网络中心有
多快,用户在省中心有多快,用户在市中心有多快,都可以提供量化的预测,准
确率挺高的,误差不超过 10%。我们还可以用她来评估应用的瓶颈在哪,不同应
用瓶颈不同,比如有些应用慢了,增加网络带宽效果很明显,比如 FTP 这种应用,有些应用慢了增加带宽没什么效果,比如 TELNET 应用,我们还可以预测网络带
宽增加的效果,比如我将 2 兆提高到 8 兆应用性能有多大的提升,Sniffer 能比
较准确地预测。
在这里我们提到三个重要概念,网络行为特征,异常流量,基准线,大家
理解了吗?在这里,我不想太多介绍产品,我不是来推销 Sniffer 的(同学们笑),我们主要探讨网络分析技术。
Sniffer 的便携式就是我们用的那种盗版软件(同学们笑), 我不用介绍了,这门课我们用 Sniffer 的便携式来讲,因为分布式和 InfiniStream 也有一样的
界面,上课的时候我们都是用便携式。
9Sniffer 的分布式包括 4100 和 6040,主要是放在网络核心可以长期监控、分析,4100 可以处理千兆流量,6040 可以处理 8 千兆流量,这是业界性能最高
的产品。
Sniffer 的 InfiniStream 的特点是可以长期抓包,最多有4个T 的存储空
间,可以长期抓包,可以进行回溯性分析,这点对有些用户来说很重要,比如今
天早上 10 点半,某个应用很慢,十分钟后又正常了,如果没有 InfiniStream,流量没有保存,我们就很难分析问题在哪,如果有了 InfiniStream,这些流量都
会保存下来,自动的,就是长期抓包,我们就可以找出当时的流量,进行分析,一个很好的设备,现在支持 1800 兆线速捕获,这也是其他厂商没有的。
这些你们买设备的时候代理都给你们说清楚了,我就不多讲了。
怎么样,听了这么久,感觉如何?有兴趣吗?
其实我个人是很喜欢 Sniffer 的,我当时从三洋出来的时候,错过了去 IBM
的机会,去了神州数码才知道,他们 IBM 需要做 X400 的人,去了神州数码,老
板问我想做网络还是想做主机,我说做网络吧,那时一个 CCIE 二三十万的收入
是有的,结果到我考过 CCIE 笔试的时候,CCIE 就值 10 万吧,真是绝望了, (同
学们笑)为什么当时不做主机呢,我那些做 6000 的同事现在都不错,又不累。
做网络不就一个字:累吗(同学们笑)我也没有去考实验了,01 年的时候我考
了 CCSI,就是 CISCO 授权讲师,后来讲了很多 cisco 的课,我 CISCO 的学员有
1000 个,后来又讲 Sniffer 的课,Sniffer 的学员有 300 个,我的学员不少,有
不少关系不错的,他们过的比我好(同学们笑,你做讲师也不错呀,收入不低吧),以前讲CISCO的时候收入不高,一天也就1000到1500,讲Sniffer会好一些,(同
学们:讲 Sniffer 一天多少)这还不好公开,如果你们有兴趣开班,我们再聊 (同
学们笑)。后来我考过了 SCM,Sniffer 的最高级认证,叫 Sniffer 大师。中国
就我一个人,(同学们:哇,难不难考,考几门),Sniffer的考试不难,这个
我后面会讲,考过 SCM 的全球也只有 62 个,亚太区只有 5 个,所以 Sniffer 原
厂的课程都是我讲的。在今年,我会去协助组建 Sniffer 中国技术服务中心,以
后你们有什么问题都可以联系我,我在那里是技术总监。我们还有在各行各业的
Sniffer 专家小组,都是喜欢使用 Sniffer 的人在一起交流使用心得,分享一些
案例,你们如有兴趣,到时我可以邀请你们参加,不过首先要认真听课。(同学
们笑)
好了,讲了这么多,目标只有一个,提起大家的学习兴趣,接下来讲课程
的内容,首先把 Sniffer 打开。
好,大家都打开了吗,有问题随时告诉我,(跑去解答问题去了)如果大
家在上课的时候有任何疑问,随时可以打断我,不用给我面子,我也不一定能回
答所有问题,不过没关系,交流总会进步的。
好,我们继续第一个我要介绍的是 local agent。什么叫 local agent,大
家打开菜单“File->select settings”,这时候,大家可能只看到一个 local 下
10面是你的网卡,这就叫做一个“local agent”。
事实上,一个“local agent” 就像一个探针。我们知道 Sniffer 的工作
原理很简单,就是把网卡设成混杂模式(叫做 promiscuous),所谓混杂模式,就是把所有数据包接受下来放入内存,大家知道一般情况下,PC 机只接受目的
mac 地址为自己网卡或广播、组播的数据包。sniffer 就是这样把所有数据包都
接收下来,在进行分析。
大家看我这里有多个 agent,怎样可以做多个 agent 呢,可以不同网卡做不
同的 agent,就像你们的分布式 sniffer 一样,有多个网卡,那就是多个
agent,infinistream 也一样。
其实一个网卡,也可以做多个 agent,大家试一下,new 一个,给他加上说
明,就叫 101 把,选中你们的网卡,下面选 no pod,copy setting 留空,那个
pod 是你外接 sniffer book 时候用的。大家看看你们的 agent 多了一个,101
括号 local_2。对不对(同学们:对)
好,不错。
我们为什么建立多个 agent 呢。不同的 agent 可以定义不同的阀值,可以
有不同的过滤器,可以有不同的触发器,不同的地址本。
比如说,你们有一台笔记本装着 sniffer,大家都用它,那不同的工程师可
以自己定义一个 agent,自己定义自己的过滤器,互不干涉,比如不同的网段有
不同的阀值,也可以定义不同的 agent。
那 agent 的参数保存在哪里呢,大家打开 c:\program
files\nai\sniffernt\program,大家看到 local local_2,这就是两个不同的
agent 保存参数的地方。大家看到两个 CSF 文件,一个是 sniffer.csf,另外一
个是 Snifferdisplay.csf。这是过滤器文件,当我们使用 sniffer 一段时间之
后,大家会累积许多好的过滤器,一定记得保存下来,就是把这两个文件考出来
就行了,如果你看到别人那里有好的过滤器,也可以拷过来。不过当你要倒回去
11的时候,4.8 比较好办直接倒入就行了,4.75 比较麻烦,我后面讲定义过滤器的
时候再教大家。过滤器是 sniffer 最难、最有意思、最重要的一部分,大家放心,我能让大家成为高手。(同学们笑)
好,“local agent”讲完了,local agent 是什么?事实上就是定义一个
环境变量,不同的环境不同的参数。
好,休息一下,待会儿讲 monitor 功能。
中间休息的时候,我问了范老师一个问题:我看书上说,TCP 是可靠的,UDP
是不可靠的,那要不可靠 UDP 来干什么?(各位:我的问题是不是很傻?但我确
实不知道呀)
范老师:不错,这个问题非常好!(嘿嘿!)
TCP 叫传输控制协议,他的特点是:有连接,有流控,有顺序号确认号,开销比较大,一般是 20 个字节的头。
UDP 叫用户数据报协议,开销小,8 个字节的头,无可靠保证。
我后面有详细介绍 TCP 和 UDP,我们先看您的问题。
首先,UDP,不可靠,是指,在传输层不提供可靠保证,并不意味着所有使
用 UDP 的应用都不可靠。
我们来比较几个应用(范老师用他的 trace file 给我演示)
DNS,53 端口,进行查询时,用的是 UDP,因为要求速度快,比如我要查
networkgeneral 的地址,你只要告诉我 ip 是多少就行了,如果要进行 3 次握手
建立连接,再去取到 IP,那就慢了,所以用的是 UDP,一个字:快。没响应怎么
办,事实你看(他在演示)它会同时向多个 DNS 查询,所以没响应也没关系,你
看这个响应名字错误,找不到。所以 UDP 还是有用的,特别是像 DNS 查询这种应
用,丢了也就丢了,我再查。但 DNS 也有用 TCP 的时候,比如 DNS 服务器的同步,用的就是 TCP 的 53 端口
TFTP,您所了解的 TFTP,用的是 UDP 吧,他不可靠吗,事实上文件传输,必
须保证可靠。不但要保证能知道丢包重传,还要有顺序号,应付错序到达的情况,也就是我们常说的后发先至。事实上 TFTP 是怎样工作的,你看(他在演示),每一个数据块都有 Id 号,一块 512 字节,一次传输,一次确认,这就相当于 TCP
的顺序号和确认号。所以 UDP 是不可靠的,但很多使用 UDP 协议的应用是可靠的,只是在应用层去保证可靠性,很多人说用 UDP 效率高,事实上 TFTP 在传输大文
件的时候,比 FTP 效率更地,我们后面有专门的实验。
视频流量,(没有演示)对于视频流量,也是需要可靠保证的,但要求不
是很高,所以不会像 TFTP 那样每一个数据报都确认,而是传多个数据包确认一
12次,要不效率就太低了,究竟多少个数据包确认一次,开发人员需要不断测试。
我的解释清楚吗,(我说:明白了!谢谢!)
(确实看着演示,很容易就理解了,中间我们有许多对话,我省略了,确实如果
只听录音是不明白的,这是我为什么要整理成文字给大家看,好累呀!大家给我
加油!)
好,我们继续!
我们来看一下 Sniffer 的七大 monitor 功能,有
Dashboard,hosttable,matrix,ART,protocol distribution,history
sample,global statistics 我们一个一个来看,
先看 dashboard。
13
这个大家很熟悉了,我不用多讲,dashboard 有 3 个仪表,分别是使用率,每秒钟包数量,每秒钟错误率,下面都有两个数字,前面一个表示当前值,后面
一个表示最大值。
下面还有 long term,和 short term,Long term 每 30 分钟采样一次,一共
可以采样 24 小时,short term 每 30 秒钟采样一次,可以采样 25 分钟大家自己
试一下,首先把 File 里面的 loopback 选上,这样我们发的数据包就不会发到
网络中去,然后打开 101 目录里的 TCPdemo7a 那个 trace file ,再用 packet
general 发包,选 send current buffer,连续发送。 (我们是跟着范老师做的)。
好了,大家试了一遍,感觉应该是一样的,就是这有什么用?没用,对吧,我也这样觉得(同学们笑)但如果你要监控某一台服务器的时候,这个是有用的,比如你把一台服务器的接口 monitor 过来,这样你就可以看到这台服务器的流
量状况了,这就是一个很好的基准线呀。当然大家用的是硬件产品,就更方便了。
大家注意到下面还有错误报的统计,要注意的是一般的网卡是抓不了错误包的,要用专用网卡,一块网卡上万块,NG 好黑呀(同学们笑)其实大家知道通过交
换机的存储转发,基本上很少错误包,所以不用关注它。
在这里我想解释一下以太网的错误包,这对大家学习网络是很有帮助的,特别是了解一下封装的概念。
(请看下一页:以太网为什么要 64 个字节)
14
(这是范老师的板书,我画不出来,大家将就点吧)
(这是范老师的板书,我画不出来,大家将就点吧)
以太网是无连接的,不可靠的服务,采用尽力传输的机制。以太网 CSMACD 我就
不多讲了,我相信大家都了解这个原理。
以太网是不可靠的,这意味着它并不知道对方有没有收到自己发出的数据
包,但如果他发出的数据包发生错误,他会进行重传。以太网的错误主要是发生
碰撞,碰撞是指两台机器同时监听到网络是空闲的,同时发送数据,就会发生碰
撞,碰撞对于以太网来说是正常的。
我们来看一下,假设 A 检测到网络是空闲的,开始发数据包,尽力传输,当数据包还没有到达 B 时,B 也监测到网络是空闲的,开始发数据包,这时就会
发生碰撞,B 首先发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续
的 01010101 或者 10101010,十六进制就是 55 或 AA。这个碰撞信号会返回到 A,如果碰撞信号到达 A 时,A 还没有发完这个数据包,A 就知道这个数据包发生了
错误,就会重传这个数据包。但如果碰撞信号会返回到 A 时,数据包已经发完,则 A 不会重传这个数据包。
我们先看一下,以太网为什么要设计这样的重传机制。首先,以太网不想
采用连接机制,因为会降低效率,但他又想有一定的重传机制,因为以太网的重
传是微秒级,而传输层的重传,如 TCP 的重传达到毫秒级,应用层的重传更达到
秒级,我们可以看到越底层的重传,速度越快,所以对于以太网错误,以太网必
须有重传机制。
要保证以太网的重传,必须保证 A 收到碰撞信号的时候,数据包没有传完,要实现这一要求,A 和 B 之间的距离很关键,也就是说信号在A和B 之间传输的
来回时间必须控制在一定范围之内。IEEE 定义了这个标准,一个碰撞域内,最
15远的两台机器之间的 round-trip time 要小于 512bit time.(来回时间小于 512
位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域
的直径。
512 个位时,也就是 64 字节的传输时间,如果以太网数据包大于或等于 64
个字节,就能保证碰撞信号到达 A 的时候,数据包还没有传完。
这就是为什么以太网要最小 64 个字节,同样,在正常的情况下,碰撞信号应该
出现在 64 个字节之内,这是正常的以太网碰撞,如果碰撞信号出现在 64 个字节
之后,叫 late collision。这是不正常的。
我们以前学习 CISCO 网络的时候,CISCO 交换机有一种转发方式叫
fragment-free,叫无碎片转发,他就是检查 64 个字节之内有没有错误,有的话
不转发,这样就排除了正常的以太网错误包。
(这是范老师的板书,我画不出来,大家将就点吧)
我们再来看一看以太网的帧结构。
要讲帧结构,就要说一说 OSI 七层参考模型。七层参考模型大家很熟悉,以前我们看书的时候会觉得不知所云,我刚学的时候就是这感觉,其实我们只要
掌握两点就行了。
一个是访问服务点,每一层都对上层提供访问服务点(SAP),或者我们可
以说,每一层的头里面都有一个字段来区分上层协议。
比如说传输层对应上层的访问服务点就是端口号,比如说 23 端口是
telnet,80 端口是 http。IP 层的 SAP 是什么?(同学们没说话)。
其实就是 protocol 字段,17 表示上层是 UDP,6 是 TCP,89 是 OSPF,88 是
EGIRP,1 是 ICMP 等等。
以太网对应上层的 SAP 是什么呢?就是这个 type 或 length。比如 0800 表
示上层是 IP,0806 表示上层是 ARP。我后面还会将各种以太网的帧类型。
16第二个要了解的就是对等层通讯,对等层通讯比较好理解,发送端某一层
的封装,接收端要同一层才能解封装。
我们再来看看帧结构,以太网发送方式是一个帧一个帧发送的,帧与帧之
间需要间隙。这个叫帧间隙 IFG—InterFrame Gap
IFG 长度是 96bit。当然还可能有 Idle 时间。
以太网的帧是从目的 MAC 地址到 FCS,事实上以太网帧的前面还有
preamble,我们把它叫做先导字段。作用是用来同步的,当接受端收到 preamble,就知道以太网帧就要来了。preamble 有 8 个字节前面 7 个字节是 10101010 也就
是 16 进制的 AA,最后一个字节是 10101011,也就是 AB,当接受端接受到连续的
两个高点平,就知道接着来的就是 D_mac。所以最后一个字节 AB 我们也叫他 SFD
(帧开始标示符)。
所以在以太网传输过程中,即使没有 idle,也就是连续传输,也有 20 个字
节的间隔。对于大量 64 字节数据来说,效率也就显得不高。
所以,有时我们用下载数据来检查我们的网速,这是不完全准确地,我们
要了解他的传输特征,才能准确判断电信究竟给了你多少带宽。我有一个移动的
学员,他说用户总怀疑我给他的带宽不够,其实我肯定给他两兆了,所以有时运
营商也挺不容易(同学们笑)。后来我告诉他怎么样用 sniffer 来测带宽,不知
道他后来成功了吗,我没有得到反馈。后面我会介绍怎样用 Sniffer 来做带宽测
试,非常精确的喔。我给很多用户作过带宽测试,他们大多都是怀疑电信给的带
宽不够。(同学们问:有没有不够的时候?)我测试的案例里还没有。还有就是
帮集成商作方案验证,比如,集成商给用户作了多链路捆绑,或路由负载均衡,用户说比原来更慢了,我去证明给用户看,负载均衡确实做起来了,流量分担很
正常。(同学们问:那为什么会慢呢),这就涉及到应用的特征和不同厂商采用
均衡的机制。我还没试过作进一步分析。因为这是集成商的朋友叫我去帮忙的,我只要证明给用户看方案没问题,并告诉集成商如何给用户解释就行了,在做下
去,就会画蛇添足了,因为可能让用户觉得我的水平比我朋友高,那不是帮倒忙
了。(同学们笑)所以帮忙也要适可而止。 (同学们笑)
好了,有点扯远了。前面讲这些主要是帮大家复习以下以太网知识,大家
别担心,时间是足够的,因为这门课里有很一些基础的知识,比如交换原理、 vlan
原理,那些知识我都会跳过,我第一天的内容不会很难,考虑到大家远道而来,第一天都很累。但后面回越来越难,大家要有心理准备。晚上要早点睡觉(同学
们笑)。还有一个,就是大家别指望能记得住我讲得全部内容,今天讲得明天还
记得一点,后天就全忘了,(同学们笑),到了课程结束的时候,基本上全忘光
了,(同学们大笑),所以做笔记很重要,我建议大家把笔记写在书上,到时才
对得起来。我也注意到一些同学在录音,我知道的,不用放在桌子底下(同学们
笑),那样效果不好,(同学们大笑),其实这是不允许的,不过没关系,只有
一个要求,不要放在互联网上。
17(编者:写到这里,有点写不下去了,觉得很内疚,觉得对不起范老师。
我参加过很多培训,范老师是我很喜欢的一个老师,他讲课不会非常幽默,但很
实用,这是因为他有很多经历,他在讲课过程中,会补充很多课程以外的东西,比如很多网络中的细节知识,很多工作中的思路,我觉得这方面收获很大,我个
人觉得是对我知识的全面补充,学完之后觉得不仅学会了 Sniffer,网络管理的
思路更清晰了,现在我指导工程师时,套了很多范老师的话,我觉得范老师很好。
怎么办?我在进行思想斗争。。。该不该再写下去。我想在论坛里发起投票,听
听大家的意见,我该不该再写下去。)
(编者:范老师的课程内容: 第一天 monitor 功能,Sniffer 的部署 。
第二天 expert,capture filter ,troubleshooting
第三天 decode,display filter ,trigger
第四天 应用的类型,应用的剖析,应用的分析思路
第五天 应用性能的分析,应用性能预测)
好,我们继续看第二个 monitor 功能,Host table,我们叫他主机列表。
这是非常好用的一个功能,有什么用呢?
第一看流量最大的 TOP10 主机,第二看广播量有多少,当时我发现冲击波、振荡波的时候, 就是看 这个host
table,发现有大量的全子网广播
18第三可以快速过滤单一主机流量。
第四通过过滤功能可以看到单一业务主机的流量分布,当然也可以通过镜
像接口去实现 。
我们一个一个来看。
首先 TOP10 主机,我们可以点击各列的标题来排序,方便我们分析,比如
收发包情况。大家可以试一下。
第二广播量有多少
我们点击 broadcast 或 multicast 的标题,查看广播量,有一点要注意,不要忘记看 MAC 层的广播和组播,因为 MAC 的广播不一定有 IP 头,比如 ARP,同样 IP 的广播在 MAC 也可能是单播,比如子网广播。
MAC 层的广播是目的 MAC 为 48 个 1,MAC 层的组播为目的 MAC 第一个字节最
低位是 1。(范老师有板书,我的本子上有,懒得画了)
IP 的广播有三种:255.255.255.255 叫本地广播,也叫直播,direct
broadcast,不跨路由器。
172.16.33.255 叫子网广播,广播给 172.16.33.0 这个子网,可以跨路由器。
172.16.255.255 叫全子网广播,广播给 172.16.0.0 这个主网,可以跨路由器。
大家以前学网络的时候,老师会给一个概念,说路由器是三层设备,隔离广播,对吧,我也是这样给同学介绍的,但我在后面会告诉同学,并不是所有广播都隔
离。
事实上只有 255.255.255.255 这类本地广播,路由器才不转发,对于子网
广播和全子网广播,路由器是转发的,这是为什么呢?
我们来看 4 个 255 的广播,在 MAC 的封装中,对应的目的 MAC 是广播,而
子网广播和全子网广播,对应的目的 MAC 是单播,所以路由器会转发。(范老师
在演示)所以我们注意到,路由器隔离的广播是目的 MAC 为全 1 的广播,对于目
的 MAC 是单播的上层广播,路由器是不能隔离的。
现在想想冲击波震荡波为什么影响那么大,因为它采用的是全子网广播,可以跨路由感染。所以对于这种流量我们要小心,希望下次再出现蠕虫病毒时,大家能快速发现,做个世界第一(同学们笑),同样我们要关注 MAC 层的广播。
第三,就是我们可以关注单一主机流量。
第一种办法,抓包。选中主机,点一下抓蝴蝶的工具,这样通过专家系统
和解码你就可以分析他在干什么了。这个我们后面再讲 。
19第二种办法,用 single station。选中主机,点一下下面这个电脑的图标,你可以看到他在跟谁通信,如果你看到他跟几十台、上百台机器同时通讯,可能
是什么?(同学们:BT),对,像 BT,电驴等 P2P 应用会有这个特征。
第四,就是我们如果我们把单一业务服务器的接口镜像过来,我们就可以
看到这台机器的流量状况,我们也可以采用过滤的方式。
Sniffer 有一种叫 Monitor 过滤器。大家选中一台机器,假设这是你要关
心的业务主机,再点一下这个定义过滤器的图标,(范老师在演示),你看他自
动产生一个叫 NEW1 的过滤器,就是这台机器跟任何机器通讯这样的一个过滤器。
我们点一下确定。
我们在选择 monitor 菜单上的 select filter,选 apply monitor filter,再选 new1,确定。
大家注意到,现在 host table 就只有和这台机器通讯的所有主机流量情况。
要注意一点是,monitor filter 应用的时候,对所有 monitor 功能生效,所以
在分析单一业务的时候,特别好用。当然如果你们买的是 InfiniStream 的话,就更方便了,想分析那个业务就分析哪个业务。
怎么样?Host table 好用吧?(同学问:为什么广播也是一台主机?不是
说广播地址不会作为主机地址吗?)(编者:这个问题好像比较低级)。
这是流量分析技术的特点,再流量分析中,它纯粹从包结构中去取得主机
信息,也就是目的 MAC,源 MAC,目的 IP,源 IP,他都作为主机处理,广播地址不
会在原地址中出现,但在目的地址中出现,也是一台主机。这并不影响我们分析。
好。还有什么问题吗?大家用 5 分钟自己试一下。
20好,我们继续看第 3 个 monitor 功能,Matrix,我们叫他矩阵,其实就是
主机会话情况,很多人用他来发现病毒,其实用他来评估网络状况,和异常流量,是一个很好用的工具。
大家看,一下子就满了,大多数网络中都是这样的,我们可以按一下崭停。
然后来分析
分析什么呢?
看那一台主机的连接数最多,要注意这个连接数不是传输层的连接数,是
指谁跟最多的主机连接 ,按右建选 zoom,放大。 ,找到对外连接最多的机器,选中,按右建,选 show select nodes,大家自己试一下。
我们注意到这台机器跟很多机器通讯,这正常吗?(同学们:不正常)
这要看实际情况,如果这时一台业务主机,太正常了,如果这时一台 PC 机,或
许在作 P2P。
究竟在作什么呢?
21
我们注意到这台机器向公网发出大量的 ICMP 包,那是在作什么?(同学们:
在 ping)对!PING 采用 ICMP 协议,ping 可以用来扫描,也可以用来攻击。
扫描就是看那一台机器活着,接着扫描端口,在攻击,所以扫描是攻击主机的前
奏。
另外 ,还可以用 ping 来冲击路由器,或占用带宽,是一种 DOS 攻击。
大家看这个过程更像哪一种类型。
(同学们:扫描,DOS 攻击)
一般情况下,扫描会是比较连续的地址,我们看这个地址并不连续,我们
先排除扫描,当然不是绝对的,也有比较聪明的扫描。
有同学说,这是 DOS 攻击,那是冲击路由器,还是占用带宽?
(同学们:冲击路由器)
嘿,这次比较统一,我也觉得他在冲击路由器,我们看,他的目标地址基
本不在一个网段,这样路由器收到这样的数据包会消耗大量资源在查找路由表上
面。所以对路由器有一定冲击。
一般来说,如果他想占用带宽的话,会发大包,我们发现,包的长度不大,并且一秒钟才发 10 几个包,所以对贷款冲击不大。
或许大家会觉得这没秒 10 几个包对路由器冲击也不大呀。大家想像一下,如果有很多机器在作这个操作,那影响就会很大。
22大家自己在找一找,是否还有其他机器在作同类事情。
(同学们找出 7 台这样的机器)
好大家找出 7 台这样的机器,怎么找出来的?有同学用钢材的办法,有同
学用过滤,都市好办法。
现在假设在你们的网络中出现这样的情况,我们发现了异常,接下来怎么
做?
(同学们:找到这台机器)
然后呢?
我们可以看看这台机器的任务管理器,看看有什么不常见的进程,把他去
掉,看是否解决。在看其他的机器,是否有类似的特征。
这是我的一个学员发给我的,当时他发现这 7 台机器都有一个特殊的进程,但是
他的防病毒软件没有查出来。他手工解决了。
这很好说明用 Sniffer 可以比防病毒软件更快发现病毒,因为防病毒软件
是后知后觉得,什么意思?防病毒软件必须有相应的特征才能查病毒。而
Sniffer 通过流量可以发现一些特征,一些异常。
但是有一点,我们不能拿 Sniffer 当防病毒软件用,那不是他的特长,同
时也太低沽 Sniffer 的功能了(同学们笑)
好我们在看看扫描是怎么一回事,大家看这个 trace file(范老师在演示,我就不写了)
先是 ARP 扫描,再端口扫描,接下来就是攻击了。
(编者:接着我们做了一个游戏,范老师让大家用 Sniffer 攻击他的机器,结果 1 台机器就把他的机器搞死了,这个就不细说了)
23
好,我们再看第四个 monitor 功能,ART,Application Response Time,应用响应时间。
应用响应时间是分析应用的一个很好工具,主要用来分析应用的性能。
ART 是指一个客户端发出一个请求,到服务器响应回来的时间差。
一般来说,应用响应的快慢,是应用性能的一个重要指标。
应用性能主要决定于几个因素:网络因素、服务器因素、客户端因素、应
用协议因素 。
我们先看看如何操作,再来看看应用这个功能。
我们打开 ART,大家看到 Http 的应用响应时间分析,这里有几个列, server
Address,Client Address.
他是怎么知道谁是 Server,谁是 Client?其实也就是看端口号和 IP 的对应
关系,比如如果一个数据包的目的 IP 是 1.1.1.1,目的端口是 80,Sniffer 就
会认为 1.1.1.1 就是 Http 服务器。对应的源 IP 就是 Client。
AvgRsp—平均响应时间
90%Rsp—90%响应时间,去掉头尾个 5%,其实我个人觉得去掉最大的 10%更
合理一些。
还有最大最小的响应时间,这些都是以毫秒为单位。
接着就是 TotalRsp,这个是响应次数,单位是次。
24接着是0到25 毫秒的响应有多少次,25 到 50 毫秒的响应有多少次。。等
等。
后面还有 server 发送子节数,client 发送子节数,timeout 次数等等,5
秒不响应则 Timeout。
我们再看看怎么增加其他应用,按属性,选择 display protocol,添加你关
心的协议,再确定,ART 会重新刷新(范老师在演示)
你看我这里就有了 telnet,Oracle。
(同学们:我们没有 Oracle)
我知道,其实平时我们更关心的是我们关键业务,所以我们要把我们关键
业务的端口添加进来,怎么添加?大家跟我来,选菜单上的“tool”->“option”
“protocol”,拉到下面,添加一种应用,比如 Oracle,端口 1521。
再在属性里把这个新协议选上,有了吗?(跑去解答问题去了)
好,大家都做出来了,我们平常分析关键业务就行了,有一点要说明,一
种业务可能有多个应用,也就是多个端口,需要同时分析。
有些同学喜欢把所有 well known 的协议添加到协议列表里,我在共享目录
上有两个注册表注入工具,大家只要运行以下就可以将这些常用端口都注入到协
议列表里,就不用一个一个敲了。其实我个人觉得不太必要,多了反而乱。
大家打开注册表,我们看一下协议列表,找到这两项:
HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates,Inc.\Sniffer\4.7\1CommonSettings\Protocols\IP Protocols\TCP
HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates,Inc.\Sniffer\4.7\1CommonSettings\Protocols\IP Protocols\UDP
这就是协议列表。注意不要有重复的,否则会报错。
25
(编者:这是范老师的板书)
应用响应时间是评估影响应用性能因素的一种很好的工具。我们看这样一
个例子。
比如通过 client 通过广域网连接到服务器。
我们同时在 AB 两点部署 Sniffer,分析某一业务的响应时间。
假设 Sniffer 在 A 点,他所看到的响应时间包括网络消耗时间和服务器处
理时间在 B 点的 Sniffer 看到的响应时间主要是服务器处理时间。这样我们比较
AB 两点的响应时间,来判断影响性能的主要因素是网络还是服务器。
假设 A 点的响应时间是 400 毫秒,B 点的响应时间是 100 毫秒,我们就知道
A 点的 400 毫秒中有 300 毫秒是消耗在网络上的,我们可以认为对于这个业务,性能的主要瓶颈在网络上,如果我们在深入分析是距离因素还是贷款因素,我们
就可以判断是否有改善空间。这个细节我们在第二门课讲。
如果 B 点的响应时间达到 250 毫秒,我们可以认为改善服务器的性能对于这个应
用来说会更明显一些。
如果我们 Sniffer 用多了。我们就可以做一个 AB 点的响应时间的基准线,假设正常情况下 A 点的响应时间是 400 毫秒,有一天你发现平均响应时间达到
600 毫秒,你就应该关注了,或许用户还没有抱怨,如果你这时分析应用性能下
降的原因,你就可以避免故障的产生,同时避免用户投诉。当然你也会有 B 点的
基准线,比较跟平时有何不同,很快就知道应该检查网络还是服务器。
对于 ART 还有什么不清楚地吗?或者大家平常还有其他用法?
26(编者:本来这次想写完第一天课程再共享,看到论坛中大家在催,就先
写到这吧,过几天就可以把第一天全部内容发完)
(编者:范老师已经找过我了,他说他的 MSN 有很多陌生人,后来看了内
容就知道是我写的,他说分享知识可以,但不要透露敏感信息,还说我比他讲得
好,汗。。。。所以这次我没有完全按他的录音翻译,自己有所删节,但基本上
是原汁原味。)
(编者:我发现写这个真的很累,因为有很多演示,很难写出来,最近很
忙,我都没有忘记我的承诺,给我加油,好吗?)
(编者:所有 PPT 都市我自己做的,范老师的 ppt 是不给我们的,我很努
力吧!)
27自已的一些看法
看完《范伟导老师 sniffer 课程资料》大家有什么想法,大家可以提出来
讨论,当然也可以跟身边有共同爱好朋友一起讨论,让大家讨论的目的就是让大
家有一个思想交流的过程,我不知道大家对这个是什么想法,我的想法就跟当初
学路由器,交换机和 TCPIP 一样,突然觉得搞网络的不懂这个东西就枉然了,跟路由器差不多,路由器,交换机是网络的的核心东西,你不搞懂这个你就白学
网络了,我想学 sniffer 也一样,你不懂 sniffer,你也枉然了,你想,在工作
中你不能很好的排除网络中存在的故障,不能很好的发现网络中存在的问题,不
能跟老板解释清楚故障所在,那么从根本上你就是不称职的,是吧,所以学习
sniffer 不但是对自已的一个提高,更是对自已的负责,我们搞技术的不能为了
几个工钱什么都干不了啊,呵,说的太严肃了点。
不知范老师的课程大家看了几次,呵,这篇稿子中的有些图是我自已添上
去的怕大家不明白,其中有些出入还请大家见谅。使用时有一个问题我不得不提
出来,在 windows2003 中运行 Dashboard 表可能会出现下面这个问题:
所以最好在 win2000 下运行,大家有时间去查查,我的学习时间快结束了,就来不及了,所以就此打住,有时间再向范老师请教。
我相信在上一篇范老师的课程记录中,大家应该明白了关于 sniffer 的一
些基本应用,当然其中说的网络技术人员的职业发展也应对大家有所启示才对,还希望大家能明白,不是很费力才对,网络这东西有的时候说需要自已去琢磨,单纯的靠理论知识也解决不了问题,因此建议大家在学习过程中自已的电脑上一
28定要安装上 sniffer 才好,不能凭空的在这听我说,那就没有意义了,也枉费我
花心思去整理这么一片东西,希望对大家有所帮助,要告诉大家的是我用的是
SnifferPro_4_70_530 这个版本的,当然现在也有更高版本的,大家可以在网上
找的到,但可能在安装时要注册所以请大家在安装前务必先准备一个能用的注册
码,好了,费话就不说了,先谈到这里,以后有什么内容再慢慢来。
在前面的那一稿中主要提到了几点,一是 sniffer 的作用,其中说到一点
就是检测病毒,当然这个病毒是指蠕虫病毒,因为这个病毒发作时会对网络产生
很大的影响,首先就是网络的数据流量会加大很多,这个就可以做为根据去判断
发生源,这对网管来说是一个很好的东西,能够发现问题嘛!当然还有很多作用
如:评估网络的性能,快速定位故障,排除潜在的威胁,排除来自内部的威胁。
就这些对网络管理都很有用啊,这就是工具给我们带来的方便啊,你自已说说,是这样不,对于网络管理来说,这些就是我们最基本的工作啊。你说一个东西能
帮我们解决这么多的问题那我们还找什么?
第二点就是基本介绍的了 sniffer 的一些基本功能及界面和一些使用,这方
便我们在这里会详细的介绍,如果大家不是很熟的话,我们也可以把安装过程给
大家讲解一下,这个我可以通过抓图的方式让大家很明白这个过程,当然在最后
我们还会通过一些实例来讲解它的使用及如果对一些常用的功能进行使用,不过
请大家不要拿来做别的事,那就脱离我写这些东西的本意了。再次重申一下,我
写这些东西都是为了让大家明白一个工具的使用及原理让大家在工作能更好的
完成自已的任务,因此请大家不要用来做为其它的用途。
第三点就是关于一些协议的东西,学习 sniffer 建议最好学过 CCNP,当然
你有网络基础也是一样的,这里就不多说了,在后面我们也会着重讲解这方面的
知识,所以希望大家不要着急,在 sniffer 中 TCPIP 协议是很重要的,因为在
使用过程中我们都要对 TCPIP 协议进行分析。
好了不多说了,说的再多还不如让大家自已动手,好吧,开始我们的学习
过程。
29NAI 的 Sniffer 系统
网络对你公司的作用愈来愈重要,同时随之而来的是你要为网络故障付出越
来越昂贵的代价。网络速度变慢和停机可以轻而易举使你损失数十万美元的收
入。为确保客户和合作伙伴的网络正常使用,在瓶颈造成故障之前,你应该应用
网络安全检测和解决的方案。
确保网络的稳定性
在电子商务时代,企业网络已经触及到你公司的每一个角落。在全球范围内,每时每地都有员工使用网络访问商业应用程序,每时每地都有客户登录网站进行
交易。为确保持续的网络性能,你需要拥有先进的监控和故障解决工具。Sniffer
作为减少网络故障的解决方案,这个先进的软件包提供的网络管理工具,可以帮
助你主动监控网络,在故障对使用者、客户和你公司的基础线路产生影响之前将
其解决。
Sniffer Technologies
适用于当今复杂的企业网络
Sniffer 能确保整个 LAN 和 WAN 拓扑网络的最高性能,从 10100 兆以太网
到最新的高速 ATM 和千兆位主干网-----贯穿所有企业和 Internet。
可以对整个网络的所有七层进行分析
Sniffer 软件可以对所有网络七层进行主动的监控和故障解决----从物理
层到应用层----所有这些功能都可以实时实现。
确保网络性能
30Sniffer Informant 软件将为你提供关于网络状况和性能的完整描述,从可
使用的带宽网络利用率到应用程序的效率。
可进行完整的网络监测
为使你的网络运行能够保持最高的效率,Sniffer Technologies 提供了一
整套的便携式及分布式软件工具,可以对网络性能进行监控、故障解决、报告和
主动管理。它是用于企业网络故障和性能管理的智能工具系列。
显然,没有两个网络具有相同的配置、用户基准、需求或设备。Sniffer 在
集成的软件包中提供全套主要组件,可以满足你对网络的精确要求。
Sniffer 便携式分析软件包
实时网络分析
如果要迅速检测和解决网络故障和性能问题,NAI 的便携式 Sniffer 的专家
分析功能可以找出网络、数据库和应用程序故障的根本原因。
Sniffer 的网络分析器可以运行于桌面、便携式和笔记本 PC,使用了 400
多种协议解释和强大的专家分析功能,可以对网络传输进行分析,找出故障和响
应缓慢的原因。它甚至可以对多拓扑、多协议网络进行分析---所有这些功能都
可以自动地实时实现。
部门网采用 Sniffer Basic,可以使用 Sniffer 的监控和解释分析功能。低
成本的实时监控和解释功能使得 Sniffer Basic 成为 MIS 人员的理想选择,他们
可以对小型企业、远程办公室和部门网进行支持。同时,Sniffer Basic 为一线
的 IS 人员提供了一个可以进行常规故障解决的强大工具。
Sniffer Pro LAN 和 Sniffer Pro WAN
它们适用于有完整的专家分析和 Sniffer 先进的协议解释功能要求的网络。
Sniffer Pro 对 LAN 和 WAN 网段上的网络传输的所有层进行监测,揭示性能问
题,分析反常情况,并推荐解决方案---所有这些功能都可以自动地实时实现。
Sniffer Pro High-Speed
它是用于优化最新的 ATM 及千兆位以太网性能和其可靠性的工具,Sniffer
的 SmartCapture 功能提供了对 LAN 仿真数据流和 IP 交换环境的监测。
31支持 ATM,它在企业网络中,针对每个 ATM OC-3 和 OC-12 高速链路,为你
提供了一个单独的解决方案。
支持 Gigabit,它是以全双工速度捕获,解决千兆位协同性问题的分析器。
其强大的处理功能可以提供对千兆位以太网的非对称监测。
Sniffer 分布式分析软件包
集成的专家分析和 RMON 监控软件包。
NAI的分布式Sniffer解决方案对应用程序传输和网络设备状态进行全天候
分析,可以使应用程序保持最高的运行效率。其中包括对部门网、校园网和主干
网的集中监控、设备级别报告和故障解决。
分布式 Sniffer 系统
从一个单独的管理控制台启动自动 RMON-适应网段监控和故障识别。
Sniffer 专家分析软件可以使你以最快的速度解决故障---即使有复杂的网络拓
扑、协议和应用程序。
企业故障和网络性能管理解决方案--Distributed Sniffer SystemRMON 可
以对整个网络中的主要网段(LAN、WAN、ATM 和千兆位以太网)提供网络监控、协议解释和专家分析功能。基于标准的监控和专家分析的强有力的结合使之成为
多拓扑结构和多协议网络的最优管理工具。
Network Informant Suite
对总体网络性能作出报告
NAI 强大的基于浏览器的网络信息解决方案可以帮助你识别趋势并管理服
务等级。这个企业报告解决方案采取了主动的方式进行网络管理。它通过网络自
动从设备中获取数据,然后编译成为网络性能的图形视图。基于浏览器的报告可
以提供总体概要分析和详细异常分析,帮助你管理服务级别,控制 WAN 线路占用,减少网络故障。
Network Informant 是用于企业网络性能报告、服务等级管理、WAN 线路占
用控制和企业诊断的首要的高级解决方案。灵活的基于浏览器的解决方案包括标
准的和任选的报告,可以进行配置以满足你公司的特殊需求。Network Informant
32还可以允许你使用 Crystal Reports 创建自定义报告,即业界公认的关系数据库
报告系统。
RouterPM 也是 Network Informant 软件包中的一个集成部分,为你提供了
进行企业 WAN 和 LAN 连续性能分析的的工具。它具有预处理和异常报告功能,使你可以预先发现问题并避免故障。
Sniffer Predictor
当网络需要进行升级时,Sniffer Predictor 将进行预报,确保资源适当以
保持运行通畅。
Sniffer Predictor 是一个基于工具的解决方案,它可以在几秒内预测变化
将对网络性能产生何种影响。适用于 Sniffer 便携式分析软件包和 Sniffer
分布式分析软件包。Sniffer Predictor 将供给企业网络管理员和计划者日
常使用,他们需要的整个网络及时的性能及计划数据。
这里对 NAI 的 Sniffer pro 进行介绍了。让大家大至上了解一下,在后面
的章节里我们主要对 Sniffer pro 进行介绍。
33嗅探的基本原理
一 前言
SNIFF 真是一个古老的话题,关于在网络上采用 SNIFF 来获取敏感信息已经
不是什么新鲜事,也不乏很多成功的案例,那么,SNIFF 究竟是什么呢?SNIFF
就是嗅探器,就是窃听器,SNIFF 静悄悄的工作在网络的底层,把你的秘密全部
记录下来。看过威尔史密斯演的《全民公敌》吗?SNIFF 就象里面精巧的窃听器
一样,让你防不胜防。
SNIFF 可以是软件,也可以是硬件,既然是软件那就要分平台,有 WINDOWS
下的、UNXI 下的等,硬件的 SNIFF 称为网络分析仪,反正不管硬件软件,目标
只有一个,就是获取在网络上传输的各种信息。本文仅仅介绍软件的 SNIFF。
当你舒适的坐在家里,惬意的享受网络给你带来的便利,收取你的 EMAIL,购买你喜欢的物品的时候,你是否会想到你的朋友给你的信件,你的信用卡帐号
变成了一个又一个的信息包在网络上不停的传送着,你是否曾经这些信息包会通
过网络流入别人的机器呢?你的担忧不是没有道理的,因为 SNIFF 可以让你的担
忧变成实实在在的危险。就好象一个人躲在你身后偷看一样………
二 网络基础知识
“网络基础知识”,是不是听起来有点跑题了?虽然听起来这和我们要谈的
SNIFF 没什么关系,可是还是要说一说的,万丈高楼平地起,如果连地基都没打
好,怎么盖楼?!如果你对网络还不是十分清楚的话,最好能静下心来好好看看,要知道,这是基础的基础,在这里我只是简单的说一下,免得到时候有人迷糊,详细的最好能够自己去找书看看。
(1) TCPIP 体系结构
开放系统互连(OSI)模型将网络划分为七层模型,分别用以在各层上实现
不同的功能,这七层分别为:应用层、表示层、会话层、传输层、网络层、数据
链路层及物理层。而 TCPIP 体系也同样遵循这七层标准,只不过在某些 OSI 功
能上进行了压缩,将表示层及会话层合并入应用层中,所以实际上我们打交道的
TCPIP 仅仅有 5 层而已,网络上的分层结构决定了在各层上的协议分布及功能
实现,从而决定了各层上网络设备的使用。实际上很多成功的系统都是基于 OSI
模型的,如:如帧中继、ATM、ISDN 等。
34 TCPIP 的网络体系结构(部分)
从上面的图中我们可以看出,第一层物理层和第二层数据链路层是 TCPIP
的基础,而 TCPIP 本身并不十分关心低层,因为处在数据链路层的网络设备驱
动程序将上层的协议和实际的物理接口隔离开来。网络设备驱动程序位于介质访
问子层(MAC)
(2) 网络上的设备
中继器:中继器的主要功能是终结一个网段的信号并在另一个网段再生该信
号,一句话,就是简单的放大而已,工作在物理层上。
网 桥:网桥使用 MAC 物理地址实现中继功能,可以用来分隔网段或连接部
分异种网络,工作在数据链路层。
路由器:路由器使用网络层地址(IP,X.121,E.164 等),主要负责数据包的
路由寻径,也能处理物理层和数据链路层上的工作。
网 关:主要工作在网络第四层以上,主要实现收敛功能及协议转换,不过
很多时候网关都被用来描述任何网络互连设备。
(3)TCPIP 与以太网
以太网和 TCPIP 可以说是相互相成的,可以说两者的关系几乎是密不可分,以太网在一二层提供物理上的连线,而 TCPIP 工作在上层,使用 32 位的 IP 地
址,以太网则使用 48 位的 MAC 地址,两者间使用 ARP 和 RARP 协议进行相互转换。
从我们上面 TCPIP 的模型图中可以清楚的看到两者的关系。
载波监听冲突检测(CSMACD)技术被普遍的使用在以太网中,所谓载波监听
是指在以太网中的每个站点都具有同等的权利,在传输自己的数据时,首先监听
信道是否空闲,如果空闲,就传输自己的数据,如果信道被占用,就等待信道空
闲。而冲突检测则是为了防止发生两个站点同时监测到网络没有被使用时而产生
冲突。以太网采用广播机制,所有与网络连接的工作站都可以看到网络上传递的
35数据。
为了加深你的理解,我们来看看下面的图,一个典型的在以太网中客户与服
务器使用 TCPIP 协议的通信
以太网
唆唆了这么多,有人烦了吧?相信我,这是基础的基础,可以说是说得是很
简单拉,如果需要,拿出个几十万字来说上面的内容,我想也不嫌多,好了,让
我们进入下一节,sniff 的原理。
三 SNIFF 的原理
要知道在以太网中,所有的通讯都是广播的,也就是说通常在同一个网段
的所有网络接口都可以访问在物理媒体上传输的所有数据,而每一个网络接口都
有一个唯一的硬件地址,这个硬件地址也就是网卡的 MAC 地址,大多数系统使用
48 比特的地址,这个地址用来表示网络中的每一个设备,一般来说每一块网卡
上的 MAC 地址都是不同的,每个网卡厂家得到一段地址,然后用这段地址分配给
其生产的每个网卡一个地址。在硬件地址和 IP 地址间使用 ARP 和 RARP 协议进行
相互转换。
在正常的情况下,一个网络接口应该只响应这样的两种数据帧:
1.与自己硬件地址相匹配的数据帧。
2.发向所有机器的广播数据帧。
在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来
的数据,网卡内的单片程序接收数据帧的目的 MAC 地址,根据计算机上的网卡驱
动程序设置的接收模式判断该不该接收,认为该接收就接收后产生中断信号通知
CPU,认为不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根
本就不知道。CPU 得到中断信号产生中断,操作系统就根据网卡的驱动程序设置
的网卡中断程序地址调用驱动程序接收数据,驱动程序接收数据后放入信号堆栈
36让操作系统处理。而对于网卡来说一般有四种接收模式:
广播方式:该模式下的网卡能够接收网络中的广播信息。
组播方式:设置在该模式下的网卡能够接收组播数据。
直接方式:在这种模式下,只有目的网卡才能接收该数据。
混杂模式:在这种模式下的网卡能够接收一切通过它的数据,而不管该数据
是否是传给它的。
好了,现在我们总结一下,首先,我们知道了在以太网中是基于广播方式传
送数据的,也就是说,所有的物理信号都要经过我的机器,再次,网卡可以置于
一种模式叫混杂模式(promiscuous),在这种模式下工作的网卡能够接收到一切
通过它的数据,而不管实际上数据的目的地址是不是他。这实际上就是我们
SNIFF 工作的基本原理:让网卡接收一切他所能接收的数据。
(图一)
我们来看一个简单的例子,如图一所示,机器 A、B、C 与集线器 HUB 相连
接,集线器 HUB 通过路由器 Router 访问外部网络。这是一个很简单也很常见的
情况,比如说在公司大楼里,我所在的网络部办公室里的几台机器通过集线器连
接,而网络部、开发部、市场部也是同样如此,几个部门的集线器通过路由器连
接。还是回到我们的图一上来,值得注意的一点是机器 A、B、C 使用一个普通的
HUB 连接的,不是用 SWITCH,也不是用 ROUTER,使用 SWITCH 和 ROUTER 的情况
要比这复杂得多。
我们假设一下机器 A 上的管理员为了维护机器 C,使用了一个 FTP 命令向
37机器 C 进行远程登陆,那么在这个用 HUB 连接的网络里数据走向过程是这样的。
首先机器 A 上的管理员输入的登陆机器 C 的 FTP 口令经过应用层 FTP 协议、传输
层 TCP 协议、网络层 IP 协议、数据链路层上的以太网驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了 HUB 上,现在由 HUB
向每一个接点广播由机器 A 发出的数据帧,机器 B 接收到由 HUB 广播发出的数据
帧,并检查在数据帧中的地址是否和自己的地址相匹配,发现不是发向自己的后
把这数据帧丢弃,不予理睬。而机器 C 也接收到了数据帧,并在比较之后发现是
发现自己的,接下来他就对这数据帧进行分析处理。
在上面这个简单的例子中,机器 B 上的管理员如果很好奇,他很想知道究
竟登陆机器 C 上 FTP 口令是什么?那么他要做的很简单,仅仅需要把自己机器上
的网卡置于混杂模式,并对接收到的数据帧进行分析,从而找到包含在数据帧中
的口令信息。
四 做一个自己的 sniff
在上一节里,我们已经知道了 SNIFF 的基本原理是怎么一回事,这一节我
们来亲自动手做一个自己的 sniff,毕竟,用程序代码来说话比什么都要来得真
实,也容易加深理解。
回头想一想我们上面说的原理,我们要做的事情有几件:
1. 把网卡置于混杂模式。
2. 捕获数据包。
3.分析数据包。
注:下面的源代码取至 Chad Renfro 的<< Basic
Packet-SnifferConstruction from the Ground Up>>一文中 (在这里不是让大
家学习编程,而是让大家明白这个原理)。
Tcp_sniff_2.c
1.include
2.include
3.include
4.include
5.include
38 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, intsock);
12.int main {
13.int sock, bytes_recieved, fromlen;
14.char buffer[65535];
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, sizeofbuffer, 0, (struct
sockaddr )from, 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_protocol);
31. tcp = (struct tcp )(buffer +(4ip->ip_length));
39 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 created 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 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 ) {
Could not set the flags on the interface
56. perror(Could not set the PROMISC flag:);
57. exit(0);
40 58. }
59. printf(Setting interface ::: %s ::: to promisc,interface);
60. return(0);
61. }
EOF
上面这段程序中有很详细的注解,不过我想还是有必要说一说,首先第 10
行--intOpen_Raw_Socket(void); 是我们的自定义函数,具体内容如下:
37.int Open_Raw_Socket {
38. int 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)) < 0) { 这
里我们调用了 socket 函数,使创建了了一个原始套接口,使之收到 TCPIP 信息
包。
接下来第 11 行-int Set_Promisc(char interface, intsock),这也是我
们的自定义函数,目的是把网卡置于混杂模式,具体内容如下:
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 retrieve flags for the interface
49. perror(Could not retrive flags for the interface);
50. exit(0);
51. }
41 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 ) {
Could 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. }
首先 struct ifreq ifr; 定一了一个 ifrreg 的结构 ifr,接下来
strncpy(ifr.ifr_name,interface,strnlen(interface)+1);,就是把我们网络
设备的名字填充到 ifr 结构中,在这里define INTERFACE eth0 ,让我们再
往下看,ioctl(sock, SIOCGIFFLAGS,ifr),SIOCGIFFLAGS 请求表示需要获取接
口标志,现在到了第 54 行,在我们成功的获取接口标志后把他设置成混杂模式,ifr.ifr_flags|= IFF_PROMISC;ioctl (sock, SIOCSIFFLAGS,ifr)。OK,现在
我们所说的第一步已经完成--------把网卡置于混杂模式。
现在进入第二步,捕获数据包。从第 20 行开始,我们进入了一个死循环,while(1),在第 24 行,recvfrom(sock,buffer, sizeof buffer, 0, (struct
sockaddr )from,fromlen),这个函数要做的就是接收数据,冰把接收到的数
据放入 buffer 中。就是这么简单,已经完成了我们要捕获数据包的任务。
到了第三步,分析数据包。27 行,ip = (struct ip)buffer,使我们在头
文件中的 IP 结构对应于所接收到的数据,接下来判断在网络层中是否使用的是
TCP 协议,if(ip->ip_protocol== 6) ,如果答案是,tcp 信息包从整个 IPTCP
包 buffer +(4ip->ip_length) 地址处开始,所以 31 行 tcp = (struct
tcp)(buffer +(4ip->ip_length)),然后对应结构把你所需要的信息输出。
headers.h
structure of an ip header
42 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 ip_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_ackno;
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;
43 unsigned short tcp_urgent;
};
EOF
从上面的分析我们可以清楚的认识到,认识一个 SNIFF 需要对 TCPIP 协议
有着详细的了解,否则你根本无法找到你需要的信息。有了上面的基础,你可以
自己来做一个你需要的 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等平台上,由LawrenceBerkeley
Laboratory 实验室开发的一个免费的网络监听软件。最近 Sniffit0.3.7 也推出
了 NT 版本,并也支持 WINDOWS2000.
使用方法:
-v 显示版本信息
-a 以 ASCII 形式将监听的结果输出。
-A 在进行记录时,所有不可打印的字符都用代替
-b 等同于同时使用参数-t -s。
44 -d 将监听所得内容以十六进制方式显示在当前终端
-p 记录连接到的包,0 为所有端口。缺省为 0。
-P protocol 选择要检查的协议,缺省为 TCP。可能的选择有 IP、TCP、ICMP、UDP 和他们的组合。
-s 指定 sniffer 检查从 发送的数据包。 -t 指定 sniffer 检查发送到的
数据包。
-i 进入交互模式
-l 设定数据包大小,default 是 300 字节
注:参数可以用@来表示一个 IP 范围,比如 -t 192.168.@ -t 和-s 只适用
于 TCPUDP 数据包,对于 ICMP 和 IP 也进行解释。但如果只选择了-p 参数,则
只用于 TCP 和 UDP 包。
举例说明:
sniffit -a -p 21 -t xxx.xxx.xxx.xxx
监听流向机器 xxx.xxx.xxx.xxx 的 21 端口(FTP)的信息,并以 ASCII 显示
sniffit -d -p 23 -b xxx.xxx.xxx.xxx
监听所有流出或流入机器 xxx.xxx.xxx.xxx 的 23 端口(telnet)的信息,并
以 16 进制显示你可以在这里找到
sniffithttp:reptile.rug.ac.be~codersniffitsniffit.html
2. snoop
snoop 默认情况安装在 Solaris 下,是一个用于显示网络交通的程序,不过
SNIFF 是把双刃剑,既然管理员能用他来监视自己的网络,当然一个心怀恶意的
入侵者也可以用他来 SNIFF 自己感兴趣的内容。值得一提的是,SNOOP 被发现存
在一个缓冲区溢出漏洞,当以导致入侵者以运行 snoop(通常为 root)的身份远程
进入系统。这是题外话,暂且就此打住。
使用方法:
[ -a ] Listen to packets on audio
[ -d device ] settable to le?, ie?, bf?, tr?
[ -s snaplen ] Truncate packets
[ -c count ] Quit after count packets
45 [ -P ] Turn OFF promiscuous mode
[ -D ] Report dropped packets
[ -S ] Report packet size
[ -i file ] Read previously captured packets
[ -o file ] Capture packets in file
[ -n file ] Load addr-to-name table from file
[ -N ] Create addr-to-name table
[ -t r|a|d ] Time: Relative, Absolute or Delta
[ -v ] Verbose packet display
[ -V ] Show all summary lines
[ -p first[,last] ] Select packet(s) to display
[ -x offset[,length] ] Hex dump from offset for length
[ -C ] Print packet filter code
例如:
snoop -o saved A B
监听机器A与B 的谈话,并把内容存储于文件 saved 中
3. tcpdump
tcpdmp 也算是一个很有名气的网络监听软件,FREEBSD 还把他附带在了系
统上,是一个被很多 UNIX 高手认为是一个专业的网络管理工具。
使用方法:
tcpdump 采用命令行方式,它的命令格式为:
tcpdump [ -adeflnNOpqStvx ][ -c 数量 ][ -F 文件名 ][ -i 网络接
口 ][ -r 文件名][ -s snaplen ][ -T 类型 ][ -w 文件名 ][表达式]
1. tcpdump 的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以 c 语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
46 -f 将外部的 Internet 地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在 ip 包中可以包括 ttl 和服务类
型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump 就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w 选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有 rpc
和 snmp
2. tcpdump 的表达式介绍
表达式是一个正则表达式,tcpdump 利用它作为过滤报文的条件,如果一
个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则
网络上所有的信息包将会被截获。
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要
包括 host,net,port,例如 host 210.27.48.2,指明 210.27.48.2 是一台主机,net 202.0.0.0 指明 202.0.0.0 是一个网络地址,port 23 指明端口号是 23。如
果没有指定类型,缺省的类型是 host.
第二种是确定传输方向的关键字,主要包括 src , dst ,dst or src, dstand
src ,这些关键字指明了 传输的方向。举例说明,src 210.27.48.2,指明 ip 包
中源地址是 210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是
202.0.0.0 。如果没有指明方向关键字,则缺省是 src ordst 关键字。
第三种是协议的关键字,主要包括 fddi,ip,arp,rarp,tcp,udp 等类型。
Fddi 指明是在 FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它
是ether的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi
47协议包当作 ether 的包进行处理和分析。其他的几个关键字就是指明了监听的包
的协议内容。如果没有指定任何协议,则 tcpdump 将会监听所有协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:
gateway,broadcast,less,greater,还有三种 逻辑运算,取非运算是 'not ' '!
',与运算是'and','';或运算 是'or' ,'||'。
举例使用:
tcpdump host AAA.BBB.CCC.DDD
将监听 IP 地址为 AAA.BBB.CCC.DDD 的机器的通话
tcpdump tcp port 23 host AAA.BBB.CCC.DDD
将监听 IP 地址为 AAA.BBB.CCC.DDD 的机器的 23 端口的通话
4. dsniff
之所以要谈谈 dsniff,是因为他不仅仅是一个 sniff,在他的整个套件包
中,包含了很多其它有用的工具,如 arpspoof,dnsspoof,macof,tcpkill 等
等,SNIFF 的手段更加的多样和复杂化。dsniff 是由 DugSong 开发的你可以在他
的主页上找到这个工具。 目前 dsniff 支持 OpenBSD (i386),Redhat Linux
(i386), 和 Solaris (sparc). 并且在 FreeBSD, DebianLinux, Slackware Linux,AIX,和 HP-UX 上也能运转得很好。但是 dsniff 需要几个其他的第三方软件进行
支持,他们分别是,BerkeleyDB ,OpenSSL, libpcap, libnet,libnids。如
果条件允许的话,你最好能够亲自读一读 dsniff 的源代码,你可以在
http:naughty.monkey.org~dugsong 找到 dsniff。
六 深入 sniff
单纯的 sniff 的功能始终是局限的,所以在大多数的情况下,sniff 往往
和其他手段结合起来使用,sniff 和 spoof 已及其他技术手段结合在一起对网络
构成的危害是巨大的。单纯的 sniff 好比缺了一只腿,无法发挥大的作用,例如
在 sniff 原理一节中我们讨论的例子里,我一再的强调我们使用的是一个普通的
HUB 进行连接是有原因的,如果我们把在图一中的 HUB 用一个 switch 代替,那
情况就要复杂一些了,如图二所示:
48
图(二)
在图二中,我们的机器 A、B、C 与 Switch 相连接,而 Switch 通过路由器
Router 访问外部网络。我们先来了解 Switch 的工作原理:
在我们图一中的 HUB 只是简单地把所接收到的信号通过所有端口(除了信
号来的那个口)重复发送出去不同,而图二中的 Switch 却可以检查每一个收到
的数据包,并对数据包进行相应的处理。在 Switch 内保存着每一个网段上所有
节点的物理地址,只允许必要的网络流量通过 Switch。举例来说,当 Switch 接
收到一个数据包之后,根据自身保存的网络地址表检查数据包内包含的发送和接
收方地址。如果接收方位于发送方网段,该数据包就会被 Switch 丢弃,不能通
过交换机传送到其它的网段;如果接收方和发送方位于两个不同的网段,该数据
包就会被 Switch 转发到目标网段。这样,通过交换机的过滤和转发,可以有效
避免网络广播风暴,减少误包和错包的出现。顺便说一句,现在 Switch 和 HUB
的价格相去无几,所以 hub 正逐渐被网络交换机取代。
现在回到我们的例子中来,在图二中仍然和图一一样,我们假设机器 A 上
的管理员为了维护机器 C,使用了一个 FTP 命令向机器 C 进行远程登陆,那么在
这里,数据是这样走的:首先机器 A 上的管理员输入的登陆机器 C 的 FTP 口令经
过应用层 FTP 协议、传输层 TCP 协议、网络层 IP 协议、数据链路层上的以太网
驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送
到了 Switch 上,而 Switch 检查数据帧中的目的地址,并在他自身保存的网络地
址表中知道了他应该把这数据帧发到机器 C 那里,于是,接下来机器 C 接收到了
从 A 发来的信息,发现他是发给自己的信息,于是进行分析处理。
49OK,现在我们机器 B 上的管理员的好奇心只能深深的埋藏在心里了,因为
数据包根本就没有经过他,就算他把自己的网卡设置成混杂模式也是有力无处
使。
在了解在一个 Switch 环境下原理后,我们结合一些手段去设法 sniff,是
的,我们可以做到这一点,有许多的手段可以让管理员 B 满足他的好奇心,在下
面我会提出几个办法,当然只是其中的一些办法而已。
1 ARP Spoof
在基于 IP 通信的内部网中,我们可以使用 ARP Spoof 的手段,了解什么
是 ARPSpoof 的前提你先要明白一下什么是 ARP 和 RARP 协议,什么是 MAC 地址,什么又是 IP 地址。ARP 协议是地址转换协议,RARP 被称为反向地址转换协议,他们负责把 IP 地址和 MAC 地址进行相互转换对应。
ARP Spoof 攻击的根本原理是因为计算机中维护着一个 ARP 高速缓存,并
且这个ARP高速缓存是随着计算机不断的发出ARP请求和收到ARP响应而不断的
更新的,ARP 高速缓存的目的是把机器的 IP 地址和 MAC 地址相互映射。你可以
使用 arp 命令来查看你自己的 ARP 高速缓存。现在设想一下,一个 Switch 工作
在数据链路层,他根据 MAC 地址来转发他所接收的数据包,而计算器维护的 ARP
高速缓存却是动态的......你想到什么了吗?
为了加深理解,现在给我们的机器编上号(如上图),机器 A:IP 地址为
10.0.0.1,MAC 地址为 20-53-52-43-00-01 ,机器 B:IP 地址为 10.0.0.2 ,MAC
50地址为 20-53-52-43-00-02,机器 C:IP 地址为 10.0.0.3 ,MAC 地址为
20-53-52-43-00-03 。现在机器 B 上的管理员是个聪明的家伙,他向机器 A 发出
一个 ARP Reply(协议没有规定一定要等 ARP Request 出现才 能发送 ARPReply,也没有规定一定要发送过 ARP Request 才能接收 ARPReply),其中的目的 IP 地
址为10.0.0.1,目的MAC地址为20-53-52-43-00-01 ,而源IP地址为10.0.0.3,源 MAC 地址为 20-53-52-43-00-02 ,好了,现在机器 A 更新了他的 ARP 高速缓
存,并相信了 IP 地址为 10.0.0.3 的机器的 MAC 地址是 20-53-52-43-00-02 。
当机器 A 上的管理员发出一条 FTP 命令时---ftp 10.0.0.3,数据包被送到了
Switch,Switch 查看数据包中的目的地址,发现 MAC 为 20-53-52-43-00-02,于
是,他把数据包发到了机器 B 上。再设想一下,如果不想影响A和C之间的通信
该怎么办?你可以同时欺骗他们双方,来一个 man-in-middle 。
当然,在实际的操作中你还需要考虑到一些其他的事,比如某些操作系统
在会主动的发送 ARP 请求包来更新相应的 ARP 入口等。
2. MAC Flooding
在上面我们曾经提到过,Switch 之所以能够由数据包中目的 MAC 地址判断
出他应该把数据包发送到那一个端口上是根据他本身维护的一张地址表。这张地
址表可能是动态的也可能是静态的, 这要看Switch的厂商和Switch的型号来定,对于某些 Switch 来说,他维护的是一张动态的地址表,并且地址表的大小是有
上限的,比如 3comSuperstack Switch 3300 (3c16981 Hardware v.1
Softwarev.2.10) 就是这样一种 Switch,我们可以通过发送大量错误的地址
信息而使 SWITCH 维护的地址表“溢出”,从而使他变成广播模式来达到我们要
sniff 机器 A 与机器 C 之间的通信的目的。
3. Fake the MAC address
伪造 MAC 地址也是一个常用的办法,不过这要基于你网络内的 Switch 是
动态更新其地址表,这实际上和我们上面说到的 ARP Spoof 有些类似,只不过现
在你是想要 Switch 相信你,而不是要机器 A 相信你。因为 Switch 是动态更新其
地址表的,你要做的事情就是告诉 Switch:HI,我是机器 C。换成技术上的问题
你只不过需要向 Switch 发送伪造过的数据包,其中源 MAC 地址对应的是机器 C
的 MAC 地址,现在 Switch 就把机器 C 和你的端口对应起来了。不过其中存在一
51个问题,现在机器 C 也会说了:HI,Switch 老大,我才是机器 C 呢! ,现在你该
怎么办?切,还用问!让他说不了话就可以了,DOS 还是其他什么,随便你
了......
4. ICMP Router Advertisements
这主要是由 ICMP 路由器发现协议(IRDP)的缺陷引起的,在 Windows95、98、2000 及 SunOS、Solaris2.6 等系统中,都使用了 IRDP 协议,SunOS 系统只在某
些特定的情况下使用该协议,而 Windows95,Windows95b, Windows98,Windows98se, 和 Windows2000 都是默认的使用 IRDP 协议。IRDP 协议的主要内
容就是告诉人们谁是路由器,设想一下,一个 HACK 利用 IRDP 宣称自己是路由器
的情况会有多么的糟糕!所有相信 HACK 的请求的机器把他们所有的数据都发送
给 HACK 所控制的机器.........
5. ICMP Redirect
所谓 ICMP 重定向,就是指告诉机器向另一个不同的路由发送他的数据包,ICMP 重定向通常使用在这样的场合下,假设A与B 两台机器分别位于同一个物
理网段内的两个逻辑子网内,而A和B都不知道这一点,只有路由器知道,当 A
发送给 B 的数据到达路由器的时候,路由器会向 A 送一个 ICMP 重定向包裹,告
诉 A:HI,别再送数据给我转交了,你就直接送到 B 那里就可以了。设想一下,一个 hack 完全可以利用这一点,使得 A 发送给 B 的数据经过他。
上面提到的这些方法只不是其中的一些,为了配合 sniff 能够工作得更有
效率,还有其他许多的办法,其实 sniff 的目的说穿了只有一个,就是抓包,从
抓包这个概念上引伸下去,所有为了能够抓到网络上的信息包而采用的技术都可
以归入 sniff,单纯的 sniff 是没有什么效率的。你还能想到什么吗?进攻路由
器,在路由器上放置 sniff......,在系统内核中植入 sniff......等等。
七 如何防止 SNIFF
防止 sniff 最有效的手段就是进行合理的网络分段,并在网络中使用交换
机和网桥,在理想的情况下使每一台机器都拥有自己的网络段,当然这会使你的
网络建设费用增加很多,所以你可以尽量使相互信任的机器属于同一个网段,使
他们互相之间不必担心 sniff 的存在。并在网段于网段间进行硬件屏障。你也可
以使用加密技术对你在网络中传送的敏感数据如户 ID 或口令,你的银行帐号,52商业机密等进行加密,你可以选用SSH等加密手段。为了防止 ARP 欺骗,你可
以使用永久的ARP缓存条目,反正上面的攻击手段和原理你也看了,你就反过
来想想该怎么办好了。不过有盾必有矛,平时的安全意识才是最重要的。
(注:以下关于 AntiSniff 的介绍取至 backend 翻译整理的 L0pht
AntiSniff 技术文档一文)
当你做做层层保护后,你还是怀疑自己的网络上存在 sniff 该怎么办?
L0pht 小组为了探测 sniff 专门发布了一个软件 AntiSniff,当然这个软件不
是免费的: ),AntiSniff 工具用于检测局域网中是否有机器处于混杂模式,AntiSniff Version1.x 被设计为运行在以太网的 Windows 系统中,提供了简单
易用的图形用户界面,AntiSniffVersion1.x 主要工作在非交换环境下的本地
网段中,如果运行在交换环境下其功能将大打折扣。AntiSniffVer 2.0 将不但
能在本地网段中,而且能够穿过路由器和交换机进行工作。
◆ 操作系统类特殊测试
Linux 内核测试
旧版本的 Linux 内核存在一个奇怪的特性,可被用于确定机器是否处于混
杂模式。在正常情形下,网卡会过滤和丢弃那些目标地址不是本机 MAC 地址或以
太网广播地址的数据包。如果数据包的目标地址为本机以太网地址或广播地址,将传送给内核进行处理,因为其认为该以太网数据帧包含了本机的正确 IP 地址
或该网络广播地址。如果网卡处于混杂模式,则每个数据包都会传递给操作系统
进行分析或处理。许多版本的 Linux 内核只检查数据包中的 IP 地址以确定是否
存放到 IP 堆栈中进行处理。为了利用这一点,AntiSniff 构造一个无效以太网
地址而IP地址有效的数据包。对于使用了这些内核版本和处于混杂模式的Linux
系统,由于只检查到 IP 地址有效而将其接收并存放到相应堆栈中。通过在这个
伪造的以太网数据帧中构造一个 ICMPECHO 请求,这些系统会返回响应包(如果处
于混杂模式)或忽略(如果不处于混杂模式),从而暴露其工作模式。当伪造的以
太网数据帧中的 IP 地址设置为网络广播地址时这个测试非常有效。AntiSniff
的使用者可以修改伪造的以太网址,缺省值为 66:66:66:66:66:66。
NetBSD
许多 NetBSD 内核具有与上述 Linux 内核相同的特性,不过伪造以太网数据
53帧中的 IP 地址必须设为广播地址。
Windows 9598NT
根据对网络驱动程序头文件的了解,可以知道当处于混杂模式时,Microsoft 的操作系统会确切地检查每个包的以太网地址。如果与网卡的以太网
地址匹配,将作为目标 IP 地址为本机的数据包存放到相应堆栈中处理。可以被
利用的一点是系统对以太网广播包的分析。在正常情形下,例如机器工作在非混
杂模式下,网卡只向系统内核传输那些目标以太网址与其匹配或为以太网广播地
址(ff:ff:ff:ff:ff:ff)的数据包。如果机器处于混杂模式下,网络驱动程序仍
然会检查每个数据包的以太网地址,但检查是否为广播包时却只检查头 8 位地址
是否为 0xff。因此,为了使处于混杂模式的系统返回响应信息,AntiSniff 构造
以太网地址为 ff:00:00:00:00:00 且含有正确目标 IP 地址的数据包,当
Microsoft 的操作系统接收到这个数据包时,将根据网络驱动程序检查到的细微
差别而返回响应包(如果处于混杂模式)或丢弃这个数据包(如果处于非混杂模
式)。
需要注意的是,这个检查与使用的网络驱动程序有关。Microsoft 缺省的网
络驱动程序具有以上特性,大多数的厂商为了保持兼容性也继承了这些特性。不
过有些网卡会在其硬件层中检查以太网地址的头 8 位,所以可能会无论系统真正
的状态是什么都总是返回正值。关于这类网卡和驱动程序请访问 AntiSniff
Ver1.x 的 web 网站。
◆ DNS 测试
进行DNS测试的原因是许多攻击者使用的网络数据收集工具都对IP地址进
行反向 DNS 解析,因为他们希望根据域名寻找更有价值的主机。例如
joepc1.foo.bar 对攻击者的吸引力往往不如 payroll.foo.bar 这种商业域名。
此时这些工具就由被动型网络工具变为主动型网络工具了。而不监听网络通讯的
机器不会试图反向解析数据包中的 IP 地址。为了利用这一点,AntiSniff Ver1.x
使自身处于混杂模式下,向网络发送虚假目标 IP 地址的数据包,然后监听是否
有机器发送该虚假目标 IP 地址的反向 DNS 查询。伪造数据包的以太网地址、检
查目标、虚假目标 IP 地址可由用户定制。
◆ 网络和主机响应时间测试
54 这种测试已被证明是最有效的。它能够发现网络中处于混杂模式的机器,而
不管其操作系统是什么。警告,这个测试会在很短的时间内产生巨大的网络通讯
流量。进行这种测试的理由是不处于混杂模式的网卡提供了一定的硬件底层过滤
机制。也就是说,目标地址非本地(广播地址除外)的数据包将被网卡的固件丢弃。
在这种情况下,骤然增加、但目标地址不是本地的网络通讯流量对操作系统的影
响只会很小。而处于混杂模式下的机器则缺乏此类底层的过滤,骤然增加、但目
标地址不是本地的网络通讯流量会对该机器造成较明显的影响(不同的操作系统
内核用户方式会有不同)。这些变化可以通过网络通讯流量工具监视到。
根据以上要点,AntiSniff Ver 1.x 首先利用 ICMPECHO 请求及响应计算出
需要检测机器的响应时间基准和平均值。在得到这个数据后,立刻向本地网络发
送大量的伪造数据包。与此同时再次发送测试数据包以确定平均响应时间的变化
值。非混杂模式的机器的响应时间变化量会很小,而混杂模式的机器的响应时间
变化量则通常会有 1-4 个数量级。为了对付攻击者和入侵者们最常用的多种工
具,AntiSniff 进行了三种网络饱和度测试:SIXTYSIX、TCPSYN 和 THREEWAY。
SIXTYSIX 测试构造的数据包数据全为 0x66。这些数据包不会被非混杂模
式的机器接收,同时方便使用常见的网络监听分析工具(如 tcpdump 和 snoop
等)记录和捕获。
TCPSYN 测试构造的数据包包含有效的 TCP 头和 IP 头,同时 TCP 标志域的
SYN 位被设置。
THREEWAY 测试采取的原理基本上与 TCPSYN 一样,但更复杂些。在这种测
试中两个实际不存在的机器间多次建立完整的 TCP 三方握手通讯。它能够更好地
欺骗那些骇客工具。
AntiSniff Ver 1.x 中能够通过以上三种数据包测试发现正处于混杂模式机
器的测试方法最好周期性地进行和与以前的数据比较。响应时间测试第一次运行
的数据还能够用于分析一个大型网络在 flooding 和非 flooding 状态时的性能,并帮助工程师调整网络性能。一旦确信本地网络已运行在正常(没有未经允许而
处于混杂模式的机器)状态,就应该设置 AntiSniff 工具周期性运行。只要发现
某台机器性能(响应时间)发生数量级的变化,一般就能确定其正处于混杂模式。
这种方法不需比较两台独立系统间的性能数据,而只需比较同一台机器不同时候
55的数据就能确定该机器是否处于混杂模式。
八 结尾
本文旨在向你描述 sniff 的基本原理,为的是要使你不仅仅能够了解什么
是 sniff 而已,而是要明白 sniff 运转的根本原理,文章参考了大量的资料,牵
涉到直接引用的已经注明出处和作者,非常的感谢他们。在此还要感谢
W.Richhard.Stevens,虽然其人已逝,但留下的 TCPIP 三卷本真是造福了大家,文章的很多地方也是拜他老人家指点迷经才得以感悟。最后还要感谢雀巢咖啡,让我得以熬夜把这篇文章写完,呵呵,谢谢大家。
说了这么多不知大家明白了没有,嗅探的基本原理,其中还涉及到了反嗅
探的一些知识,虽说不说但足以让大家够用,好了不多说了,休息一下,放松一
下眼疲劳,顺便再把刚才的知识回忆一下,呆会儿我们继续下一章节的内容。
注意:嗅探的基本原理是你明白 sniffer 工作的重要方法,因此可能会重
复出现,在些向大家申明,如果大家明白了,大可以跳过这些章节以便在后面可
以更快的进行学习!
56SNIFFER(嗅探器)-简介
SNIFFER(嗅探器)-简介
Sniffer(嗅探器)是一种常用的收集有用数据方法,这些数据可以是用户
的帐号和密码,可以是一些商用机密数据等等。Snifffer 可以作为能够捕获网
络报文的设备,ISS 为 Sniffer 这样定义:Sniffer 是利用计算机的网络接口截获
目的地为其他计算机的数据报文的一种工具。
Sniffer 的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在
的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又
不知道问题出在什么地方,此时就可以用嗅探器来作出精确的问题判断。 在合理
的网络中,sniffer 的存在对系统管理员是致关重要的,系统管理员通过 sniffer
可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间的异
常通讯有些甚至牵涉到各种的协议,借助于 sniffer 系统管理员可以方便的确定
出多少的通讯量属于哪个网络协议、占主要通讯协议的主机是哪一台、大多数通
讯目的地是哪台主机、报文发送占用多少时间、或着相互主机的报文传送间隔时
间等等,这些信息为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。
嗅探器与一般的键盘捕获程序不同。键盘捕获程序捕获在终端上输入的键
值,而嗅探器则捕获真实的网络报文。
为了对 sniffer 的工作原理有一个深入的了解,我们先简单介绍一下 HUB
与网卡的原理。
预备知识
HUB 工作原理
由于以太网等很多网络(常见共享 HUB 连接的内部网)是基于总线方式,物
理上是广播的,就是当一个机器发给另一个机器的数据,共享 HUB 先收到然后把
它接收到的数据再发给其他的(来的那个口不发了)每一个口,所以在共享 HUB
下面同一网段的所有机器的网卡都能接收到数据。
交换式 HUB 的内部单片程序能记住每个口的 MAC 地址,以后就该哪个机器接
收就发往哪个口,而不是像共享 HUB 那样发给所有的口,所以交换 HUB 下只有该
接收数据的机器的网卡能接收到数据,当然广播包还是发往所有口。显然共享
HUB 的工作模式使得两个机器传输数据的时候其他机器别的口也占用了,所以共
57享 HUB 决定了同一网段同一时间只能有两个机器进行数据通信,而交换 HUB 两个
机器传输数据的时候别的口没有占用,所以别的口之间也可以同时传输。这就是
共享 HUB 与交换 HUB 不同的两个地方,共享 HUB 是同一时间只能一个机器发数据
并且所有机器都可以接收,只要不是广播数据交换 HUB 同一时间可以有对机器进
行数据传输并且数据是私有的。
网卡工作原理
再讲讲网卡的工作原理。网卡收到传输来的数据,网卡内的单片程序先接收
数据头的目的 MAC 地址,根据计算机上的网卡驱动程序设置的接收模式判断该不
该接收,认为该接收就在接收后产生中断信号通知 CPU,认为不该接收就丢弃不
管,所以不该接收的数据网卡就截断了,计算机根本就不知道。CPU 得到中断信
号产生中断,操作系统就根据网卡驱动程序中设置的网卡中断程序地址调用驱动
程序接收数据,驱动程序接收数据后放入信号堆栈让操作系统处理。
局域网如何工作
数据在网络上是以很小的称为帧(Frame)的单位传输的帧由好几部分组成,不同的部分执行不同的功能。(例如,以太网的前 12 个字节存放的是源和目的的
地址,这些位告诉网络:数据的来源和去处。以太网帧的其他部分存放实际的用
户数据、TCPIP 的报文头或 IPX 报文头等等)。
帧通过特定的网络驱动程序进行成型,然后通过网卡发送到网线上。通过网
线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太
网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。就是在这个
传输和接收的过程中,嗅探器会造成安全方面的问题。
通常在局域网(LAN)中同一个网段的所有网络接口都有访问在物理媒体上
传输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址
不同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广
播地址。(代表所有的接口地址),在正常情况下,一个合法的网络接口应该只响
应这样的两种数据帧:
1、帧的目标区域具有和本地网络接口相匹配的硬件地址。
2、帧的目标区域具有“广播地址”。
在接受到上面两种情况的数据包时,网卡通过 cpu 产生一个硬件中断,58该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。
当采用共享 HUB,用户发送一个报文时,这些报文就会发送到 LAN 上所有可
用的机器。在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对
不属于自己的报文则不予响应(换句话说,工作站 A 不会捕获属于工作站 B 的数
据,而是简单的忽略这些数据)。
如果局域网中某台机器的网络接口处于杂收(promiscuous)模式(即网卡
可以接收其收到的所有数据包,下面会详细地讲),那么它就可以捕获网络上所
有的报文和帧,如果一台机器被配置成这样的方式,它(包括其软件)就是一个
嗅探器。
Sniffer
Sniffer原理
有了这HUB、网卡的工作原理就可以开始讲讲SNIFFER。首先,要知道SNIFFER
要捕获的东西必须是要物理信号能收到的报文信息。显然只要通知网卡接收其收
到的所有包(一般叫作杂收 promiscuous 模式:指网络上的所有设备都对总线上
传送的数据进行侦听,并不仅仅是它们自己的数据。),在共享 HUB 下就能接收到
这个网段的所有包,但是交换 HUB 下就只能是自己的包加上广播包。
要想在交换 HUB 下接收别人的包,那就要让其发往你的机器所在口。交换
HUB 记住一个口的 MAC 是通过接收来自这个口的数据后并记住其源 MAC,就像一
个机器的 IP 与 MAC 对应的 ARP 列表,交换 HUB 维护一个物理口(就是 HUB 上的
网线插口,这之后提到的所有 HUB 口都是指网线插口)与 MAC 的表,所以可以欺
骗交换 HUB 的。可以发一个包设置源 MAC 是你想接收的机器的 MAC,那么交换 HUB
就把你机器的网线插的物理口与那个 MAC 对应起来了,以后发给那个 MAC 的包就
发往你的网线插口了,也就是你的网卡可以 SNIFFER 到了。注意这物理口与 MAC
的表与机器的 ARP 表一样是动态刷新的,那机器发包后交换 HUB 就又记住他的口
了,所以实际上是两个在争,这只能应用在只要收听少量包就可以的场合。
内部网基于 IP 的通信可以用 ARP 欺骗别人机器让其发送给你的机器,如果
要想不影响原来两方的通信,可以欺骗两方,让其都发给你的机器再由你的机器
转发,相当于做中间人,这用 ARP 加上编程很容易实现。并且现在很多设备支持
远程管理,有很多交换 HUB 可以设置一个口监听别的口,不过这就要管理权限了。
59利用这一点,可以将一台计算机的网络连接设置为接受所有以太网总线上的
数据,从而实现 sniffer。Sniffer 就是一种能将本地网卡状态设成‘杂收’状
态的软件,当网卡处于这种“杂收”方式时,该网卡具备“广播地址”,它对遇
到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的
每一个报文包。(绝大多数的网卡具备置成杂收方式的能力)
可见,sniffer 工作在网络环境中的底层,它会拦截所有的正在网络上传送
的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所
处的网络状态和整体布局。值得注意的是:sniffer 是极其安静的,它是一种消
极的安全攻击。
嗅探器在功能和设计方面有很多不同。有些只能分析一种协议,而另一些可
能能够分析几百种协议。一般情况下,大多数的嗅探器至少能够分析下面的协议:
标准以太网、TCPIP、IPX、DECNet。
嗅探器造成的危害
Sniffing 是作用在网络基础结构的底层。通常情况下, 用户并不直接和该
层打交道,有些甚至不知道有这一层存在。所以,应该说 snffer 的危害是相当
之大的,通常,使用 sniffer 是在网络中进行欺骗的开始。它可能造成的危害:
嗅探器能够捕获口令。这大概是绝大多数非法使用 sniffer 的理由,sniffer
可以记录到明文传送的 userid 和 passwd。
能够捕获专用的或者机密的信息。比如金融帐号,许多用户很放心在网上使
用自己的信用卡或现金帐号,然而 sniffer 可以很轻松截获在网上传送的用户姓
名、口令、信用卡号码、截止日期、帐号和 pin。比如偷窥机密或敏感的信息数
据,通过拦截数据包,入侵者可以很方便记录别人之间敏感的信息传送,或者干
脆拦截整个的 email 会话过程。
可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限。
窥探低级的协议信息。
这是很可怕的事,通过对底层的信息协议记录,比如记录两台主机之间的网
络接口地址、远程网络接口 ip 地址、ip 路由信息和 tcp 连接的字节顺序号码等。
这些信息由非法入侵的人掌握后将对网络安全构成极大的危害,通常有人用
sniffer 收集这些信息只有一个原因:他正要进行一次欺骗(通常的 ip 地址欺
60骗就要求你准确插入 tcp 连接的字节顺序号),如果某人很关心这个问题,那么
sniffer 对他来说只是前奏,今后的问题要大得多。(对于高级的 hacker 而言,我想这是使用 sniffer 的唯一理由吧)
事实上,如果你在网络上存在非授权的嗅探器就意味着你的系统已经暴露在
别人面前了。
一般 Sniffer 只嗅探每个报文的前 200 到 300 个字节。用户名和口令都包含
在这一部分中,这是我们关心的真正部分。工人,也可以嗅探给定接口上的所有
报文,如果有足够的空间进行存储,有足够的那里进行处理的话,将会发现另一
些非常有趣的东西……
简单的放置一个嗅探器并将其放到随便什么地方将不会起到什么作用。将嗅
探器放置于被攻击机器或网络附近,这样将捕获到很多口令,还有一个比较好的
方法就是放在网关上。sniffer 通常运行在路由器,或有路由器功能的主机上。
这样就能对大量的数据进行监控。sniffer 属第二层次的攻击。通常是攻击者已
经进入了目标系统,然后使用 sniffer 这种攻击手段,以便得到更多的信息。
sniffer 除了能得到口令或用户名外,还能得到更多的其他信息,比如一个
其他重要的信息,在网上传送的金融信息等等。sniffer 几乎能得到任何以太网
上的传送的数据包。黑客会使用各种方法,获得系统的控制权并留下再次侵入的
后门,以保证 sniffer 能够执行。在 Solaris 2.x 平台上,sniffer 程序通常被
安装在usrbin 或dev 目录下。黑客还会巧妙的修改时间,使得 sniffer 程序
看上去是和其它系统程序同时安装的。
大多数以太网 sniffer 程序在后台运行,将结果输出到某个记录文件中。
黑客常常会修改 ps 程序,使得系统管理员很难发现运行的 sniffer 程序。
以太网 sniffer 程序将系统的网络接口设定为混合模式。这样,它就可以监
听到所有流经同一以太网网段的数据包,不管它的接受者或发送者是不是运行
sniffer 的主机。 程序将用户名、密码和其它黑客感兴趣的数据存入 log 文件。
黑客会等待一段时间 ----- 比如一周后,再回到这里下载记录文件。
讲了这么多,那么到底我们可以用什么通俗的话来介绍 sniffer 呢?
计算机网络与电话电路不同,计算机网络是共享通讯通道的。共享意味着计
算机能够接收到发送给其它计算机的信息。捕获在网络中传输的数据信息就称为
61sniffing(窃听)。
以太网是现在应用最广泛的计算机连网方式。以太网协议是在同一回路向
所有主机发送数据包信息。数据包头包含有目标主机的正确地址。一般情况下只
有具有该地址的主机会接受这个数据包。如果一台主机能够接收所有数据包,而
不理会数据包头内容,这种方式通常称为混杂 模式。
由于在一个普通的网络环境中,帐号和口令信息以明文方式在以太网中传
输, 一旦入侵者获得其中一台主机的 root 权限,并将其置于混杂模式以窃听网
络数据,从而有可能入侵网络中的所有计算机。
一句话,sniffer 就是一个用来窃听的黑客手段和工具。
再次叙述一遍,通常在同一个网段的所有网络接口都有访问在物理媒体上传
输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不
同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广播
地址。(代表所有的接口地址),在正常情况下,一个合法的网络接口应该只响应
这样的两种数据帧:
1、帧的目标区域具有和本地网络接口相匹配的硬件地址。
2、帧的目标区域具有广播地址。
在接受到上面两种情况的数据包时,nc 通过 cpu 产生一个硬件中断,该中
断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。
而 sniffer 就是一种能将本地 nc 状态设成(promiscuous)状态的软件,当
nc 处于这种混杂方式时,该 nc 具备广播地址,它对所有遭遇到的每一个帧
都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。
(绝大多数的 nc 具备置成 promiscuous 方式的能力)
可见,sniffer 工作在网络环境中的底层,它会拦截所有的正在网络上传送
的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所
处的网络状态和整体布局。值得注意的是:sniffer 是极其安静的,它是一种消
极的安全攻击。
通常 sniffer 所要关心的内容可以分成这样几类:
1、口令
我想这是绝大多数非法使用 sniffer 的理由,sniffer 可以记录到明文传送的
62userid 和 passwd.就算你在网络传送过程中使用了加密的数据,sniffer 记录的
数据一样有可能使入侵者在家里边吃肉串边想办法算出你的算法。
2、金融帐号
许多用户很放心在网上使用自己的信用卡或现金帐号,然而 sniffer 可以很
轻松截获在网上传送的用户姓名、口令、信用卡号码、截止日期、帐号和 pin.
3、偷窥机密或敏感的信息数据
通过拦截数据包,入侵者可以很方便记录别人之间敏感的信息传送,或
者干脆拦截整个的 email 会话过程。
3、窥探低级的协议信息。
这是很可怕的事,我认为,通过对底层的信息协议记录,比如记录两台
主机之间的网络接口地址、远程网络接口 ip 地址、ip 路由信息和 tcp 连接的字
节顺序号码等。这些信息由非法入侵的人掌握后将对网络安全构成极大的危害,通常有人用 sniffer 收集这些信息只有一个原因:他正在进行一次欺诈,(通常
的ip地址欺诈就要求你准确插入tcp连接的字节顺序号,这将在以后整理的文章
中指出)如果某人很关心这个问题,那么 sniffer 对他来说只是前奏,今后的问
题要大得多。(对于高级的 hacker 而言,我想这是使用 sniffer 的唯一理由吧)
Sniffer 的工作环境
snifffer 就是能够捕获网络报文的设备。嗅探器的正当用处在于分析网络
的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不
是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅
探器来作出精确的问题判断。
嗅探器在功能和设计方面有很多不同。有些只能分析一种协议,而另一些可
能能够分析几百种协议。一般情况下,大多数的嗅探器至少能够分析下面的协议:
1.标准以太网
2.TCPIP
3.IPX
4.DECNet
嗅探器通常是软硬件的结合。专用的嗅探器价格非常昂贵。另一方面,免费
的嗅探器虽然不需要花什么钱,但得不到什么支持。
63 嗅探器与一般的键盘捕获程序不同。键盘捕获程序捕获在终端上输入的键
值,而嗅探器则捕获真实的网络报文。嗅探器通过将其置身于网络接口来达到这
个目的——例如将以太网卡设置成杂收模式。 (为了理解杂收模式是怎么回事,先解释局域网是怎么工作的)。
数据在网络上是以很小的称为帧(Ftame)的单位传输的帧由好几部分组成,不同的部分执行不同的功能。(例如,以太网的前 12 个字节存放的是源和目的的
地址,这些位告诉网络:数据的来源和去处。以太网帧的其他部分存放实际的用
户数据、TCPIP 的报文头或 IPX 报文头等等)。
帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线
上。通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端
机器的以太网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。
就是在这个传输和接收的过程中,嗅探器会造成安全方面的问题。
每一个在 LAN 上的工作站都有其硬件地址。这些地址唯一地表示着网络上的
机器(这一点于 Internet 地址系统比较相似)。当用户发送一个报文时,这些报
文就会发送到 LAN 上所有可用的机器。
在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于
自己的报文则不予响应(换句话说,工作站 A 不会捕获属于工作站 B 的数据,而
是简单的忽略这些数据)。
如果某在工作站的网络接口处于杂收模式,那么它就可以捕获网络上所有的
报文和帧,如果一个工作站被配置成这样的方式,它(包括其软件)就是一个嗅
探器。
嗅探器可能造成的危害:
1.嗅探器能够捕获口令
2.能够捕获专用的或者机密的信息
3.可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限
事实上,如果你在网络上存在非授权的嗅探器就以为着你的系统已经暴露在
别人面前了。(大家可以试试天行 2 的嗅探功能)
一般我们只嗅探每个报文的前 200 到 300 个字节。用户名和口令都包含在这
一部分中,这是我们关心的真正部分。工人,也可以嗅探给定接口上的所有报文,64如果有足够的空间进行存储,有足够的那里进行处理的话,将会发现另一些非常
有趣的东西……
简单的放置一个嗅探器宾将其放到随便什么地方将不会起到什么作用。
65Sniffer 使用简介(一)
在这一章节里我们要学习到的是从sniffer的安装到sniffer的基本使用,这是对 sniffer 熟悉的一个过程,因此在这里请大家不要忘记,你首先要估的准
备工作就是自已要拥有 sniffer 安装程序与安装序列号,当然如果你不喜欢英文
界面你还可以拥有一个汉化包可以使你的 sniffer 有中文版式,那么你还等什
么,去下载或者去购买都可以,如果你还不会,那么建议你用 baidu 或是 google
找找吧,我不好把地址写出来,现在互联网更新太快了,变化也太快了,所以请
大家自已动手去找找。
好了,开始我们激动人心的探索吧!!!
一、 sniffer的安装
双击 sniffer 的安装程序。
下面就不用说了吧,一路 NEXT 就行了,
在上面填入你的个人信息,记住有号的一定要填上。
66
在这里的选项并不重要,最后一个 Sniffer Serial Number 才是关键,需
要你填入产品序列号,第一个“Please let us know where you heard about this
product”表示“你是通过什么途径知道 sniffer 的” ,随便选一个就行了,第二
个“Do you wish receive announcements about this product?”表示“你是
否愿意用前面填写的信息接受来自 sniffer 方面的公告”当然示个人爱好而定,如果不想收到这方面的信息,选 “NO” 就行了,下面还有接收方式,如:E-mail,FAX
等,第三个“May we share your name with other companies that use NAI
products?”表示“是否愿意与其它使用 NAI 公司产品的用户分享”,这个随便选
择,不关系到 Sniffer 的使用。
67上图就显的重要些了,在这里选择你接入 Internet 的方式,第一个方式是
直接接入 Internet,第二个方式是通过代理接入 Internet,这种方式下面有个
“Configure”按钮大家需要注意:
在这里可以填入你的代理服务器及端口,如果需要用户名与密码你也必需
填入,当然在 Sniffer 中,这些是不被软件存储的,需要你自已时时填入。(注
意,在默认情况下,它会根据你浏览器的设置来自动填写)。
最后一个选项“Not connected to network or dial-up.Print fax
option”表示如果你没有接入 Internet,你的注册信息将被打印或传真表示出
来,这里要根据每个人的具体情况来填写,我的就是选择“Connection to the
Internet through a Proxy”通过代理接入,这表示你的 PC 可能是接在一个 LAN
当中。
接下来,是安装程序自动检测一些信息,这里不需要手动。
68以上都是自动完成的。
这下面这张图里是你的个人注册信息,大家可以看到你前面所填写的很多
信息。
不用管它,尽管点击“Finish”就行了。接着会要求你重新启动计算机。
按软件的要求,重启吧,点击“Finish”就成了!
至此 Sniffer 安装完成了,大家敢快运行看看吧!
如果大家要汉化的话,直接运行汉化包就行了!
69二、 Sniffer的使用
接入来我们就开始学习使用 Sniffer pro 及怎么配置它,如何实现它强大
的功能。
第一次启动 Sniffer Pro 时,如果系统安装了多个网卡,系统会要求选择
使用的代理或者网卡。结果选择储存在 Sniffer Pro 中,下次运行时就会自动选
择同样的代理。可以在启动 Sniffer Pro 后从“文件-选择设定”中改变代理。
这时会出现一个“设定”窗口,如下图
大家看到我有三块网卡,其中两块是我装 VMware Workstation 虚拟机时产
生了,第三块 Inter(R)开头的那个才是真正的物理网卡。
如果想从另一块网卡上捕获流量数据,但是在设定窗口中没有显示这块网
卡,单击 New(添加)。这时会出现下图的对话框。
输入以下信息:
■ 说明 为适配器取一个好名字。在选择了 Select Settings(选择设定)
选项时就会出现说明域。
70■ 网络适配器 这里将显示出你系统上所有 NDIS 3.1+相容网络适配器。选
择一个没有被 Sniffer Pro 探针监控的适配器。
■ 类型 说明探针是远程的还是本地的。Sniffer Pro 限定只能使用本地探
针。只有分布式 Sniffer 才支持远程探针。
■ 复制设定 从当前代理中复制配置设定。这个下拉式列表显示了你系统
上以前定义过的所有代理。
Sniffer Pro 允许同时在多个区段捕获数据。要做到这一点,就要先启动一
个 Sniffer Pro 对话,为要监控的第一个区段选择代理,并在那个接口上开始捕
获。然后启动一个新的 Sniffer Pro 对话,选择下一个代理,并开始捕获。可以
把这两个窗口平铺在屏幕上,这样可以同时观察到这些区段的情况。在想要在一
个区段同时进行捕获与监控时,也可以使用这种方法。
同时从网络上的两个不同区段捕获流量的能力非常有用。例如,如果有一台
客户端电脑位于某个区段上,一台服务器位于另一个区段,就可以同时捕获这两
个区段的流量。
NetPod
以太网可以以全双工模式工作,每个方向的传输与接收流量速度都可以达到
100Mbps。如果只使用 100Mbps 的接收通道,那么以 200Mbps 的速度捕获数据就
会出现问题。Network Associates 公司的高速以太网全双工 Pod 是一种硬件设
备,可以用它来捕获全双工流量。它可以捕获网络上的数据,并储存在一个中间
缓冲设备中。接着被捕获的数据通过另一个高速以太网连接,被传递给 Sniffer
Pro。Sniffer Pro 系统中必须有一个得到系统支持的高速以太网适配器。得到
系统支持的网卡包括:
■ 带有 NAI 增强驱动程序的 Adaptec Cogent 10100 高速以太网 21140UC
PCI 适配器。
■ 带有 NAI 增强驱动程序的 Network Associates NAI2140UC PCI 高速以
太网适配器。
■ 带有 NAI 增强驱动程序的 Xircom CBE2-100BTX CardBus 适配器。
n 带有 NAI 增强驱动程序的 Network Associates CardBus 以太网二代
10100 适配器。
71 如果要获得更多关于高速以太网全双工 Pod 的信息,或者要购买,可以与
当地 NAI 代表或者代销商联系。
如果要在 Sniffer Pro 中设置高速以太网 Pod,可以选择文件-选择设定。
单击 New(添加)按钮来定义与高速以太网全双工Pod 相适应的新的本地代理。
在Network Adapter(网卡)中,选择与高速以太网全双工 Pod 相适应的网卡。
从 NetPod Type(NetPod 类型)中,选择Full Duplex Pod(全双工Pod)。在
NetPod IP Address(NetPod IP 地址)中,输入 Sniffer Pro 系统的网络适配器
的 IP 地址再加 1。例如,如果 Sniffer Pro 的网络适配器地址为 192.168.1.1,就必须设定 192.168.1.2 为 NetPod IP 地址。如果 NetPod 要正常工作,Sniffer
Pro 系统必须安装 TCPIP。全双工 Pod 要求有静态 IP 地址,所以应该禁用 DHCP。
单击 OK 按钮完成代理安装。设定好全双工 Po ......
您现在查看是摘要介绍页, 详见PDF附件(2679KB,158页)。





