﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-鹏少--举轻能落重,举重能落轻-文章分类-扫盲系列</title><link>http://www.cnitblog.com/peng/category/6157.html</link><description>入世精神--做一些事情 出世精神--不把自己做的事情看得太重要</description><language>zh-cn</language><lastBuildDate>Mon, 03 Oct 2011 21:48:16 GMT</lastBuildDate><pubDate>Mon, 03 Oct 2011 21:48:16 GMT</pubDate><ttl>60</ttl><item><title>(扫盲系列2)范伟导老师Sniffer课程资料</title><link>http://www.cnitblog.com/peng/articles/33491.html</link><dc:creator>鹏少</dc:creator><author>鹏少</author><pubDate>Sun, 16 Sep 2007 02:49:00 GMT</pubDate><guid>http://www.cnitblog.com/peng/articles/33491.html</guid><wfw:comment>http://www.cnitblog.com/peng/comments/33491.html</wfw:comment><comments>http://www.cnitblog.com/peng/articles/33491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/peng/comments/commentRss/33491.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/peng/services/trackbacks/33491.html</trackback:ping><description><![CDATA[<p>范伟导老师Sniffer课程资料(一) </p>
<p>本文来自网络分析专家论坛 http://www.netexpert.cn/</p>
<p>前言:</p>
<p>范老师现在是Sniffer中国技术服务中心的技术总监，是中国唯一的Sniffer大师（SCM），他有丰富的经验和经典案例，讲课讲得不错。<br>我是范老师的学生，我2005年学习了Sniffer，发现收获很大，但我不能透露我的单位，因为我想范老师不会允许我把他的讲课内容公开。<br>以下内容是我根据上课录音编写的，基本上是范老师的原话。我整理了一个星期才整理出来，因为范老师在上课时有很多笔书，整理起来很困难，有人会问，为什么不把录音共享出来，主要是课程中很多实验，只有录音，作用不大，我把他整理成文字，看起来会方便一些，当我全部整理完，估计可以出书了，版权费给谁呢？哈哈<br>我希望大家喜欢，如果反应良好，我把后面的内容也贴出来，很辛苦的，大家要珍惜。<br>大家不要放映，精华内容都在注释里。<br>大家有什么问题，可以发E-mail给范老师，fanweidao@hotmail.com，记住如果他问你是谁，你说是北京移动或广东移动或工商银行随便一个省分行的，因为这些单位的学生特别多，他肯定搞不清楚。哈哈，对不起了！范老师，我只是想帮你推广Sniffer.</p>
<p><br>大家好!欢迎大家参加Sniffer的认证课程！<br>先自我介绍一下！我叫范伟导，这是我的邮件，我现在没有工作（同学们：自由职业者）可以这么说。<br>介绍一下我的经历：毕业后我在一个台资电脑厂工作了一年，做硬件的。<br>后来到了日本三洋工作，作X400的软件开发，做ERP，用RPG开发，做了4年<br>后来到了神州数码，作CISCO网络，原来在技术中心做实施，后来在培训中心做讲师，一共做了5年。<br>现在我是CISCO和Sniffer的授权讲师，不过现在我不想做CISCO了，想做Sniffer，因为我觉得网络分析是一个很好的技术方向。等一下我还会跟大家聊一聊我们该往哪一个方向发展。<br>先看一下我们这个课程，这个课程事实上是两门课，第一门我们介绍怎样用Sniffer来做网络故障诊断，还有网络管理的一些方法和思路，第二门课我们介绍如何做应用的分析，这是Sniffer的新课程，我个人觉得非常好，以前的几个班学员也很喜欢。第一门课我们会讲3天，第二门课我们会讲2天。</p>
<p>接下来的半个小时我们不讲书本知识，讲讲我的经历和Sniffer究竟能用来做什么，我们为什么要学Sniffer，其实我的目的是提起大家的学习兴趣，大家愿意学，我才讲的起劲。要不我一边讲，大家在噼噼啪啪上网，那我就讲不下去了（同学们笑）。<br>大家做网络都很多年了，想想我们以前的10兆以太网，现在的万兆以太网，想想14.4k的modem,现在的2M宽带，以前的x25,桢中继，现在的SDH,MSTP,裸光纤。大家都经历这些，但我们才工作几年？就这几年，变化这么大，我不知道大家的工资有没有变化这么大,(同学们大笑），从10兆到万兆，1000倍，几年工资张1000倍。有点难（同学们：不是有点难，是很难，不可能）。<br>再看看我们工作的变化，以前能配配路由器就很牛了，现在似乎谁都会了，记得几年前，我帮一个小集成商配一台4000系列交换机，收了2000元，15分钟搞定。（同学们：好爽，介绍一些给我们做），没有了<br>说说你们的工作。平常工作中做些什么（同学们：做做网线，杀病毒，帮领导装机器）<br>大家想想，这是我们想做的工作吗，以前这些都不用我们做，现在大家感觉是不是地位在下降，工资也不涨，好歹我们也是蜘蛛级的人物呀，不是有个笑话说蜜蜂是空姐，做网络的是蜘蛛吗。（同学们笑）<br>我们该怎么办?</p>
<p>现在说说我的观点，我们都希望工资能年年涨，不要求1000倍，（同学们：不要求那么高，一年20%就行了），<br>20%？不止吧，从毕业到现在，你们工资不止年均涨不止20%吧。 （同学们：我们不能跟您比）<br>也有可能，你们的起点高，我毕业的时候才有650元。</p>
<p>大家回顾一下，做IT的谁的收入高？<br>1、销售<br>2、领导<br>3、咨询专家<br>4、售前工程师<br>5、售后工程师<br>我们在座的有3个是网络中心的主任或科长，他们的收入肯定比一般工程师高，我祝愿你们步步高升，收入节节高。<br>在座大多数是网络工程师，我们该怎么走，其实你们现在的单位都很好，但将来怎样很难知道，比如前几年银行的收入令人羡慕，现在他们却担心降工资，现在移动的收入不错吧，我有汽车厂商的学员，他告诉我他们的收入比移动好点，（同学们：哇）这是他们自己说的，好多少就没说了，还有某政府单位的，什么单位不便说，他们没告诉我他们的收入，只说，价格少于4万的笔记本他们不用，哇靠，4万的笔记本，什么配置？（同学们：那是服务器）<br>我们不能比，人比人，气死人。我们没法进入这些公司的，还是脚踏实地一点好，但我们做技术的也要考虑如何提高我们的收入，做技术的要提高收入，地位是关键，前面大家说只做做线，杀杀病毒，我们的地位在下降，工资怎么长得起来呢？想想我们做技术的，谁的收入高，做数据库的比做服务器的高，为什么Oracle那么火，做服务器的比写程序的高，写程序的比做网络高，这是普遍现象，不说特殊情况。其实大家发现一个特点没有，凡是掌握企业关键业务的收入都很高，你看作数据库的，数据库坏了，企业完蛋了，领导当然重视，现在不仅讲存储，还讲灾备，你看很多银行，北京一个数据中心，上海一个数据中心。<br>我们网络怎样，设计的都是高可靠性的端到端备份，出问题的机会很少，而当应用出什么问题，都说是网络问题。举个例子，有个单位（税务的学员告诉我的），有一天应用突然变慢，大家都说网络慢了，我们用尽troubleshooting的技术也发现不了问题，结果作数据库的工程师偷偷改一下表空间，好了，没问题了，我们不知道怎么好了，做数据库的不说他们有问题，还说网络好了，领导问我网络怎么好的，我不知道呀，领导说：赶快查出原因，避免再出现类似问题，哇塞，怎么查，本来网络就没问题，查什么查。（同学们笑）<br>所以现在大家用一个字来形容我们的工作？你们会用什么字（同学们：累、苦）<br>很贴切，苦、累<br>所以我们不能一直停留在网络的troubleshooting,我们必须提高我们的地位，要不我们会累死。<br>怎么提高地位，我们必须了解我们的业务，也就是要了解应用，了解应用在我们网络上的行为特征，很重要的一个词行为特征。当我们了解了业务的行为特征，我们能定位某一个问题的真正故障点，举个例子：网络应用变慢，可能的原因有什么？网络问题，服务器问题，数据库问题，应用程序问题，客户机问题。如果我们能够判断是哪一部分问题，我们就有发言权了，比如说刚才那种情况，如果我们直接说这是数据库问题，不是网络问题，领导会问，你凭什么说是数据库问题，你可以拿出Sniffer，专家系统上写着，DB Slow Server response诊断，（范老师在演示）再看解码，做一个用户验证操作，花了1.731秒，有根有据，大家想一想，有了Sniffer我们可以了解我们的业务行为特征，可以排除我们的责任，不但工作轻松了，地位也提高了。（同学们笑）</p>
<p>以前我们应用出现问题的时候我们总是分头查找问题，结果往往是没有结果，因为这种查找方式范围太大了，我们做troubleshooting第一步应该是：隔离故障。</p>
<p>如果我们有了Sniffer，首先用Sniffer看一下，最有可能是哪一部分问题，再安排检查，这样不但节省人力，速度会更快，效率也更高。</p>
<p>如果有人问我们Sniffer是什么？大家都会说是协议分析仪，你看sniffer网站（www.networkgeneral.com)<br>上说的是应用和网络分析系统。究竟Sniffer是什么样的一个东西，我们要了解他的发展过程。其实很多类似的产品比如ethereal,netscout,wildpacket等都有类似的发展过程</p>
<p>第一阶段是抓包和解码，也就是把网络上的数据包抓下来，然后进行解码，那时候谁能解开的协议多，谁就是老大，Sniffer当时能解开的协议最多，也就理所当然地成了老大，现在Sniffer能解开550种协议，还是业界最多的，<br>第二阶段是专家系统，也就是通过抓下来的数据包，根据他的特征和前后时间戳的关系，判断网络的数据流有没有问题，是哪一层的问题，有多严重，专家系统都会给出建议和解决方案，现在Sniffer的专家系统还是业界最强的<br>第三阶段：是把网络分析工具发展成网络管理工具，为什么要这样，如果Sniffer知识用作网络分析，那Sniffer的软件就够用了，现在软件的portable基本上都是盗版的，sniffer没钱赚了，所以它必须往网络管理方向转，要作为网络管理工具，就必须能部署在网络中心，能长期监控，能主动管理网络，能排除潜在问题，要做到这些，就要求有更高的性能，所以Sniffer就有了相应的硬件产品，比如说分布式硬件平台，InfiniStream等，我知道在座各位都买了Sniffer的硬件，这时候如果用软件的Sniffer性能就不行了。</p>
<p>我们看一下，Sniffer究竟有什么用？<br>第一，Sniffer可以帮助我们评估业务运行状态，如果你能告诉老板说，我们的业务运行正常，性能良好，比起你跟老板报告说网络没有问题，我想老板会更愿意听前面的报告，但我们要做这样的报告，光说是不行的，必须有根据，我们能提供什么样的根据呢。比如各个应用的响应时间，一个操作需要的时间，应用带宽的消耗，应用的行为特征，应用性能的瓶颈等等，到第二门课，我会告诉大家怎么做到有根有据。<br>第二，Sniffer能够帮助我们评估网络的性能，比如，各连路的使用率，网络的性能的趋势，网络中哪一些应用消耗最多带宽，网络上哪一些用户消耗最多带宽，各分支机构流量状况，影响我们网络性能的主要因素，我们可否做一些相应的控制，等等<br>第三，Sniffer帮助我们快速定位故障，这个大家比较有经验，我们记住Sniffer的三大功能：monitor,expert,decode这三大功能都可以帮助我们快速定位故障，我后面通过案例演示给大家看，大家再做做实验，很快就上手了（同学问：范老师，是否要学Sniffer必须对协议很熟，）不一定，我们可以通过Sniffer来学习各种协议，比如ospf,以前学网络的时候，讲OSPF的LSA好像很复杂，你用Sniffer看看，其实他的协议结构还是不复杂的，一般情况下，我会要求学Sniffer的学员有CCNP的基础，或者有几年的网络管理经验，我自己也是这样，刚开始只是用Sniffer抓抓包，抓下来也不知道怎么分析，当我学完CCNP后，学了CIT，以为自己不错了，会排除很多网络故障，但实际上很多问题我还是解决不了，比如网络慢，他又不断，断了我很快能解决，网络慢，或者丢包，一般的排错知识还是很难的，那时候开始学Sniffer，才发现很好用<br>第四，Sniffer可以帮助我们排除潜在的威胁，我们网络中有各种各样的应用，有一些是关键应用，有一些是OA，有一些是非业务应用，还有一些就是威胁，他不但对我们的业务没有帮助，还可能带来危害，比如病毒、木马、扫描等，Sniffer可以快速地发现他们，并且发现攻击的来源，这就为我们做控制提供根据，比如我们要做QOS，不是说随便根据应用去分配带宽就解决了，我们要知道哪一些应用要多少带宽，带宽如何分配，要有根有据。我们再回过头看一下Sniffer什么时候开始流行的，再2003年冲击波发作的时候，很多Sniffer的用户通过Sniffer快速定位受感染的机器，后来很多人都知道Sniffer可以用来发现病毒，Sniffer的知名度暴涨，盗版用户也暴涨（同学们大笑），后来震荡波发作的时候，很多人用Sniffer来协助解决问题。我想强调的是Sniffer不是防病毒工具，这也只是他的一个用途，而且只对蠕虫类型对网络影响大的病毒有效，对于文件型的病毒，他很难发现。<br>另外要说明的事，Sniffer还可以用来排除来自内部的威胁，现在我们网络中有各种各样的网络安全产品，防火墙、IDS、防病毒软件，他们都有相应的功能，但真的有效吗，能解决全部威胁吗，我们要进行评估，用Sniffer就能评估内网的安全状况，有没有病毒，有没有攻击，有没有扫描，像防火墙、IDS、防病毒软件他们都是后知后觉的，它必须有特征才能阻绝，而Sniffer是即时监控的工具，通过发现网络中的行为特征，判断网络是否有异常流量，所以Sniffer可能比防病毒软件更快地发现病毒。我在神州数码的时候，冲击波震荡波都是我县发现的，有趣的是当时我都在上Sniffer的课，中午休息，我把sniffer驾到公司网络，再Hosttable看到广州一台机器很多广播，接着广州另外一台机器也开始发广播，接着深圳也感染了，我马上通知IT管理人员，他们把这几台机器断网，后来才知道有冲击波病毒，防病毒软件还不能杀。<br>刚才讲到异常流量，这是一个很重要的概念，什么是异常流量？我们怎么判断是否异常，这又涉及另外一个概念，叫基准线分析，什么是基准线，基准线是指我们网络正常情况下的行为特征，包括利用率、应用响应时间、协议分布，各用户贷款消耗等，不同工程师会有不同基准线，因为他关心的内容不同，只有知道我们网络正常情况下的行为特征，我们才能判断什么是异常流量。<br>第五，做流量的趋势分析，通过长期监控，可以发现网络流量的发展趋势，为我们将来网络改造提供建议和依据<br>第六点就是应用性能预测，这点很有用，会用的人不多，我们第二门课会讲，Sniffer能够根据捕获的流量分析一个应用的行为特征，比如，你现在有一个新的应用，还没有上线，我能评估他上线后的性能，比如在用户在网络中心有多快，用户在省中心有多快，用户在市中心有多快，都可以提供量化的预测，准确率挺高的，误差不超过10%。我们还可以用她来评估应用的瓶颈在哪，不同应用瓶颈不同，比如有些应用慢了，增加网络带宽效果很明显，比如FTP这种应用，有些应用慢了增加带宽没什么效果，比如TELNET应用，我们还可以预测网络带宽增加的效果，比如我将2兆提高到8兆应用性能有多大的提升，Sniffer能比较准确地预测</p>
<p>在这里我们提到三个重要概念，网络行为特征，异常流量，基准线，大家理解了吗</p>
<p>在这里，我不想太多介绍产品，我不是来推销Sniffer的（同学们笑），我们主要探讨网络分析技术<br>Sniffer的便携式就是我们用的那种盗版软件（同学们笑），我不用介绍了，这门课我们用Sniffer的便携式来讲，因为分布式和InfiniStream也有一样的界面，上课的时候我们都是用便携式。<br>Sniffer的分布式包括4100和6040，主要是放在网络核心可以长期监控、分析，4100可以处理千兆流量，6040可以处理8千兆流量，这是业界性能最高的产品<br>Sniffer的InfiniStream的特点是可以长期抓包，最多有4个T的存储空间，可以长期抓包，可以进行回溯性分析，这点对有些用户来说很重要，比如今天早上10点半，某个应用很慢，十分钟后又正常了，如果没有InfiniStream,流量没有保存，我们就很难分析问题在哪，如果有了InfiniStream,这些流量都会保存下来，自动的，就是长期抓包，我们就可以找出当时的流量，进行分析，一个很好的设备，现在支持1800兆线速捕获，这也是其他厂商没有的。</p>
<p>这些你们买设备的时候代理都给你们说清楚了，我就不多讲了。</p>
<p>怎么样，听了这么久，感觉如何？有兴趣吗？<br>其实我个人是很喜欢Sniffer的，我当时从三洋出来的时候，错过了去IBM的机会，去了神州数码才知道，他们IBM需要做X400的人，去了神州数码，老板问我想做网络还是想做主机，我说做网络吧，那时一个CCIE 23十万的收入是有的，结果到我考过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的人在一起交流使用心得，分享一些案例，你们如有兴趣，到时我可以邀请你们参加，不过首先要认真听课。（同学们笑）</p>
<p>好了，讲了这么多，目标只有一个，提起大家的学习兴趣，接下来讲课程的内容，首先把Sniffer打开。</p>
<p><br>范伟导老师Sniffer课程资料(二) </p>
<p><br>好，大家都打开了吗，有问题随时告诉我，（跑去解答问题去了）如果大家在上课的时候有任何疑问，随时可以打断我，不用给我面子，我也不一定能回答所有问题，不过没关系，交流总会进步的。</p>
<p>好，我们继续第一个我要介绍的是local agent。<br>什么叫local agent，大家打开fileSelect settings<br><img height=362 alt=1.jpg src="http://cs.cuc.edu.cn/linweiguo/archives/images/1.jpg" width=536 border=0><br><br>这时候，大家可能只看到一个local 下面是你的网卡,这就叫做一个local agent。<br>事实上，一个local agent 就像一个探针。<br>我们知道Sniffer的工作原理很简单，就是把网卡设成混杂模式（叫做promiscuous），所谓混杂模式，就是把所有数据包接受下来放入内存，大家知道一般情况下,PC机只接受目的mac地址为自己网卡或广播、组播的数据包。sniffer就是这样把所有数据包都接收下来，在进行分析。<br>大家看我这里有多个agent,怎样可以做多个agent呢，可以不同网卡做不同的agent，就像你们的分布式sniffer一样，有多个网卡，那就是多个agent,infinistream也一样。<br>其实一个网卡，也可以做多个agent,大家试一下，new一个，给他加上说明，就叫101把，选中你们的网卡，下面选no pod，copy setting留空，那个pod是你外接sniffer book时候用的。大家看看你们的agent多了一个，101括号local_2。对不对（同学们：对）<br>好，不错。<br>我们为什么建立多个agent 呢。不同的agent可以定义不同的阀值，可以有不同的过滤器，可以有不同的触发器，不同的地址本。<br>比如说，你们有一台笔记本装着sniffer，大家都用它，那不同的工程师可以自己定义一个agent，自己定义自己的过滤器，互不干涉，比如不同的网段有不同的阀值，也可以定义不同的agent。<br>那agent的参数保存在哪里呢，大家打开c:\program files\nai\sniffernt\program,大家看到local local_2,这就是两个不同的agent保存参数的地方。大家看到两个CSF文件，一个是sniffer.csf，另外一个是Snifferdisplay.csf。这是过滤器文件，当我们使用sniffer一段时间之后，大家会累积许多好的过滤器，一定记得保存下来，就是把这两个文件考出来就行了，如果你看到别人那里有好的过滤器，也可以拷过来。不过当你要倒回去的时候，4.8比较好办直接倒入就行了，4.75比较麻烦，我后面讲定义过滤器的时候再教大家。过滤器是sniffer最难、最有意思、最重要的一部分，大家放心，我能让大家成为高手。（同学们笑）<br>好，local agent讲完了，local agent是什么？事实上就是定义一个环境变量，不同的环境不同的参数。<br>好，休息一下，待会儿讲monitor功能。</p>
<p>中间休息的时候，我问了范老师一个问题：我看书上说，TCP是可靠的,UDP是不可靠的，那要不可靠UDP来干什么？（各位：我的问题是不是很傻？但我确实不知道呀）</p>
<p>范老师：不错，这个问题非常好！（嘿嘿！）<br>TCP叫传输控制协议，他的特点是：有连接，有流控，有顺序号/确认号，开销比较大，一般是20个字节的头。<br>UDP叫用户数据报协议，开销小，8个字节的头，无可靠保证。<br>我后面有详细介绍TCP和UDP，我们先看您的问题。<br>首先，UDP，不可靠，是指，在传输层不提供可靠保证，并不意味着所有使用UDP的应用都不可靠。<br>我们来比较几个应用（范老师用他的trace file 给我演示）</p>
<p>DNS，53端口，进行查询时，用的是UDP，因为要求速度快，比如我要查networkgeneral的地址，你只要告诉我ip是多少就行了，如果要进行3次握手建立连接，再去取到IP，那就慢了，所以用的是UDP,一个字：快。没响应怎么办，事实你看（他在演示）它会同时向多个DNS查询，所以没响应也没关系，你看这个响应名字错误，找不到。所以UDP还是有用的，特别是像DNS查询这种应用，丢了也就丢了，我再查。但DNS也有用TCP的时候，比如DNS服务器的同步，用的就是TCP的53端口</p>
<p>TFTP，您所了解的TFTP,用的是UDP吧，他不可靠吗，事实上文件传输,必须保证可靠。不但要保证能知道丢包重传，还要有顺序号，应付错序到达的情况，也就是我们常说的后发先至。事实上TFTP是怎样工作的，你看（他在演示），每一个数据块都有Id号，一块512字节，一次传输，一次确认，这就相当于TCP的顺序号和确认号。所以UDP是不可靠的，但很多使用UDP协议的应用是可靠的，只是在应用层去保证可靠性，很多人说用UDP效率高，事实上TFTP在传输大文件的时候,比FTP效率更地，我们后面有专门的实验。</p>
<p>视频流量，（没有演示）对于视频流量，也是需要可靠保证的，但要求不是很高，所以不会像TFTP那样每一个数据报都确认，而是传多个数据包确认一次，要不效率就太低了，究竟多少个数据包确认一次，开发人员需要不断测试。</p>
<p>我的解释清楚吗，（我说：明白了！谢谢！）</p>
<p>（确实看着演示，很容易就理解了，中间我们有许多对话，我省略了，确实如果只听录音是不明白的，这是我为什么要整理成文字给大家看，好累呀！大家给我加油！）</p>
<p>好，我们继续！</p>
<p>我们来看一下Sniffer的七大monitor功能，有Dashboard,hosttable,matrix,ART，protocol distribution,history sample,global statistics<br>我们一个一个来看，先看dashboard。</p>
<p><img height=343 alt=2.jpg src="http://cs.cuc.edu.cn/linweiguo/archives/images/2.jpg" width=431 border=0></p>
<p>这个大家很熟悉了，我不用多讲，dashboard有3个仪表，分别是使用率，每秒钟包数量，每秒钟错误率，下面都有两个数字，前面一个表示当前值，后面一个表示最大值。<br>下面还有long term,和short term<br>Long term 每30分钟采样一次，一共可以采样24小时，short term 每30秒钟采样一次，可以采样25分钟<br>大家自己试一下，首先把file里面的loopback 选上，这样我们发的数据包就不会发到网络中去，然后打开101目录里的TCPdemo7a那个trace file ,再用packet general 发包，选send current buffer，连续发送。（我们是跟着范老师做的）</p>
<p>好了，大家试了一遍，感觉应该是一样的，就是这有什么用？没用，对吧，我也这样觉得（同学们笑）<br>但如果你要监控某一台服务器的时候，这个是有用的，比如你把一台服务器的接口monitor 过来，这样你就可以看到这台服务器的流量状况了，这就是一个很好的基准线呀。当然大家用的是硬件产品，就更方便了。<br>大家注意到下面还有错误报的统计，要注意的是一般的网卡是抓不了错误包的，要用专用网卡，一块网卡上万块，NG好黑呀（同学们笑）<br>其实大家知道通过交换机的存储转发，基本上很少错误包，所以不用关注它。</p>
<p>在这里我想解释一下以太网的错误包，这对大家学习网络是很有帮助的，特别是了解一下封装的概念。</p>
<p>（请看下一页：以太网为什么要64个字节）</p>
<p><img height=328 alt=3.jpg src="http://cs.cuc.edu.cn/linweiguo/archives/images/3.jpg" width=509 border=0></p>
<p>(这是范老师的板书,我画不出来,大家将就点吧) </p>
<p>以太网是无连接的，不可靠的服务，采用尽力传输的机制。以太网CSMA/CD我就不多讲了，我相信大家都了解这个原理。<br>以太网是不可靠的，这意味着它并不知道对方有没有收到自己发出的数据包，但如果他发出的数据包发生错误，他会进行重传。以太网的错误主要是发生碰撞，碰撞是指两台机器同时监听到网络是空闲的，同时发送数据，就会发生碰撞，碰撞对于以太网来说是正常的。<br>我们来看一下，假设A检测到网络是空闲的，开始发数据包，尽力传输，当数据包还没有到达B时，B也监测到网络是空闲的，开始发数据包，这时就会发生碰撞，B首先发现发生碰撞，开始发送碰撞信号，所谓碰撞信号，就是连续的01010101或者10101010,十六进制就是55或AA。这个碰撞信号会返回到A，如果碰撞信号到达A时，A还没有发完这个数据包，A就知道这个数据包发生了错误，就会重传这个数据包。但如果碰撞信号会返回到A时，数据包已经发完，则A不会重传这个数据包。<br>我们先看一下，以太网为什么要设计这样的重传机制。首先，以太网不想采用连接机制，因为会降低效率，但他又想有一定的重传机制，因为以太网的重传是微秒级，而传输层的重传，如TCP的重传达到毫秒级，应用层的重传更达到秒级，我们可以看到越底层的重传，速度越快，所以对于以太网错误，以太网必须有重传机制。<br>要保证以太网的重传，必须保证A收到碰撞信号的时候，数据包没有传完，要实现这一要求，A和B之间的距离很关键，也就是说信号在A和B之间传输的来回时间必须控制在一定范围之内。IEEE定义了这个标准，一个碰撞域内，最远的两台机器之间的round-trip time 要小于512bit time.(来回时间小于512位时，所谓位时就是传输一个比特需要的时间）。这也是我们常说的一个碰撞域的直径。<br>512个位时，也就是64字节的传输时间，如果以太网数据包大于或等于64个字节，就能保证碰撞信号到达A的时候，数据包还没有传完。<br>这就是为什么以太网要最小64个字节，同样，在正常的情况下，碰撞信号应该出现在64个字节之内，这是正常的以太网碰撞，如果碰撞信号出现在64个字节之后，叫 late collision。这是不正常的。<br>我们以前学习CISCO网络的时候，CISCO交换机有一种转发方式叫fragment-free，叫无碎片转发，他就是检查64个字节之内有没有错误，有的话不转发，这样就排除了正常的以太网错误包。</p>
<p>&#160;</p>
<p>(这是范老师的板书,我画不出来,大家将就点吧) <br>我们再来看一看以太网的帧结构。 </p>
<p><img height=230 alt=4.jpg src="http://cs.cuc.edu.cn/linweiguo/archives/images/4.jpg" width=528 border=0></p>
<p>要讲帧结构，就要说一说OSI七层参考模型。七层参考模型大家很熟悉，以前我们看书的时候会觉得不知所云，我刚学的时候就是这感觉，其实我们只要掌握两点就行了。 <br>一个是访问服务点，每一层都对上层提供访问服务点（SAP），或者我们可以说，每一层的头里面都有一个字段来区分上层协议。 <br>比如说传输层对应上层的访问服务点就是端口号，比如说23端口是telnet，80端口是http。IP层的SAP是什么？（同学们没说话） <br>其实就是protocol字段，17表示上层是UDP，6是TCP,89是OSPF，88是EGIRP,1是ICMP等等。 <br>以太网对应上层的SAP是什么呢？就是这个type或length。比如 0800表示上层是IP，0806表示上层是ARP。我后面还会将各种以太网的帧类型。 <br>第二个要了解的就是对等层通讯，对等层通讯比较好理解，发送端某一层的封装，接收端要同一层才能解封装。 <br>我们再来看看帧结构，以太网发送方式是一个帧一个帧发送的，帧与帧之间需要间隙。这个叫帧间隙IFG—InterFrame Gap <br>IFG长度是96bit。当然还可能有Idle时间。 <br>以太网的帧是从目的MAC地址到FCS,事实上以太网帧的前面还有preamble，我们把它叫做先导字段。作用是用来同步的，当接受端收到preamble，就知道以太网帧就要来了。preamble有8个字节前面7个字节是10101010也就是16进制的AA，最后一个字节是10101011,也就是AB，当接受端接受到连续的两个高点平，就知道接着来的就是D_mac。所以最后一个字节AB我们也叫他SFD（帧开始标示符）。 <br>所以在以太网传输过程中，即使没有idle，也就是连续传输，也有20个字节的间隔。对于大量64字节数据来说，效率也就显得不高。 <br>所以，有时我们用下载数据来检查我们的网速，这是不完全准确地，我们要了解他的传输特征，才能准确判断电信究竟给了你多少带宽。我有一个移动的学员，他说用户总怀疑我给他的带宽不够，其实我肯定给他两兆了，所以有时运营商也挺不容易（同学们笑）。后来我告诉他怎么样用sniffer来测带宽，不知道他后来成功了吗，我没有得到反馈。后面我会介绍怎样用Sniffer来做带宽测试，非常精确的喔。我给很多用户作过带宽测试，他们大多都是怀疑电信给的带宽不够。（同学们问：有没有不够的时候？）我测试的案例里还没有。还有就是帮集成商作方案验证，比如，集成商给用户作了多链路捆绑，或路由负载均衡，用户说比原来更慢了，我去证明给用户看，负载均衡确实做起来了，流量分担很正常。（同学们问：那为什么会慢呢），这就涉及到应用的特征和不同厂商采用均衡的机制。我还没试过作进一步分析。因为这是集成商的朋友叫我去帮忙的，我只要证明给用户看方案没问题，并告诉集成商如何给用户解释就行了，在做下去，就会画蛇添足了，因为可能让用户觉得我的水平比我朋友高，那不是帮倒忙了。（同学们笑）所以帮忙也要适可而止。 （同学们笑） <br>好了，有点扯远了。前面讲这些主要是帮大家复习以下以太网知识，大家别担心，时间是足够的，因为这门课里有很一些基础的知识，比如交换原理、vlan原理，那些知识我都会跳过，我第一天的内容不会很难，考虑到大家远道而来，第一天都很累。但后面回越来越难，大家要有心理准备。晚上要早点睡觉（同学们笑）。还有一个，就是大家别指望能记得住我讲得全部内容，今天讲得明天还记得一点，后天就全忘了，（同学们笑），到了课程结束的时候，基本上全忘光了，（同学们大笑），所以做笔记很重要，我建议大家把笔记写在书上，到时才对得起来。我也注意到一些同学在录音，我知道的，不用放在桌子底下(同学们笑），那样效果不好，（同学们大笑），其实这是不允许的，不过没关系，只有一个要求，不要放在互联网上。 <br>（编者：写到这里，有点写不下去了，觉得很内疚，觉得对不起范老师。我参加过很多培训，范老师是我很喜欢的一个老师，他讲课不会非常幽默，但很实用，这是因为他有很多经历，他在讲课过程中，会补充很多课程以外的东西，比如很多网络中的细节知识，很多工作中的思路，我觉得这方面收获很大，我个人觉得是对我知识的全面补充，学完之后觉得不仅学会了Sniffer，网络管理的思路更清晰了，现在我指导工程师时，套了很多范老师的话，我觉得范老师很好。怎么办？我在进行思想斗争。。。该不该再写下去。我想在论坛里发起投票，听听大家的意见，我该不该再写下去。） <br>（编者：范老师的课程内容： 第一天 monitor功能，Sniffer的部署 <br>第二天 expert，capture filter ，troubleshooting <br>第三天 decode，display filter ，trigger <br>第四天 应用的类型，应用的剖析，应用的分析思路 <br>第五天 应用性能的分析，应用性能预测） <br>（编者：大家去投票吧，我不担心侵权，只是感情上过不去） <br>（编者：我明天回家了，过完年要到6个省视察工作，估计要到3月份才回北京，到时才看写不写下去） </p>
<p>&#160;</p>
<p>范伟导老师Sniffer课程资料(三) </p>
<p><img height=405 alt=hosttable.gif src="http://cs.cuc.edu.cn/linweiguo/archives/images/hosttable.gif" width=679 border=0> <br>好，我们继续看第二个monitor功能，Host table，我们叫他主机列表 <br>这是非常好用的一个功能，有什么用呢？ <br>第一看流量最大的TOP10主机， <br>第二看广播量有多少，当时我发现冲击波、振荡波的时候，就是看这个host table，发现有大量的全子网广播 <br>第三可以快速过滤单一主机流量。 <br>第四通过过滤功能可以看到单一业务主机的流量分布，当然也可以通过镜像接口去实现 <br>我们一个一个来看。 <br>首先TOP10主机， <br>我们可以点击各列的标题来排序，方便我们分析，比如收发包情况。大家可以试一下。 <br>第二广播量有多少 <br>我们点击broadcast或multicast的标题，查看广播量，有一点要注意，不要忘记看MAC层的广播和组播，因为MAC的广播不一定有IP头，比如ARP，同样IP的广播在MAC也可能是单播，比如子网广播。 <br>MAC层的广播是目的MAC为48个1，MAC层的组播为目的MAC第一个字节最低位是1。（范老师有板书，我的本子上有，懒得画了） <br>IP的广播有三种：255.255.255.255叫本地广播，也叫直播，direct broadcast，不跨路由器。 <br>172.16.33.255叫子网广播，广播给172.16.33.0这个子网，可以跨路由器。 <br>172.16.255.255叫全子网广播，广播给172.16.0.0这个主网，可以跨路由器。 <br>大家以前学网络的时候，老师会给一个概念，说路由器是三层设备，隔离广播，对吧，我也是这样给同学介绍的，但我在后面会告诉同学，并不是所有广播都隔离。 <br>事实上只有255.255.255.255这类本地广播，路由器才不转发，对于子网广播和全子网广播，路由器是转发的，这是为什么呢？ <br>我们来看4个255的广播，在MAC的封装中，对应的目的MAC是广播，而子网广播和全子网广播，对应的目的MAC是单播，所以路由器会转发。（范老师在演示）所以我们注意到，路由器隔离的广播是目的MAC为全1的广播，对于目的MAC是单播的上层广播，路由器是不能隔离的。 <br>现在想想冲击波震荡波为什么影响那么大，因为它采用的是全子网广播，可以跨路由感染。所以对于这种流量我们要小心，希望下次再出现蠕虫病毒时，大家能快速发现，做个世界第一（同学们笑），同样我们要关注MAC层的广播。 <br>第三，就是我们可以关注单一主机流量。 <br>第一种办法，抓包。选中主机，点一下抓蝴蝶的工具，这样通过专家系统和解码你就可以分析他在干什么了。这个我们后面再讲 <br>第二种办法，用single station。选中主机，点一下下面这个电脑的图标，你可以看到他在跟谁通信，如果你看到他跟几十台、上百台机器同时通讯，可能是什么？（同学们：BT)，对，像BT,电驴等P2P应用会有这个特征。 <br>第四，就是我们如果我们把单一业务服务器的接口镜像过来，我们就可以看到这台机器的流量状况，我们也可以采用过滤的方式。 <br>Sniffer有一种叫Monitor 过滤器。大家选中一台机器，假设这是你要关心的业务主机，再点一下这个定义过滤器的图标，（范老师在演示），你看他自动产生一个叫NEW1的过滤器，就是这台机器跟任何机器通讯这样的一个过滤器。我们点一下确定。 <br>我们在选择monitor菜单上的select filter，选apply monitor filter，再选new1，确定。 <br>大家注意到，现在host table就只有和这台机器通讯的所有主机流量情况。要注意一点是，monitor filter应用的时候，对所有monitor功能生效，所以在分析单一业务的时候，特别好用。当然如果你们买的是InfiniStream的话，就更方便了，想分析那个业务就分析哪个业务。 <br>怎么样？Host table好用吧？ <br>（同学问：为什么广播也是一台主机？不是说广播地址不会作为主机地址吗？）（编者：这个问题好像比较低级） <br>这是流量分析技术的特点，再流量分析中，它纯粹从包结构中去取得主机信息，也就是目的MAC,源MAC,目的IP，源IP,他都作为主机处理，广播地址不会在原地址中出现，但在目的地址中出现，也是一台主机。这并不影响我们分析。 <br>好。还有什么问题吗？大家用5分钟自己试一下。 </p>
<p><br><img height=440 alt=matrix1.gif src="http://cs.cuc.edu.cn/linweiguo/archives/images/matrix1.gif" width=676 border=0><br><br>好，我们继续看第3个monitor功能，Matrix，我们叫他矩阵，其实就是主机会话情况，很多人用他来发现病毒，其实用他来评估网络状况，和异常流量，是一个很好用的工具。 <br>大家看，一下子就满了，大多数网络中都是这样的，我们可以按一下崭停。 <br>然后来分析 <br>分析什么呢？ <br>看那一台主机的连接数最多，要注意这个连接数不是传输层的连接数，是指谁跟最多的主机连接 <br>按右建选zoom，放大。 <br>找到对外连接最多的机器，选中，按右建，选show select nodes,大家自己试一下。 </p>
<p><br><img height=360 alt=matrix2.gif src="http://cs.cuc.edu.cn/linweiguo/archives/images/matrix2.gif" width=620 border=0><br><br>我们注意到这台机器跟很多机器通讯，这正常吗？（同学们：不正常） <br>这要看实际情况，如果这时一台业务主机，太正常了，如果这时一台PC机，或许在作P2P。 <br>究竟在作什么呢</p>
<p>&#160;</p>
<p>范伟导老师Sniffer课程资料(四) </p>
<p><img height=336 alt=matrix3.gif src="http://cs.cuc.edu.cn/linweiguo/archives/images/matrix3.gif" width=600 border=0></p>
<p>我们注意到这台机器向公网发出大量的ICMP包，那是在作什么？（同学们：在ping) <br>对！PING采用ICMP协议，ping可以用来扫描，也可以用来攻击。 <br>扫描就是看那一台机器活着，接着扫描端口，在攻击，所以扫描是攻击主机的前奏。 <br>另外，还可以用ping 来冲击路由器，或占用带宽，是一种DOS攻击。 <br>大家看这个过程更像哪一种类型。 <br>（同学们：扫描，DOS攻击） <br>一般情况下，扫描会是比较连续的地址，我们看这个地址并不连续，我们先排除扫描，当然不是绝对的，也有比较聪明的扫描。 <br>有同学说，这是DOS攻击，那是冲击路由器，还是占用带宽？ <br>（同学们：冲击路由器） <br>嘿，这次比较统一，我也觉得他在冲击路由器，我们看，他的目标地址基本不在一个网段，这样路由器收到这样的数据包会消耗大量资源在查找路由表上面。所以对路由器有一定冲击。 <br>一般来说，如果他想占用带宽的话，会发大包，我们发现，包的长度不大，并且一秒钟才发10几个包，所以对贷款冲击不大。 <br>或许大家会觉得这没秒10几个包对路由器冲击也不大呀。大家想像一下，如果有很多机器在作这个操作，那影响就会很大。 <br>大家自己在找一找，是否还有其他机器在作同类事情。 <br>（同学们找出7台这样的机器） <br>好大家找出7台这样的机器，怎么找出来的？有同学用钢材的办法，有同学用过滤，都市好办法。 <br>现在假设在你们的网络中出现这样的情况，我们发现了异常，接下来怎么做？ <br>（同学们：找到这台机器） <br>然后呢？ <br>我们可以看看这台机器的任务管理器，看看有什么不常见的进程，把他去掉，看是否解决。在看其他的机器，是否有类似的特征。 <br>这是我的一个学员发给我的，当时他发现这7台机器都有一个特殊的进程，但是他的防病毒软件没有查出来。他手工解决了。 <br>这很好说明用Sniffer可以比防病毒软件更快发现病毒，因为防病毒软件是后知后觉得，什么意思？防病毒软件必须有相应的特征才能查病毒。而Sniffer通过流量可以发现一些特征，一些异常。 <br>但是有一点，我们不能拿Sniffer当防病毒软件用，那不是他的特长，同时也太低沽Sniffer的功能了（同学们笑） <br>好我们在看看扫描是怎么一回事，大家看这个trace file（范老师在演示，我就不写了） <br>先是ARP扫描，再端口扫描，接下来就是攻击了。 <br>（编者：接着我们做了一个游戏，范老师让大家用Sniffer攻击他的机器，结果1台机器就把他的机器搞死了，这个就不细说了） </p>
<p><img height=310 alt=art4.gif src="http://cs.cuc.edu.cn/linweiguo/archives/images/art4.gif" width=585 border=0></p>
<p><br>好，我们再看第四个monitor功能，ART，Application Response Time，应用响应时间。 <br>应用响应时间是分析应用的一个很好工具，主要用来分析应用的性能。 <br>ART是指一个客户端发出一个请求，到服务器响应回来的时间差。 <br>一般来说，应用响应的快慢，是应用性能的一个重要指标。 <br>应用性能主要决定于几个因素：网络因素、服务器因素、客户端因素、应用协议因素 <br>我们先看看如何操作,再来看看应用这个功能。 <br>我们打开ART，大家看到Http的应用响应时间分析，这里有几个列，server Address,Client Address. <br>他是怎么知道谁是Server，谁是Client?其实也就是看端口号和IP的对应关系，比如如果一个数据包的目的IP是1.1.1.1，目的端口是80，Sniffer就会认为1.1.1.1就是Http服务器。对应的源IP就是Client。 <br>AvgRsp—平均响应时间 <br>90%Rsp—90%响应时间，去掉头尾个5%，其实我个人觉得去掉最大的10%更合理一些。 <br>还有最大最小的响应时间，这些都是以毫秒为单位。 <br>接着就是TotalRsp,这个是响应次数，单位是次。 <br>接着是0到25毫秒的响应有多少次，25到50毫秒的响应有多少次。。等等。 <br>后面还有server发送子节数，client发送子节数，timeout次数等等，5秒不响应则Timeout。 <br>我们再看看怎么增加其他应用，按属性，选择display protocol,添加你关心的协议，再确定，ART会重新刷新（范老师在演示） <br>你看我这里就有了telnet,Oracle。 <br>（同学们：我们没有Oracle) <br>我知道，其实平时我们更关心的是我们关键业务，所以我们要把我们关键业务的端口添加进来，怎么添加？大家跟我来， <br>选菜单上的tools&#224;options&#224;protocol，拉到下面,添加一种应用，比如Oracle,端口1521。 <br>再在属性里把这个新协议选上，有了吗？（跑去解答问题去了） <br>好，大家都做出来了，我们平常分析关键业务就行了，有一点要说明，一种业务可能有多个应用，也就是多个端口，需要同时分析。 <br>有些同学喜欢把所有well known的协议添加到协议列表里，我在共享目录上有两个注册表注入工具，大家只要运行以下就可以将这些常用端口都注入到协议列表里，就不用一个一个敲了。其实我个人觉得不太必要，多了反而乱。 <br>大家打开注册表，我们看一下协议列表，找到这两项： <br>HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates, Inc.\Sniffer\4.7\1CommonSettings\Protocols\IP Protocols\TCP <br>HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates, Inc.\Sniffer\4.7\1CommonSettings\Protocols\IP Protocols\UDP <br>这就是协议列表。注意不要有重复的，否则会报错。 </p>
<p><img height=336 alt=art5.gif src="http://cs.cuc.edu.cn/linweiguo/archives/images/art5.gif" width=636 border=0><br><br>（编者：这是范老师的板书） <br>应用响应时间是评估影响应用性能因素的一种很好的工具。我们看这样一个例子。 <br>比如通过client通过广域网连接到服务器。 <br>我们同时在AB两点部署Sniffer，分析某一业务的响应时间。 <br>假设Sniffer在A点，他所看到的响应时间包括网络消耗时间和服务器处理时间 <br>在B点的Sniffer看到的响应时间主要是服务器处理时间。这样我们比较AB两点的响应时间，来判断影响性能的主要因素是网络还是服务器。 <br>假设A点的响应时间是400毫秒，B点的响应时间是100毫秒，我们就知道A点的400毫秒中有300毫秒是消耗在网络上的，我们可以认为对于这个业务，性能的主要瓶颈在网络上，如果我们在深入分析是距离因素还是贷款因素，我们就可以判断是否有改善空间。这个细节我们在第二门课讲。 <br>如果B点的响应时间达到250毫秒，我们可以认为改善服务器的性能对于这个应用来说会更明显一些。 <br>如果我们Sniffer用多了。我们就可以做一个AB点的响应时间的基准线，假设正常情况下A点的响应时间是400毫秒，有一天你发现平均响应时间达到600毫秒，你就应该关注了，或许用户还没有抱怨，如果你这时分析应用性能下降的原因，你就可以避免故障的产生，同时避免用户投诉。当然你也会有B点的基准线，比较跟平时有何不同，很快就知道应该检查网络还是服务器。 <br>对于ART还有什么不清楚地吗？或者大家平常还有其他用法？ <br>（编者：本来这次想写完第一天课程再共享，看到论坛中大家在催，就先写到这吧，过几天就可以把第一天全部内容发完） <br>（编者：范老师已经找过我了，他说他的MSN有很多陌生人，后来看了内容就知道是我写的，他说分享知识可以，但不要透露敏感信息，还说我比他讲得好，汗。。。。所以这次我没有完全按他的录音翻译，自己有所删节，但基本上是原汁原味。） <br>（编者：我发现写这个真的很累，因为有很多演示，很难写出来，最近很忙，我都没有忘记我的承诺，给我加油，好吗？） <br>（编者：所有PPT都市我自己做的，范老师的ppt是不给我们的，我很努力吧！） </p>
<img src ="http://www.cnitblog.com/peng/aggbug/33491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/peng/" target="_blank">鹏少</a> 2007-09-16 10:49 <a href="http://www.cnitblog.com/peng/articles/33491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(扫盲系列1)使用ARP分组检测处于混杂模式的网络节点</title><link>http://www.cnitblog.com/peng/articles/33490.html</link><dc:creator>鹏少</dc:creator><author>鹏少</author><pubDate>Sun, 16 Sep 2007 02:42:00 GMT</pubDate><guid>http://www.cnitblog.com/peng/articles/33490.html</guid><wfw:comment>http://www.cnitblog.com/peng/comments/33490.html</wfw:comment><comments>http://www.cnitblog.com/peng/articles/33490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/peng/comments/commentRss/33490.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/peng/services/trackbacks/33490.html</trackback:ping><description><![CDATA[经典转载<br>
<p>[这篇很经典！]</p>
<p>原著：Daiji Sanai<br>英文版翻译：Kelvin King-Pang Tsang [<a href="http://cs.cuc.edu.cn/linweiguo/archives/networks/promiscuous_detection_01.pdf"><u><font color=#0080c0>pdf</font></u></a>]<br>中文版翻译：nixe0n(译自英文版)</p>
<p>摘要<br>1.简介<br>2.网络嗅探的原理<br>3.检测混杂模式的基本概念<br>4.基础<br>1).硬件过滤器<br>2).ARP机制<br>5.检测处于混杂模式的节点<br>6.软件过滤器<br>1).Linux<br>2).Micro$oft Windows<br>7.混杂模式检测<br>8.检查所有网络节点<br>9.异常情况<br>1).旧网卡<br>2).3COM网卡<br>3).Windows Y2K分组捕获驱动模块</p>
<p><br>摘要</p>
<p>在一个局域网中，安全问题应该引起注意。当纯文本数据在网络上传输时，任何网络用户都会很容易地窃取这些信息。在网络上窃取数据就叫作嗅探 (sniffing)。通过嗅探网络，一个用户能够获得绝密文档的访问权限，窥探到任何人的隐私。在Internet上有很多自由散发的嗅探器软件可以实现上述目的。尽管进行网络嗅探非常容易，然而却没有很好的方法来检测这种恶意行为。本文将阐述PromiScan(一个能够有效地检测网络嗅探器的软件) 使用的检测机制。嗅探器为了能够截获网络上所有的分组，必须把网络接口卡(Network Interface Card,NIC)设置为混杂模式(promiscuous mode)。接着，网卡就能够接受网络上所有的分组，并将其送到系统内核。地址解析协议(Address Resolution Protocol,ARP)请求报文用来查询硬件地址到IP地址的解析。我们将使用这类分组来校验网卡是否被设置为混杂模式(promiscuous mode)。之所以会使用ARP请求分组是因为它适用于所有基于以太网的IPV4协议。在混杂模式(promiscuous mode)下，网卡不会阻塞目的地址不是自己的分组，而是照单全收，并将其传送给系统内核。然后，系统内核会返回包含错误信息的报文。基于这种机制，我们可以假造一些ARP请求报文发送到网络上的各个节点，没有处于混杂模式的网卡会阻塞这些报文，但是如果某些节点有回应，就表示这些节点的网卡处于混杂模式下。这些处于混杂模式的节点就可能运行嗅探器程序。这样就可以成功地检测到网络运行的嗅探器程序。</p>
<p><br>1.简介</p>
<p>在局域网中，嗅探行为已经成为网络安全的一个巨大威胁。通过网络嗅探，一些恶意用户能够很容易地窃取到绝密的文档和任何人的隐私。要实现上述目的非常容易，恶意用户只要从网络上下载嗅探器并安全到自己的计算机就可以了。然而，却没有一个很好的方法来检测网络上的嗅探器程序。本文将讨论使用地址解析协议 (Address Resolution Protocol)报文来有效地检测办公网络和校园网上的嗅探器程序。</p>
<p><br>2.网络嗅探的原理</p>
<p>局域网通常使用以太网进行连接。在以太网线缆上使用IP(IPV4)协议传输的传递的信息是明文传输的，除非使用了加密程序进行了加密。当一个人把信息发送到网络上，他会希望只有特定的用户才能收到这些信息。但是，非常不幸，以太网的工作机制为非验证用户提供了窃取这些数据的机会。以太网在进行信息传输时，会把分组送到各个网络节点，目的地址匹配的节点会接收这些分组，其它的网络节点只做简单的丢弃操作。而接收还是丢弃这些分组由以太网卡控制。在接收分组时，网卡会过滤出目的地址是自己的分组接收，而不是照单全收。在本文以后的部分我们将把网卡的这种过滤称为硬件过滤(Hardware Filter)。但是这只是在正常情况下，嗅探器使用另一种工作方式，它把自己的网卡设置为接收所有的网络分组，而不管分组的目的地址是否是自己。这种网卡模式叫作混杂模式(Promiscuous Mode)。</p>
<p><br>3.检测混杂模式的基本概念</p>
<p><br>在网络中，嗅探器接收所有的分组，而不发送任何非法分组。它不会妨碍网络数据的流动，因此很难对其进行检测。不过，处于混杂模式(promiscuous mode)网卡的状态很显然和处于普通模式下不同。在混杂模式下，应该被硬件过滤掉的分组文会进入到系统的内核。是否回应这种分组完全依赖与内核。</p>
<p>下面我们举一个现实世界中的例子，说明我们检测处于混杂模式网络节点的方法。设想一下，在一个会议室中正在举行一个会议。某个人把耳朵放在会议室就可以进行窃听(嗅探^_^)。当她(还是个女的，原文如此:P)进行窃听(嗅探)时，会屏住呼吸，安静地聆听会议室内所有的发言。然而，如果此时会议室内有人忽然叫窃听者的名字：&#8220;XX太太&#8221;，她就可能答应&#8220;唉&#8221;。这听起来有点好笑，但是完全可以用于网络嗅探行为的检测。网络进行网络嗅探的节点会接收网络的所有报文，因此其内核可能对某些本该被硬件过滤的分组作出错误回应。根据这个原理，我们可以通过检查节点对ARP报文的响应来检测网络的嗅探行为。</p>
<p><br>4.基础</p>
<p>1).硬件过滤器</p>
<p>首先，我们从处于混杂模式(promiscuous mode)下和普通模式下有何不同开始。以太网的地址是6个字节，制造商为每块网卡分配的地址在全世界是唯一的，因此理论上没有相同地址的网卡。在以太网上的所有通讯都是基于这种硬件地址。不过，网卡可以被设置为不同的过滤模式以接收不同种类的分组。下面就是以太网卡的过滤模式：</p>
<p><br>unicast: 网卡接收所有目的地址是自己的分组</p>
<p>broadcast: 接收所有广播分组，以太网广播分组的目的地址是FFFFFFFFFFFF。这种广播分组能够到达网络上的所有节点。</p>
<p>multicast: 接收目的地址为指定多投点递交(multicast)组地址的分组。网卡只接收其地址已经预先在多投点列表中注册的分组。</p>
<p>all multicast: 接收所有多投点递交广播分组。</p>
<p>promiscuous: 根本不检查目的地址，接收网络上所有的分组。</p>
<p><br>图- 1描述了硬件过滤器处于在正常情况下和在混杂模式下的区别。通常，网卡的硬件过滤器被设置为接收目为单投点递交(unicast)、广播 (broadcast)和多投点递交(multicast)地址1的分组。过滤器只接收目的地址为自己的地址、广播地址(FF FF FF FF FF FF)和多投点地址1(01 00 5E 00 00 01)的分组。</p>
<p><br>2).ARP机制</p>
<p>使用以太网连接的IP网络需要依靠以太网进行传输。只使用IP地址，报文是无法发送的。因此，在以太网上需要一种机制来提供IP地址和硬件地址之间的转换。这种机制就是地址解析协议(Address Resolution Protocol)。ARP属于网络层，和IP处于OSI模型的同一层。在IP网络上地址解析是不断进行的，所以ARP报文比较适合用来检测处于混杂模式 (promiscuous mode)的网络节点。</p>
<p>在下面的例子中，我们将讲述使用ARP报文是怎样解析IP地址的：</p>
<p>例如：网络上一台IP地址为192.168.1.1的PC(X)以太网地址是00-00-00-00-00-01，这台PC(X)需要向网络上另外一台IP地址为192.168.1.10的PC(Y)发送消息。在发送之前，X首先发出一个ARP请求包查询192.168.1.10对应的以太网地址。查询包的目的地址被设置为FF-FF-FF-FF-FF-FF(广播)，从而本地网络上的所有节点都可以收到这个包。收到之后，每个节点会检查这个ARP包查询的IP 地址和本机的IP地址是否匹配。如果不同，就忽略这个ARP包；如果匹配(Y)就向X发出应答。X收到应答之后就缓存Y的IP/硬件地址。然后，X就可以向Y发送实际的数据。</p>
<p><br>5.检测处于混杂模式的节点</p>
<p>上面讲到，报文的过滤状态是处于混杂模式状态和正常的网络节点的区别。当网卡被设置为混杂模式，本该被过滤掉的报文就会进入系统的内核。通过这种机制，我们可以检测到网络上处于混杂模式的节点：我们构造一个ARP查询包，其目的地址不是广播地址，然后向网络上的各个节点发送这个ARP查询包，最后通过各个节点的回应来判断是否处于混杂模式。</p>
<p>下面我们讨论一下整个ARP请求/响应的操作过程。首先，产生一个ARP查询包来解析192.168.1.10的硬件地址。为了使网络上的所有节点都能够收到这个查询包，把这个包的目的地址设置为广播地址。理论上，只有IP地址为192.168.1.10的网卡才能对这个查询包进行响应。</p>
<p>进一步设想，如果我们把这个查询包的目的地址(以太网地址)设置为另外的地址,而不是原来的广播地址又将如何？例如：我们把查询包的目的地址设置为00-00-00- 00-00-01会发生什么？处于正常模式下网络节点的以太网卡会认为这个查询包是发往其它主机的，其硬件过滤器会拒绝接收这个包；然而，如果这个网络节点(192.168.1.10)的以太网卡处于混杂模式(promiscuous mode)下，那么即使以太网地址不匹配，其硬件过滤器也不进行任何过滤，从而使这个查询包能够进入到系统的内核。因为这个节点的IP地址和查询包的要查询IP地址相同，其内核就会认为ARP查询包到达，应该作出应答。但是，另我们吃惊的是，这个处于混杂模式节点的内核不会应答ARPR查询包。这种出人意料的结果说明这个包被系统内核过滤掉了。在这里我们把这叫作软件过滤器。</p>
<p><br>再进一步，我们可以通过区别硬件过滤器和软件过滤器的不同特征来检测处于混杂模式的网络节点。硬件过滤器一般会阻塞所有无效的分组(这些分组显然不会进入系统内核)，因此能够通过硬件过滤器一般也能够通过软件过滤器，这种情况我们不多做讨论。现在我们需要构造应该被被硬件过滤器阻塞，但是却能够通过软件过滤器的报文。如果把这种报文送到各个网络节点，那么处于普通模式下的网络节点将不做应答；而处于混杂模式的节点会进行应答。</p>
<p><br>6.软件过滤器</p>
<p>软件过滤器依赖于操作系统的内核，因此有必要理解系统内核软件过滤器是如何工作的。Linux是开放源玛系统，因此我们能够获得其软件过滤机制。但是对于Micro$oft Windows我们只有凭经验猜测了:(。</p>
<p>1).Linux</p>
<p>在Linux的以太网驱动模块中，分组是以硬件地址分类的。</p>
<p><br>广播包<br>FF FF FF FF FF FF</p>
<p>多投点分组<br>所有的分组都有一个组标志位集合，不包括广播分组。</p>
<p>TO_US分组<br>目的地址和本机网卡相同的分组。</p>
<p>OTHERHOST分组<br>所有目的地址和本机网卡不同的分组。</p>
<p>现在，我们假设具有组标志位的所有分组都是广播分组。IP网络对应的以太网多投点分组的目的地址是01-00-5e-xx-xx-xx，而且，通过校验组标志位本来就不能对多投点分组进行分类。这个假设并不错误，因为01-00-5e-xx-xx-xx是一个基于IP的多投点地址，但是网卡硬件地址还用于其它高层协议。</p>
<p>下面，我们看一下ARP模块的代码。</p>
<p>if (in_dev == NULL ||<br>arp-&gt;ar_hln != dev-&gt;addr_len<br>dev-&gt;flags &amp; IFF_NOARP ||<br>skb-&gt;pkt_type == PACKET_OTHERHOST ||<br>skb-&gt;pkt_type == PACKET_LOOPBACK ||<br>arp-&gt;ar_pln != 4)<br>goto out;</p>
<p>Linux 内核的ARP模块拒绝所有OTHERHOST类型的分组。接着，ARP模块将处理广播、多投点和TO_US类型的分组。表1综合了硬件过滤器和软件过滤器对各种ARP分组的过滤处理，1说明：hw(hardware)、sw(software)、res.(response)、gr(group)。</p>
<p><br>下面，后我们将对这六硬件地址的分组进行详细描述：</p>
<p>TO_US<br>网卡在正常模式下，所有地址为TO_US的分组都能够通过精简过滤器和软件过滤器。因此，不管网卡是否处于混杂模式(promiscuous mode)下，ARP模块都会对其进行响应。</p>
<p>OTHERHOST<br>当网卡处于正常模式下，会拒绝所有地址为OTHERHOST的分组。即使网卡处于混杂模式(promiscuous mode)，这种分组也无法通过软件过滤器，因此这种ARP请求不会收到响应。</p>
<p>BROARDCAST<br>在正常模式下，BROARDCAST分组能够也能够通过硬件和软件过滤器，因此不能用于网络节点混杂模式的检测。</p>
<p>MULTICAST<br>在正常模式下，如果分组的硬件地址没有在多投点地址列表中注册，网卡将拒绝接收；但是，如果网卡处于混杂模式，这种分组将畅通无阻地穿过硬件过滤器和软件过滤器。因此，可以使用这种类型的分组来检测处于混杂模式的网络节点。</p>
<p>group bit<br>这种类型的分组既不属于BRODCAST类型也不属于MULTICAST类型，但是其硬件地址的组位(以太网地址的首字节低序第一位)置位即：01-00 -00-00-00-00。在正常模式下，网卡会拒绝接收此类分组；但是在混杂模式下，这种类型的分组能够通过硬件过滤器。而在Linux内核中，这种类型的分组被归类为多投点分组进行处理，能够穿过软件过滤器。因此，这种类型的分组也能够用于混杂模式检测。</p>
<p><br>2).Micro$oft Windows</p>
<p>Windows系统不是开放源码系统，因此不能从源代码分析其软件过滤行为。只好由实验来测试。在实验中，我们使用了以下的硬件地址：</p>
<p>FF-FF-FF-FF-FF-FF 广播地址<br>所有的网络节点都会接收这种分组。通常的ARP查询包使用这个地址。</p>
<p>FF-FF-FF-FF-FF-FE 伪广播地址<br>FF-FF-FF-FF-FF-FE是一种伪广播地址，它的最后一位丢失。这个地址被用来检查软件过滤器是否检查所有的地址位，是否应答。</p>
<p>FF-FF-00-00-00-00-00 16位伪广播地址<br>FF-FF-00-00-00-00-00只有前16位和真正的广播地址相同。如果过滤器函数只测试广播地址的第一个字，这个地址就可以归入广播地址。</p>
<p>FF-00-00-00-00-00 8位伪广播地址<br>这个地址只有前8位和广播地址相同，如果过滤器函数只检查广播地址的首字节，它也可以归入广播地址类。</p>
<p>01-00-00-00-00-00 多投点标记置位地址<br>这个地址只有多投点标记位(以太网地址的首字节低序位)被置位，用来检查过滤器函数是否也象Linux一样把它作为多投点地址处理。</p>
<p>01-00-5E-00-00-00 多投点地址0<br>多投点地址0并不常用，因此我们使用这个地址作为没有在网卡多投点地址列表中注册的多投点地址。正常情况下，硬件过滤器应该拒绝接收这种分组。但是，如果软件过滤器不能检查所有的地址位，这类分组就可能被归类到多投点地址。因此，如果网卡处于混杂模式(promiscuous mode)，内核就会进行应答。</p>
<p>01-00-5E-00-00-01 多投点地址1<br>局域网上的所有网络节点都应该接收多投点地址1类型的分组。换句话说，默认情况下硬件过滤器允许这类分组通过。但是可以由于网卡不支持多投点模式而不应答。因此，这类分组可以用于检查主机是否支持多投点地址。</p>
<p><br>即使结果：</p>
<p>对于这7种类型地址的测试结果如表2所示。测试是针对Windows85/98/ME/2000和Linux。不出所料，网卡处于正常模式下，内核会对所有地址为广播地址和多投点地址1的分组进行回应。</p>
<p>然而，当网卡处于混杂模式下时，每种操作系统的测试结果不尽相同。Windows95/98/ME会响应31、16、8位伪广播地址的分组。因此，我们可以认为Window9x系列操作系统的软件过滤器只通过检测一位来判断分组地址是否是广播地址。</p>
<p>Windows2000对地址为31、16位伪广播地址的分组进行响应。因此，我们可以认为WindowsY2K检查地址的8位来判断分组地址是否为广播地址。</p>
<p>Linux内核对所有七种地址的分组都会进行响应。</p>
<p>7.混杂模式检测</p>
<p>我们可以把这个测试结果用于局域网处于混杂模式节点的检测。下面是具体检测过程：</p>
<p>1).我们需要检测IP地址A的主机是否处于混杂模式。我们首先需要构造如下格式的ARP分组和以太网帧：</p>
<p>ARP分组：</p>
<p>目的以太网地址 00 00 00 00 00 00(说明1)<br>发送方以太网地址 00 11 22 33 44 55(说明2)<br>高层协议类型 08 00(IP)<br>硬件类型 00 01(以太网)<br>硬件地址长度 06(以太网地址长度)<br>IP地址长度 04<br>发送方的IP地址 本机IP地址<br>目标的IP地址 被检测主机的IP地址<br>ARP操作码 00 01(ARP请求01、ARP应答02)</p>
<p><br>以太网帧:</p>
<p>协议类型 08 06(ARP)<br>发送方的硬件地址 本机以太网卡地址<br>目标硬件地址 FF FF FF FF FF FE</p>
<p><br>说明1:这时ARP要查询的以太网地址，全部填0或者1都可以。<br>说明2:用自己的以太网地址代替。</p>
<p><br>2).分组构造完成后，我们可以把它发送到网络上。</p>
<p>3).现在我们需要等待目标主机的反应。如果目标主机处于正常状态，这个分组就会被阻塞；但是如果处于混杂模式(promiscuous mode)下，我们就会收到应答。</p>
<p><br>8.检查所有网络节点</p>
<p>只要顺序使用第七节叙述的检测方法，我们就可能检测出所有处于混杂模式下的网络节点。但是，某些情况下，会使这种检测方法失效。</p>
<p><br>9.异常情况</p>
<p>上面讲到有一些情况不能使用这种方式进行混杂模式检测。这些异常情况包括：</p>
<p>1).旧网卡</p>
<p>有些旧网卡不支持多投点列表，例如：3COM EtherlinkIII。分组不经过硬件过滤器的检查就进入软件过滤器，</p>
<p>2).3COM网卡</p>
<p>安装在LInux主机的3COM 3c905网卡，默认情况下被设置为接收所有的多投点分组。因此，我们无法区别混杂模式和多投点模式。造成这种异常的原因是这种网卡的Linux驱动模块不支持多投点列表，网卡就会接收所有多投点分组。注意：Linux安装程序使用3c59x.o作为这种网卡的驱动模块。如果把驱动模块改为 3c905x.o可以解决这个问题。</p>
<p>3).Windows Y2K分组捕获驱动模块</p>
<p>当WindowsY2K分组捕获驱动模块是动态加载的，也会产生异常情况。WinPcap2.1(2.01不同)和SMS是用于WindowsY2K的两种动态加载分组捕获驱动模块。当它们安装到WindowsY2K系统中，会有一些特别的反应。即使网卡不处于混杂模式下，也会对地址为16为伪广播地址的分组进行响应(使用这两种驱动模块的嗅探器也将无法准确操作)。也就是说，即使嗅探器没有运行也照样可以检测到。可能是Micro$oft为了方便混杂模式的检测有意为之。</p>
<img src ="http://www.cnitblog.com/peng/aggbug/33490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/peng/" target="_blank">鹏少</a> 2007-09-16 10:42 <a href="http://www.cnitblog.com/peng/articles/33490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>