书名:精通Wireshark
ISBN:978-7-115-44969-6
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
• 著 [印度] Charit Mishra
译 YESLAB工作室
责任编辑 傅道坤
• 人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
• 读者服务热线:(010)81055410
反盗版热线:(010)81055315
Copyright © Packt Publishing 2016. First published in the English language under the title Mastering Wireshark.
All Rights Reserved.
本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。
版权所有,侵权必究。
本书按照由浅至深的次序,从网络的基本概念和Wireshark的基本界面说起,介绍了在不同环境中使用Wireshark解决各类网络中常见问题的方法与技巧。
本书共分为9章,涵盖了Wireshark数据包分析简介,Wireshark提供的过滤数据的不同方式,Wireshark中的高级特性,用Wireshark监控应用层协议并分析传输层协议的工作机制,用Wireshark分析无线流量,用Wireshark分析与网络安全相关的问题,配置Wireshark以进行网络排错,Wireshark v2版本的新增特性等内容。
本书内容实用详尽,贴近真实的网络排错、运维需求,适合网络管理人员、技术支持人员、安全从业人员阅读,还适合高校计算机网络、信息安全专业的师生阅读。
Charit Mishra是一位技术顾问与渗透测试专家,供职于全球顶尖的咨询公司Protiviti。他的工作职责是帮助客户找出网络中的安全漏洞,他无比热爱自己的这份工作。他凭借自己在安全方面的实践经验考取了大量顶级行业认证,如OSCP、CEH、CompTIA Security+和CCNA R&S。此外,他也拥有计算机科学领域的硕士学位。他曾经在各类学术会议和民间组织中就信息安全与渗透测试发表过专业演讲。读者可以通过LinkedIn(https://ae.linkedin.com/in/charitmishra)和Twitter(@charit0819)来与他取得联系。
首先,我要对挚爱的双亲和姐姐Ayushi表达自己最深的谢意。他们对我无条件的支持、他们在我人生重大抉择时期为我提供的专业指导意见,以及他们给予我的理解与鼓励,成就了我的一切。若没有他们的智慧与建议,我如今的一切成就皆为梦呓。
我也要感谢我的挚友和导师Piyush Verma先生,感谢他给予我的信任,以及在我迷茫时给予我的引导。我还要感谢我的好友们,尤其要感谢Siddarth Pandey先生、Arham Husain先生、Bharath Methari先生、Dileep Mishra先生和我在巴基斯坦的至交Haider Ali Chughtai先生。我的一切成就离不开他们共同的帮助与激励。如果我忘记提到哪位朋友,在此表示歉意。
最后,我要感谢Packt Publishing这个卓越的团队,他们对本书出版所提供的支持从未间断。感谢所有参与了本书审校的同仁,你们提升了这本书的质量。
恰如一代宗师斯瓦米·维帷卡南达所言:“如有一日,你顺风顺水,即可断言,前路必为歧途。”
Anish Nath经常在YouTube上传关于安全技术、黑客技术以及其他云相关技术的视频,读者可以访问https://goo.gl/sbJkuX来浏览这些内容。
在我们周围,几乎每台设备都已经与其他设备通过网络连接在了一起。连接的目的或为共享信息,或为给其他设备提供支持。如果头脑中拥有了这样一幅图景,你认为网络中最重要的环节是哪一部分呢?显然,一定不是设备之间的物理连接。
本书的着眼点是如何使用Wireshark来理解网络中最常见的异常情况,并对这些情况进行排错。本书有可能是你网络/流量/数据包分析的起点,但你有可能最终会称为这一代人的“救世主”,成为你所在团队的超级英雄,你可以轻松帮助人们解决在网络连接、网络管理和计算机取证等方面遇到的疑难。如果你的日常工作就需要和计算机网络打交道,那么本书可以成为好的开始。本书会从最基本的概念开始说起,循序渐进带领读者进入最有深度的概念。
在本书中,我尽可能涵盖了大家在排错中最有可能会遇到的问题,同时提供了一些上手练习的案例,以便帮助读者更好地掌握这些概念。如果能够掌握数据包分析的方法,读者就可以学会如何一路从应用排错到网络的线缆。本书会告诉读者,如何让网络中流动的数据变得更加容易为我们所理解。在本书中,读者一定会读到一些很有意思的章节,包括如何对缓慢的网络进行排错,如何通过WiFi执行数据包分析,如何对恶意软件进行分析。也不要忘记本书在介绍Wireshark 2.0时提到的那些特性。祝你排错愉快!
第1章,欢迎来到Wireshark数据包分析的世界,会向读者介绍TCP/IP模型的基本概念,帮助读者熟悉Wireshark的GUI界面,以及抓包的示例。在这一章中,读者会学习到如何设置网络分析软件来对网络进行分析。
第2章,用Wireshark过滤出我们需要的数据,会介绍Wireshark提供的两种不同过滤方式,这两种方式分别称为抓包过滤器和显示过滤器。我们在这一章中会介绍如何创建和使用不同的配置文件。读者应该熟悉Wireshark提供的丰富界面,并且能够开始抓取自己想要抓到的数据包。
第3章,掌握Wireshark的高级特性,会帮助读者了解Wireshark的Statistics(统计数据)菜单背后的内容,并且掌握Wireshark携带的各种命令行工具的使用方法。读者在这一章中会学习到如何准备各种图标和数据流拓扑,最重要的是,如何成为一名命令行专家。
第4章,监控应用层协议,会帮助读者理解并分析各种应用层协议的正常行为和异常行为。在这一章中,我们会简单探讨管理员可以用来理解这些协议行为的方法。我们都已经掌握了一些基本的概念,但是你想过应用层协议出现问题的几率有多大吗?在本章中,你会了解到如何处理应用层协议的问题。
第5章,分析传输层协议,会介绍TCP和UDP协议工作原理,解释它们如何进行通信,它们分别面临着怎样的问题,以及如何使用Wireshark来对它们进行分析。读者在这一章要成为传输层的诊断专家,能够轻松找出网络中的常见故障,证明自己的价值。
第6章,分析无线流量,会介绍如何对无线流量进行分析,如何找到无线流量中的问题。我会带领读者进入无线协议分析的世界,让读者成为WiFi“忍者”。
第7章,网络安全分析,会向读者展示如何使用Wireshark来分析与网络安全相关的问题,比如恶意软件流量、网络入侵、踩点攻击等。在这一章中,读者会学到如何找出网络安全的异常状态,当场抓住入侵网络的黑客,搞得他们痛哭流涕,体验一把如何解决CTF的难题。
第8章,排错,会向读者传授如何配置和使用Wireshark来对网络进行排错。在这一章中,读者会掌握给各种网络问题(比如网速过慢)进行排错的艺术。读者还会通过最常见的日常案例,学习到如何对网络问题进行排错。
第9章,Wireshark v2简介,会通过一些实践案例,向读者展示Wireshark最新版本的一些强大的特性,比如USBPcap、智能滚动条、图形提升等。
你只需要一个可以正常使用的Wireshark安装程序,以及对一些网络协议的基本理解。能够大致熟悉一些网络协议会对阅读本书很有帮助,不熟悉也并不影响阅读。
你对网络中发生的一切感到好奇吗?在你无法解决网络中发生的故障时,你会感到懊恼吗?如果你对这类问题的答案是肯定的,你就是本书的目标读者。
本书是写给那些对网络和安全技术抱有热情的读者的,这些人应该有兴趣深入理解网络的内部工作方式,希望能够掌握Wireshark使用方法,但并不了解这款软件的全部功能。
在这一章里,我们会介绍TCP/IP模型的基本概念,并在帮助读者熟悉Wireshark GUI界面的同时,向读者展示一个抓包的实例。在这一章中,读者会学到下列内容:
Wireshark是最强大的抓包软件之一,这款软件不仅能让系统/网络管理员的工作变得简单轻松,而且可以让传播安全福音的技术群体从中获益。Wireshark也称为协议分析软件,它可以帮助IT从业者分析网络级别的故障。这种工具在优化网络性能方面也可以发挥重要的作用。
Wireshark可以对网络数据包进行细致入微地分析,显示出数据包的详细内容,并由技术人员判断这些信息是否满足相关用户的需求。如果你也是每天都要和包交换网络打交道的芸芸众生之一,那么Wireshark就是为你量身订制的工具,它可以在你进行各类排错工作时大显身手。
下面,我们来讨论一下网络领域最重要的话题。要想理解这些技术之间是如何关联起来的,读者就必须理解TCP/IP模型的基本概念。即使是计算机世界也需要通过一系列的规则和规范才能完成通信,这就是网络协议的作用之所在了。网络协议的作用正是管理数据包/数据分段/数据帧如何通过主机之间的一条专用通道进行传输。
TCP/IP模型最初称为DoD模型,因为这个项目当初是由美国国防部(United States Department of Defense)负责统筹的。TCP/IP模型涉及当前数据包生命周期的方方面面,它涵盖了数据包在始发节点创建、封装一系列信息(PDU)、逐层进行处理、在网络中准备进行发送、通过中间节点向目的设备路由、通过解封装剔除添加的信息还原为最初的数据包等全部的操作过程。
如果读者对于网络协议的基本概念还感到有些模棱两可,推荐读者先复习一下这些概念,然后再阅读后面的内容,因为阅读本书需要读者对TCP/UDP协议相对比较熟悉。在复习之后,读者自己就应该能够想象出上面我们提供的数据包处理过程了。
如下所示,TCP/IP模型中包含了4层,每一层均包含了一系列对应的协议。每个协议都自己的作用,这些协议也都是通过这个模型来对接业界标准的。
第一层是应用层,这一层直接和用户及其他网络层协议进行互动;这一层的重点在于将数据通过用户可以理解的方式呈现给用户。应用层也会追踪用户连接的Web会话,并且使用一系列的协议帮助应用层连接到TCP/IP模型中的其他各层。在本书当中,我们会介绍下面几种非常常用的应用层协议:
第二次是传输层。这一层唯一的作用是创建两台主机通信时使用的套接字(读者应该已经意识到网络套接字对于通信的重要性了),这是在两台设备之间创建出一条独立连接的关键。
两台主机对于同一个通信实例可以建立多条连接,这是将IP地址和端口号结合起来实现的。在广域网通信中需要使用IP地址(而在局域网通信中,数据传输实际上是通过MAC地址来实现的),而一台设备之所以可以与多台设备通过多条信道进行通信,这完全是借助端口号来实现的。除了某些限制使用的端口号之外,每个系统都可以在通信的过程中使用一个随机的端口号。
这一层也会充当两台主机之间通信的骨干。这一层中最常用的协议是TCP和UDP,它们的概念分别如下所示。
第三层是互联网层,这一层关注的重点是数据的往返传输。这一层最主要的协议就是IP(互联网协议),它同时也是这一层最重要的协议。IP可以给数据提供路由功能,正是因为IP协议提供的路由功能,很多数据包才能最终到达自己的目的地。这一层还包括一些其他的协议,如ICMP和IGMP。
最后一层是链路层(这一层常常被人们称为网络接口层),这一层与网络硬件相连。虽然TCP/IP协议栈中并没有在这一层定义任何协议,但这一层其实实施了很多协议,如地址解析协议(ARP)和点到点协议(PPP)。这一层关注的是信息的比特数据如何在物理线缆中进行传输。这一层会建立并终结连接,会将信号由模拟信号转化为数字信号,反之亦然。网桥和交换机这类设备就工作在这一层。
客户端和服务器将IP地址和MAC地址结合起来使用是通信过程的核心。在这两个地址中,IP地址是网关分配给设备或者由管理员静态分配的,而MAC地址则来自于网络接口卡(NIC),每一个参与主机通信的设备都拥有MAC地址。在数据从应用层向链路层处理的过程中,会有很多数据以数据包头部或数据包尾部的形式添加到传输的数据上,这需要TCP/IP模型中的不同分层相互协调。添加数据包头部的处理过程称为数据封装,网络模型会在这个过程中的最后创建出协议数据单元(PDU)。
协议数据单元中包括要发送的信息,以及各个协议以头部或尾部的形式向数据包添加的信息。在PDU到达最底层的时候,它就已经封装好了要进行传输所必须具备的所有信息。当数据到达目的设备的时候,封装的头部和尾部的信息就会在TCP/IP模型自底向上的处理过程中,被目的设备逐个摘除。
图1-1所示为封装的过程。
图1-1 数据封装
数据包分析(也称为数据包嗅探或协议分析)的作用是抓取在网络(以太网或WiFi)传输中的数据包,并且对其中的信息进行解答的过程,其目的在于了解网络中正在发生的情况。数据包分析需要借助像Wireshark这样的协议分析软件来实现,这些软件可以在互联网上进行下载。其中有些软件是免费的,也有一些软件需要付费才能用于商业目的。在本书中,我们会使用Wireshark来进行网络分析。Wireshark是一款开源软件,同时也是互联网上最优秀的免费网络分析软件。
在当今网络环境中,各式各样的问题都有可能发生。因此,管理员需要时刻准备好一套最新的趁手工具,以便应对网络中有可能发生的一切情况。这些问题可能始自数据包级别,然后逐渐发展为大规模的网络中断。哪怕系统上运行的最好的协议和服务也有可能出现问题,并且给网络造成不良的影响。要想找出问题的根源,我们必须对数据包级别进行问题分析,才能对问题拥有更加深入的理解。如果读者的工作是网络运维,那就一定要对数据包进行观察。数据包分析可以在以下这些方面发挥重要的作用。
要想发现自己的网络有可能受到哪些恶意攻击的侵害,并对这些攻击进行分析、控制/监控,管理员要时刻留意网络中有可能出现的安全威胁。
在对数据包进行分析的时候,读者应该思考下面几点:应该对哪些协议进行分析?自己最擅长使用的软件是什么?哪款网络分析软件最能契合这个网络的需求?经验在这里发挥着重要的作用;只要开始使用Wireshark,读者就会逐渐对通过这种方式进行排错和数据包分析,涌现出新的想法。
数据包分析软件可以用来分析常见的网络层协议(如IP和ICMP)、传输层协议(如TCP和UDP)和应用层协议(如DNS和HTTP)。
由于Wireshark这款软件的GUI界面会提供海量的信息,因此这个界面对有些用户来说或许显得有些复杂,甚至会有用户将这一点视为这款软件的缺点之一。不过,有一些CUI/GUI工具可以解决这个问题。这些工具在使用上都很简单,因为它们的界面更加简洁,这类工具包括TShark、tcpdump、Fiddler等。
在抓取流量时,我们既可以抓取所有的原始流量,也可以只抓取数据包的头部,而忽略数据包的内容负载。抓取到的信息是将原数据经过解码后,以人类可以阅读的方式呈现出来的。这样用户就可以用一种更加直观的方式,来阅读网络中交互的数据了。
Wireshark是一款数据包嗅探软件。全世界的IT从业者都可以用这款软件来对网络进行分析。读者可以从下面的站点免费下载到Wireshark:https://www.wireshark.org/download.html。
很多平台上都可以安装Wireshark,其中包括Linux、Mac和(大多数版本的)Windows系统。Wireshark是一款开源软件,也就是说这款软件的代码和必需的库都可以在我们之前刚刚提到的那个站点中下载到。
使用数据包嗅探软件时,有一个关键因素需要考虑,那就是要将数据包嗅探软件部署在物理网络的什么位置,才能在最大程度上利用这个软件。人们在提到数据包嗅探软件的时候,常常说这是一种插入到线缆中的软件。
既然是插入到线缆中,那么使用这类软件就不能只是在系统中安装Wireshark;在使用数据包嗅探软件之前,管理员还有一些内容应该知道。比如,要把嗅探软件部署在企业基础设施的什么位置才算合理,管理员也要了解不同类型的网络设备,因为不同的网络设备(集线器、交换机、路由器和防火墙)在工作方式上也各不相同。管理员应该知道这些设备分别如何工作,不同类型的网络设备如何处理网络流量。把嗅探软件部署在合理的位置,可以对管理员的数据包分析体验产生深度的影响。如果选择的位置正确,可以显著影响数据包分析的结果。
在部署了数据包嗅探软件之后,管理员要确认这台设备的NIC(网络接口卡)可以支持杂合的工作方式。在启用了杂合的工作方式之后,这个网络接口卡就不仅可以学习到以这台设备作为最终目的地的数据包,而且可以学习那些穿越这台设备的数据包了。网络中的每台客户端都可以抓取并且分析网络中的广播流量。网络设备可以通过广播的方式发送很多类型的流量,支持杂合模式的接口都可以监听得到这些流量。
ARP协议的流量也是通过广播发送的。地址解析协议的作用是将MAC地址解析为IP地址,反之亦然。像交换机这样的设备会向所有设备发送ARP数据包,希望它请求的设备用自己的MAC地址作出响应。通过这种方式,交换机会渐渐地获得一个MAC地址列表,以及这些MAC地址对应的IP地址,这个表称为CAM表(全称为内容可寻址存储器表)。现在,只要主机希望通过局域网和其他设备进行通信,就会由交换机将所需的信息发送给发给方。所以,不同设备的IP地址、MAC地址等信息都可以通过抓取ARP流量进行查看和记录。
Wireshark是通过libcap/Winpcap驱动实现抓包功能的,所以管理员可以将自己的NIC切换为杂合模式。只有在一种情况下,管理员才不希望在杂合模式下进行抓包,那就是数据包直接发送给这台设备的情况。在基于Windows的系统中,应该提升管理员权限来对数据包进行嗅探和分析。所有协议分析软件都会按照下面三大步骤进行操作,这三大部分是收集、转换和分析。下面我们分别对这三步进行介绍。
如果读者希望理解抓取和分析数据的进程,那就真的需要非常精通网络协议,并且十分熟悉它们的工作方式,因为通过网络完成的通信就是由这些协议(如ARP、动态主机控制协议[DHCP]、域名服务[DNS]、传输控制协议[TCP]、互联网协议[IP]、HTTP等)进行控制的。
协议是指控制两台网络设备间的通信进程,以及管理底层操作环境的规则与规范。每个协议的复杂程度各不相同,这取决于各个协议实施的环境与方式。总地来说,所有协议的工作方式都大同小异,每个协议都会发送请求,然后等待对方进行确认,当设备接收到确认消息之后,通信就会建立起来。
在设备之间成功传输数据之后,连接就会适时地终止,而这次通信也就会被设备标记为是一次成功的通信,通信期间一个比特都没有丢失。数据在进行传输时,协议也需要负责维系通信的完整性。也就是说,如果发送方发送了信息abc,接收方在接收时也应该按照这个顺序接收到这个信息。如果信息在传输的过程中遭到了篡改,这也就表示传输信息的协议本身是不可靠的。分析所有这些任务是所有网络协议分析软件的基本功能。
抓取网络数据包有很多不同的方法。管理员可以根据需求的不同,有针对性地对协议分析软件进行配置,并将它部署在网络中的某个位置。
基于集线器的网络是最容易抓取数据包的,在这种环境中管理员可以把协议分析软件部署在任何地方,因为集线器会将所有数据包广播到它们所在的整个网络中。有鉴于此,我们根本不用考虑在哪里部署数据包分析软件。然而,集线器亦有其弱点,由于数据包之间会发生冲突,因此集线器网络的性能也会显著降低。由于集线器中没有任何按照优先级转发数据包的机制,所以任何希望发送数据包的人都可以通过HUB(中心设备)发起连接,并且开始传输数据包。一般来说,如果有超过一台设备同时发送数据包,数据包之间就会发生冲突。此时,网络就会通知发送方重新发送之前的数据包。在这种情况下,用户就会感受到流量拥塞和带宽过量占用等问题。
在交换机连接的网络中会出现很多限制。有鉴于此,在这种环境中进行数据包分析稍显复杂。下面会介绍一些解决方案(如端口镜像和插拔网络),这些解决方案可以帮助管理员摆脱这些限制,简化网络管理的工作。
在使用端口镜像技术时,只要管理员可以接触到访问设备(路由器/交换机)的命令行配置界面或者Web界面,就可以轻松配置端口镜像技术。
下面,我们通过一个逻辑环境来简化一下这项技术的作用。假如我们有一台拥有24个端口的交换机,这台交换机连接了8台PC(PC1~PC8)。此时,这台交换机还剩下15个端口。我们可以将数据包分析软件部署在连接这15个端口中的任何一个端口的设备上,然后配置端口镜像技术。这项技术可以将管理员所指定的交换机端口所转发的所有流量,复制给协议分析软件所在的那个端口。这样,协议分析软件就可以抓取到被映射端口所传输的所有流量了。
一旦配置完成,我们就可以轻松对被映射端口所传输的每一条信息一一进行分析了。在所有配置方案中,这种方法无疑是最为简单的;读者在实现这种方案时,唯一应该提前具备的知识就是了解如何通过命令行界面来配置交换机。当今,管理员往往可以通过GUI界面来进行配置,如果读者要处理的交换机就是通过GUI进行管理的,那就通过GUI进行配置吧。在图1-2中,我们用一种比较简单的方式介绍了端口镜像技术的作用。
图1-2 端口镜像技术
如果这台交换机不支持端口镜像技术的话,管理员就只能通过插拔的方式(Hubbing out)来抓取数据包了。如果采用这种方法,那么管理员就真的需要找到那台要抓取其数据包的目标PC,把它连接局域网的那根网线拔掉,然后用一台集线器连接交换机,接下来再将安装协议分析软件的计算机和目标PC连接到集线器上,通过这种方式将这两台设备连接到同一个网络 当中。
现在,协议分析软件和目标设备处于同一个广播域当中。因此,协议分析软件可以轻松抓取到所有去往这台目标PC以及所有从这台目标PC发送出来的数据包。但是,管理员一定要保证目标设备的用户知道自己插拔设备的过程之中造成的丢包,是因为自己试图进行数据包分析而插拔设备所造成的。图1-3可以让读者更容易理解我们在这里介绍的概念。
图1-3 插拔设备
抓取网络流量还有一种不道德的方式,那就是在传输信息的双方之间冒充另一台设备。比如说,我们的默认网关位于192.168.1.1,而客户端则位于192.168.1.2。这两台设备一定都拥有一个本地ARP缓存,这样方便这两台设备相互发送数据包,而不需要在局域网中传输多余的管理流量。接下来,我们的问题就成了ARP缓存会以什么形式、保存哪些信息呢?不妨告诉你,命令arp –a可以查看ARP缓存,这条命令会显示出某个特定IP地址所对应的MAC地址。输入命令arp –a(这条命令在绝大多数平台上都没有什么变化)之后,系统会显示出一个表格,其中包含了设备的IP地址和MAC地址。图1-4和图1-5显示了ARP毒化的常规原理。
图1-4 ARP毒化(正常的情况)
图1-5 ARP毒化(设备被毒化的情况)
Before ARP Cache
192.68.1.1 – (Server)
192.68.1.2 – AA:BB:EE
192.68.1.3 – AA:BB:DD
192.68.1.2 – (Client)
192.68.1.1 – AA:BB:CC
192.68.1.3 – AA:BB:DD
192.68.1.3 – (Attacker)
192.68.1.1 – AA:BB:CC
192.68.1.2 – AA:BB:EE
既然已经看到了ARP缓存中所存储的信息,下面我们可以尝试来对信息进行毒化。
After ARP Cache
192.68.1.1 – (Server)
192.68.1.2 – AA:BB:DD
192.68.1.3 – AA:BB:DD
192.68.1.2 – (Client)
192.68.1.1 – AA:BB:DD
192.68.1.3 – AA:BB:DD
192.68.1.3 – (Attacker)
192.68.1.1 – AA:BB:CC
192.68.1.2 – AA:BB:EE
既然我们已经理解了ARP协议的重要性,以及这个协议的工作方式,下面我们可以尝试用攻击者PC的MAC地址来毒化默认网关和客户端的ARP缓存。说得简单一点,就是我们要用攻击者的MAC地址来替换掉默认网关ARP缓存中的客户端MAC地址。这样一来,所有从默认网关发往客户端的数据包,以及所有从客户端发往默认网关的数据包,就都会被发送给攻击者的设备了。
如果攻击者使用的设备上配置了端口转发,那么这台设备接收到的数据包就会被转发给真正的目的设备。在这个过程中,客户端和默认网关都不会发现数据包在传输的过程中遭到了嗅探攻击。
除了这两种方法之外,市面上还有很多硬件可以选择。这类设备一般称为分线器(taps),可以部署在任意两台设备之间,对它们之间的流量进行嗅探和分析。虽然在有些场合中,使用这种方法来抓取流量效率很高,但这种方法只适用于可控的环境中,因为有些人会出于恶意在企业网络中用这种方法抓取数据包。
在路由环境中,进行数据包分析最重要的一点是要把数据包分析软件部署在合理的位置,这样才能获取到管理员所需的信息。在路由环境中分析数据包对技术的要求相对比较高,有时管理员需要反复思考要在哪里部署协议分析软件。假设有下面这样一个包含3台路由器的路由环境。
路由器1、路由器2和路由器3处于同一个网络当中;每台路由器都连接了2~3台PC。其中路由器1充当根节点,同时控制其连接的节点(路由器2和路由器3)。路由器3的客户端不能连接到路由器1的客户端。要解决这个问题,这个机构的管理员将数据包分析软件部署在了路由器3所在的区域中。
过了一段时间之后,管理员收集到了不少数据包;但管理员仍然无法检测出网络中的异常情况。因此,他决定把数据包分析软件迁移到网络中的另一个区域。在将数据包分析软件移动到路由器1所在的区域之后,管理员可以看到很多自己之前就在寻找的有用数据流。这是一种移动协议分析软件的简单案例,移动协议分析软件所在的位置在某些场合对于解决问题很有帮助,因为把协议分析软件部署在网络架构中是一项相当重要的任务。
读到这里,希望读者已经了解到了Wireshark的使用方法。接下来介绍一下这款软件的GUI界面,以及如何初始化抓包的进程。
如果读者的计算机上还没有安装Wireshark,可以在https://www.wireshark.org/download.html免费下载一份安装文件。要想搞清楚本书中介绍的内容,读者同样需要熟悉这款软件的界面。
但愿我不是唯一一个因Wireshark在抓包时操作十分简便,而对这款软件深感着迷的人。下面简单介绍一下人们选择Wireshark这款软件来执行数据包分析的几大原因。
在开始讨论Wireshark的各类特性之前,先借这个机会来解释一下Wireshark的历史,以及这款软件的诞生。
Wireshark是在20世纪90年代末问世的。一位来自堪萨斯城的毕业生Combs研发出了Ethereal(Wireshark的基本版),在Combs做出这项伟大的发明时,他也找到了一份全职工作,于是他签订了一份正式的工作合同。当他在这个职位上工作了几年之后,Combs决定离职,他希望继续开发Ethereal这款软件,因为这是他的梦想。不幸的是,根据法律条款,Combs的发明也属于企业私有的软件。尽管如此,Combs还是选择了离职并继续开发Ethereal的新版本,他把新版的Ethereal命名为了Wireshark。从2006年开始,Wireshark就一直处于积极的开发状态,并且在世界范围内得到了广泛的应用。这款软件支持大量的协议(支持超过800种协议),这都是当今网络中使用相当广泛的协议。
读者在自己系统中安装Wireshark的流程如下。
1.在本书中,我使用的是一台Mac PC。如果读者使用的是其他系统平台,安装的流程也是一样的。在有些系统(如Kali Linux)中,会有一个预装的Wireshark版本。
2.所以,如果读者使用的是Macintosh,那么你要做的第一件事就是下载X11 Quartz(XQuartz-2.7.7),它可以模拟出一个运行Wireshark的环境(Windows系统的用户需要下载与处理器相兼容的版本)。
3.现在,我们就可以开始安装Wireshark了(Wireshark 1.12.6 Intel 64)。Wireshark的安装软件在本书前文中就已经要求读者下载了。
4.在这些软件安装成功后,需要重启计算机。
5.PC重新启动之后,需要启动Wireshark。一旦启动了数据包分析软件,读者会看到软件自己启动了X11服务器。无需理会,把它留在后台 即可。
6.一旦软件成功启动,读者就应该看到图1-6所示的界面。
图1-6 Wireshark的界面
在使用这个系统第一次抓取数据包之前,需要熟悉一下这款软件中可以使用的选项和菜单。
Wireshark的GUI界面分为6大部分,下面一一进行解释。
下面的截图可以帮助读者熟悉应用界面中的各个窗格,在继续阅读本书之前,读者一定要保证自己已经对这些区域耳熟能详。
在工具栏中,我们可以看到一些有用的工具。下面对这些工具进行简单的说明。
在选择了抓包的接口之后,用户有时候在数据包列表面板中看不到任何数据包。造成这种现象的原因很多,其中包括下面几项:
在启动Wireshark应用之后,用户会看到类似于图1-7所示的界面。虽然这个界面乍看之下并不是特别有吸引力,但真正让这个界面魅力无穷的其实是流经软件的数据包。没错,我说的就是抓包这件事儿。
图1-7 Wireshark的抓包界面
在学习了Wireshark的基本概念,看到了Wireshark的安装方式之后,估计读者应该已经对开始抓包跃跃欲试了。下面会按照开始抓包/停止抓包/保存文件的流程,带领读者完成人生中首次抓包之旅。
1.打开Wireshark应用。
2.选择要侦听的接口(见图1-8)。
图1-8 接口界面
3.在点击Start之前,我们可以点击Options按钮,这里可以让用户对抓包的进程进行一些自定义;不过在这里,我们会使用默认的配置。
要保证启动了promiscuous(杂合)模式(见图1-9),这样才能抓到那些并不是以这台设备作为最终目的地的数据包。
图1-9 自定义抓包的界面
4.点击Start按钮启动抓包进程。
5.打开浏览器。
6.随便访问一个网站(见图1-10)。
图1-10 Wireshark的官方站点
7.回到Wireshark的界面;如果一切正常的话,此时读者应该在Wireshark GUI界面的数据包列表面板中看到了大量的数据包。
要想让软件停止抓包,只需要在工具栏中点击stop capture按钮或者在Capture菜单栏中点击Stop按钮(见图1-11)。
图1-11 停止抓包
8.我知道这个界面提供的信息对于读者来说有点复杂,别担心,我来将这些信息化繁为简。
9.其实,数据包分析是指抓取到数据包(也就是进行数据包过滤)之后的工作。接下来,我会通过后面的章节详细介绍数据包过滤的方法。
10.现在,最后一步是将抓包的结果保存起来以备日后使用。
11.将文件用默认的.pcapng扩展名保存到文件夹中。
如果您从头至尾读完了上面的操作步骤,我希望您能够创建出自己的第一个抓包文件。
在这一章中,我们介绍了一些网络的基本概念,同时展示了Wireshark软件的GUI界面。Wireshark是一款协议分析软件,这款软件被全世界的IT从业者广泛采用,大家会用它来对网络级的数据包进行抓取和分析。
TCP/IP模型分为4层,即应用层、传输层、网络层和链路层。在数据从一层到达另一层的过程中,设备会对数据进行封装;到达最底层的数据包称为一个完整的PDU,PDU就是数据包穿越通信信道的形式。
在安装Wireshark时,管理员只需要访问http://www.wireshark.org,然后选择这个开源软件的某个版本进行下载即可。管理Wireshark社区的尽是一些在现实世界中被人们视为极客的家伙,但读者可以在这个社区学习到很多知识,也可以让自己的排错工作获得更多灵感。
Wireshark的GUI界面对用户而言十分友好、强大、稳定,而且可以安装在各个不同的平台上;即使是入门级的从业者也可以很快上手这款工具软件。
在协议分析过程中,最重要的一个方面就是将协议分析软件部署在合理的位置;每家机构部署设备的方式都各有不同,因此我们也必须使用不同的方法才能抓取到想要的数据包。
在不同的环境中,我们可以使用插拔设备、端口镜像技术、ARP毒化和分线器等方法来监测和分析网络中的流量。
Wireshark工具窗口分为6大部分:菜单栏、主工具栏、数据包列表面板、数据包详细信息面板、字节面板和状态栏。
在进行数据包分析的过程中,后退/前进键的作用不容小觑。读者应该掌握主工具栏区域中所有工具的作用。
在下一章中,读者会学习到Wireshark软件中可以使用的各类过滤器。
1.TCP/IP模型分为多少层?它们的名称分别是什么?
2.TCP/IP模型中的哪一层负责处理二层地址?
3.链路层还有一个名称是什么?
4.HTTP协议使用的是TCP还是UDP?
5.IP、ICMP和 属于互联网层的协议。
6.你了解Wireshark窗口中的哪些部分?
7.判断正误:ARP是三层协议。
8.TCP协议是否采用了三次握手的通信建立方式?
9.判断正误:端口镜像技术只能通过交换机实现。
10.判断正误:插拔设备的方法是用一台路由器来将同一个网络中的PC隔离开。
11.判断正误:TCP是可靠通信协议。
12.安装Wireshark,请尝试用无线接口来抓取数据包,然后将抓取的结果保存为first.pcap,然后关闭Wireshark。
13.请在Wireshark软件中打开first.pcap,然后查看自己总共抓到了多少数据包。
14.哪个面板会以十六进制和ASCII的形式显示我们抓取到的数据包?
15.从Capture Options窗口中关闭杂合模式,然后观察自己是否还能够接收到从其他设备发来的数据包。
本章会对Wireshark可以使用的不同过滤方式进行介绍,也就是如何抓取和显示我们使用的过滤配置。我们也会介绍如何创建和使用不同的配置文件。下面是我们在这一章中会进行介绍的内容:
希望读者已经作好了充份的准备,在接下来的内容中,我们会介绍如何利用Wireshark提供的各种过滤器来执行数据包分析,以及如何复用管理员之前在用户定义的配置文件中创建出来的过滤器。我会带领读者用某种表达方式来创建数据包的过滤策略,然后再通过这种策略来过滤数据包。
在开始创建过滤器之前,要首先介绍一种更有意思的数据包检索工具,这种工具称为搜索工具(find utility)。
在Wireshark的世界中,有两种过滤器适用于当前的流量和管理员保存的抓包文件。过滤器可以提升数据包分析的灵活性,让用户在抓包时可以看到看到他想要观察的信息。
这两种过滤器分别是抓包过滤器和显示过滤器。下面来详细说一说这两种过滤器。
抓包过滤器可以让管理员只抓取自己想要抓取的信息,同时丢弃其他的信息。抓包这个进程是一个处理器密集型任务,同时Wireshark也会占用大量的内存空间。所以,我们有时候需要保留一些资源以兹他用,这些资源可以用来进行数据包分析,有时候我们只想要抓取那些满足某些条件的数据包,同时丢弃其他的数据包。
Wireshark可以让用户采用一些比较有意思的方法来对接口进行配置,让软件只抓取那些满足某些条件的数据包,这些条件需要在Capture Options窗口中进行配置,这个窗口的截图如图2-1所示。
图2-1 Capture Options对话框
下面是对话框中的一些抓包可选项。
图2-2 默认的抓包过滤器
首先,用户可以直接采用这些默认的过滤配置文件,以此来了解如何创建自定义的过滤参数。在读者熟练掌握了这些基本使用方法之后,就可以继续在同一个窗口中创建自己的自定义过滤器了,但一定要按照伯克利数据包过滤(BPF,Berkley Packet Filtering)语法来定义过滤。BPF语法是一种行业标准,很多协议分析软件都可以使用这种语法,因此不同协议分析软件中使用的过滤器配置也可以相互迁移。
为了帮助读者掌握这种方法,我们先来一起创建一个过滤器;假设我们需要抓取从一台位于192.168.1.1的Web服务器发来的数据包(如果读者在监测的Web服务器使用的并不是这个地址,读者可以进行相应地修改),就应该按照下面的步骤进行设置。
1.打开Capture Options(抓包可选项)对话框。
2.点击Capture Filter(抓包过滤器)。
3.点击New(新建)。
4. 在Filter name(过滤器名)文本框中输入Web server 192.168.1.1(见图2-3)。
图2-3 完成配置后的抓包过滤器
5.在Filter String(过滤器字符串)文本框中输入host 192.168.1.1 and port 80。
6.在完成上面的配置之后,点击OK;如果输入的内容正确,那么在Capture Filter按钮之后出现的文本框背景就是绿色的,如图2-4所示。
图2-4 创建一个抓包过滤器示例
现在,根据之前我们所作的配置,一旦软件开始抓包,那么每抓取到5MB的数据,软件就会创建出一个新的文件,并且将抓取的数据包写入到文件中。一旦文件超出了我们在Ring buffer部分设置的参数值,Wireshark就不会再创建新的文件了。软件会回到第一个文件,在这个文件的基础上写入新的数据。图2-5显示的就是这种配置方法。
图2-5 Capture Files可选项
这里读者可能想问一个问题:如果我们同时选择多个可选项会怎么样呢?比如,按照图2-6进行勾选。
图2-6 Stop Capture可选项
用户可以一次勾选多个可选项;这样的话,Wireshark会在触发第一个条件时,就停止抓包。
图2-7 Display Options
如果选择了Update list of packet in real-time(数据包实时更新列表),就会发现每当Wireshark抓取到新的数据包时,Packet List Pane(数据包列表面板)中的信息就会更新,同时面板会自动向上滚动。用户要根据自己的需求来选择可选项;否则执行这两项任务所需要的资源就会用来执行其他进程了。
如果勾选了Hide capture info dialog(隐藏抓包信息对话框)复选框,那么Protocol Hierarchy(协议分层)窗口中(以百分比的形式)显示的统计数据就会隐藏起来。如果没有任何特定的目的,建议用户不要勾选这些可选项。
图2-8 Name Resolution
当网络中数据流的规模相当庞大时,只抓取满足某些条件的流量就显得十分重要了。如果用户需要在生产环境中进行流量分析,那他迟早会需要自定义抓包过滤器。用户要在开始抓包进程之前应用抓包过滤器。总之,Wireshark抓取的每个数据包都交给抓包引擎,再由抓包引擎将抓取的数据包转换成人类可以读懂的格式。但是如果用户应用了抓包过滤器,那么Wireshark就会丢弃与用户需求不符的那些数据包。Wireshark不会将这些丢弃的数据包交给抓包引擎进行转换。相比之下,显示过滤器就要具体和强大得多了;在使用抓包过滤器时,用户一定要谨慎,因为如果有数据包因为与用户定义的规则不符而被丢弃,这些数据包是无法恢复的。
创建过滤器时要使用伯克利数据包过滤器(BPF)语法,还有很多协议分析软件使用的也是这种语法,因为这种语法是行业标准。这种语法很容易学习和使用,使用基本的格式来构建用户的过滤标准就可以了。
我们之前使用BPF语法在capture filter对话框中创建了一个简单的抓包过滤器;下面我们来具体讨论一下这个抓包过滤器,这对于掌握BPF至关重要,毕竟大量协议分析软件都使用了BPF。
如果使用BPF语法,就必须按照一个格式结构来定义过滤器的标准,这个格式由两个参数组成,它们是标识符(identifier)和修饰符(qualifier),下面我们分别对这两个概念进行说明。
在前面的示例中,我们用串联运算符(&/and)将两个表达式组合了起来。同理,我们还可以使用变更运算符(|/or)和否定运算符(!/not)来组合和创建复杂的过滤器。
例如,我们在前文中创建了过滤器src host 192.168.1.1 and tcp port 80,其效果是抓取所有始发自192.168.1.1这个地址,并且目的端口为80的流量。
如果使用的运算符是or,即过滤器为src host 192.168.1.1 or tcp port 80,那么只要流量与上面两个表达式中的任何一个相匹配,软件都会抓取流量。这也就是说,所有由192.168.1.1始发的流量,和所有发往80端口的流量,都会被软件抓取到,无论另一个条件是否匹配。
如果使用的运算符是not,那么抓包过滤器not port 80表示的就是所有与80端口有关的流量都不要抓取。
一旦开始在生产环境中抓包,读者就会发现and、or和not这样的运算符是多么常用。
虽然Wireshark提供了大量的过滤器,这些过滤器都可以帮助用户熟悉BPF语法,不过要默认访问当前的过滤器,可以在主工具栏中选择Capture | Capture Filers或者点击Capture Options按钮,然后点击Capture Filter。我们可以在同一个窗口中创建已经介绍过的新过滤器。
要创建抓包过滤器,可以参考下表中的内容。
过滤器 |
描述 |
---|---|
host 192.168.1.1 |
所有与主机192.168.1.1相关的流量 |
port 8080 |
所有与8080端口相关的流量 |
src host 192.168.1.1 |
所有从主机192.168.1.1始发的流量 |
dst host 192.168.1.1 |
所有去往主机192.168.1.1的流量 |
src port 53 |
所有由53端口始发的流量 |
dst port 21 |
所有去往21端口的流量 |
src 192.168.1.1 and tcp port 21 |
所有从192.168.1.1并且与tcp端口21相关的流量 |
dst 192.168.1.1 or dst 192.168.1.2 |
所有去往192.168.1.1或者去往192.168.1.2的流量 |
not port 80 |
所有与80端口不相关的流量 |
not src host 192.168.1.1 |
所有并非由主机192.168.1.1始发的流量 |
not port 21 and not port 22 |
所有既与21端口无关,也与22端口无关的流量 |
tcp |
所有tcp流量 |
ipv6 |
所有ipv6流量 |
熟练掌握BPF语法相当重要。在深入学习和使用Wireshark的过程中,读者就会意识到这种技能的重要性。建议读者不断进行练习,直到自己已经对BPF语法烂熟于胸为止。
用户可以用协议头部字段中的参数来自定义抓包过滤器。创建这类过滤器的语法大概是这种形式:proto[offset:size(optional)]=value。在这里,proto是用户想要抓取流量的协议,offset是对应的数值在数据包头部中的位置,size是要抓取的数据长度,value是想要寻找的数据。
比如说,我们只想抓取ICMP响应数据包;那么,如果观察图2-9,就会发现ICMP头部类型处于最开始的位置,因此offset参数就应该从0开始。因此,在本例当中,offset值就应该设置为0,size部分应该设置为1字节。我们拥有所有创建抓包过滤器所必需的信息,所以,我们现在创建的表达式大致就会是这样:icmp[0:1]=0(见图2-10)。
图2-9 ICMP响应消息
图2-10 ICMP抓包过滤器
我们首先来尝试向www.google.com发起ping测试,看看是否可以实现通信(见图2-11)。
图2-11 浏览google.com
设置的结果是,Wireshark就只会抓取ICMP响应数据包了。通过相同的方法,我们就可以按照协议头部的参数来过滤出自己想要的流量了。
下表列出了一些基于TCP或UDP中某些字节的抓包过滤器;读者也不妨试着配置这些抓包过滤器。
过滤器 |
描述 |
---|---|
icmp [0] = 0 |
ICMP请求数据包 |
icmp [0:1] = 8 |
ICMP响应数据包 |
icmp [0:1] = 3 |
ICMP目的主机不可达数据包 |
tcp[13] = 18 |
仅抓取TCP SYN/ACK标记数据包 |
tcp[13] = 32 |
仅抓取TCP URG标记设置数据包 |
显示过滤器远比抓包过滤器更加灵活和强大。显示过滤器并不会丢弃数据包,只是为了用户阅读之便将一部分数据包隐藏起来而已。丢弃数据包这种做法其实效率不高,因为一旦数据包被丢弃,这些数据包也就无法再恢复回来了。在用户配置了显示过滤器之后,只有那些满足用户过滤器所设置条件的数据包才会被软件显示出来。在应用过滤器之后,用户就可以在Wireshark窗口状态栏的第二列看到一系列数据包。
显示过滤器可以用于Packet List Pane(数据包列表面板)上面的Filter对话框中的抓包文件。显示过滤器使用的语法很容易适应并且付诸应用。对于软件的新用户来说,显示过滤器就是一种超级强大的功能,让软件的用户可以根据当前的环境,隐藏那些不满足自己需求的数据包。
显示过滤器可以用很多不同的参数来作为匹配标准,比如IP地址、协议、端口号、某些协议头部的参数。此外,用户也用一些条件工具和串联运算符创建出更加复杂的表达式。用户可以将不同的表达式组合起来,让软件显示的数据包范围更加精确。在数据包列表面板中显示的所有数据包都可以用数据包中包含的字段进行过滤。
显示过滤器并不会删除数据,它们只会将数据隐藏起来,只要用户清空了Filter对话框中的过滤器,那些隐藏的数据还会再次显示出来。比如,如果希望软件只显示ICMP数据包,用户只需要在过滤器对话框中输入ICMP然后点击Apply即可。太简单了,是不是?如果还想查看所有数据包,只需要点击Clear按钮,一切就会恢复原先的状态。
Wireshark具备一些强大的特性,这些特性可以在用户创建过滤器时给用户提供帮助。用户只需要点击Filter对话框最后的Expression按钮,选择想要过滤的协议,然后指定参数即可。
filter expression对话框使用起来相当简单。如果读者是第一次使用这个对话框,下面的文字就是你们的福利,我会介绍一下如何使用这个对话框。
1.点击图2-12所示的Expression按钮。
图2-12 过滤器表达式
2.现在,读者会看到如下所示的Expression窗口。
3.例如,如果用户只想浏览那些与192.168.1.1这个IP地址有关的数据包,那么可以下拉Field Name窗口找到IPv4,然后展开这个条目,选择ip.addr这个可选项。
4.接下来从旁边的Relation对话框中,选择希望添加到表达式中的运算符。
5.最后,在Value(IPv4 address)对话框中写下自己要查找的IP地址。
6.然后,点击OK。如果之前的步骤全都操作无误的话,那么用户此时就会看到从自己定义的ip发送的数据包了(读者可以将192.168.1.1修改为自己想要监测的IP地址)。
7.在Value对话框下面,有一个Predefined values对话框,当有些协议限制用户只能使用某些参数集时,就可以用到这个对话框。用户可以在这里选择一个参数。
8.在Predefined Values对话框下面,有一个Range对话框。如果协议支持的话,用户可以在这个对话框中输入一个参数范围,如1-78、0-5、120-255。
上面的流程是创建显示过滤器最简单的方法之一;但创建显示过滤器也有一些其他的方法。用户手动输入过滤器可以大大提升网络的性能,但是要求用户具备一定的专业技能。
在开始详细介绍手动创建过滤器之前,还希望读者能够了解一些内容,比如比较运算符和逻辑运算符。在给Wireshark创建或简单或复杂的过滤器时,这些运算符常常可以发挥作用。
下表总结了可以在创建显示过滤器时使用的比较运算符。
运算符 |
描述 |
---|---|
==/eq |
等于 |
!=/ne |
不等于 |
</1t |
小于 |
<=/1e |
小于等于 |
>/gt |
大于 |
>=/ge |
大于等于 |
接下来,我们来看看用来将不同条件组合在一起的逻辑运算符。下表总结了所有的逻辑运算符。
运算符 |
描述 |
---|---|
AND/&& |
如果用户希望表达式的几部分同时为真,就要用AND这个逻辑运算符来连接表达式的这几部分。例如,使用ip src == 192.168.1.1 and tcp这个过滤器只会显示来自ip 192.168.1.1,并且与tcp协议相关的数据包。只有同时满足表达式这两部分的数据包,软件才会显示出来 |
OR/‖ |
如果用户只要求表达式中的其中一个条件为真,就要使用OR这个逻辑运算符。不过,几个条件同时为真,也满足表达式定义的标准。比如,port 53 or port 80这个过滤器会显示与端口53(DNS)有关的流量,以及与端口80(HTTP)有关的流量 |
NOT/! |
如果用户希望从显示的面板中排除满足某些条件的数据包,就要使用NOT这个逻辑运算符。比如,!dns这个过滤器会隐藏所有与DNS协议有关的数据包 |
有时候,用户希望可以使用之前创建的过滤器,因为这样可以简化自己的工作,让工作能够快速完成。Wireshark可以让用户将自己创建的显示过滤器保存起来,在将来有需要的时候再拿出来使用。这种方法可以为用户节省下大量的时间和精力,让用户不必反复输入某些复杂的显示过滤器。要保存显示过滤器,可以参照下面的操作步骤。
1.找到Analyze | Display filters,这时软件会弹出一个图2-13所示的窗口。
图2-13 添加显示过滤器
2.接下来,点击New,在Filter name(过滤器名称)和Filter string(过滤器字符串)中输入相应的参数。比如,我们想要创建一个显示过滤器,让软件不显示ARP数据包。那么,我们就可以输入图2-14所示的参数。
图2-14 创建一个新的过滤器
3.在输入之后,点击Apply。接下来,在默认过滤器列表中输入参数,说明自己希望保存NO ARP,以备后面使用这个显示过滤器。
4.一定要确认Filter String文本框的背景颜色是绿色的,因为绿色背景表示用户输入的表达式是正确的;如果文本框是红色背景,用户就要检查自己输入的表达式了;如果背景是黄色的,这表示执行这个表达式的结果可能会与用户期待的执行结果不符。现在,我们可以点击Apply,然后点击OK。
5.如果用户在创建过滤器时希望获得软件的帮助,可以点击Filter string文本框旁边的Expression按钮,这时软件可以显示出所有的协议和过滤器中最常使用的表达式。
6.Delete按钮可以帮助用户将当前的过滤器从列表中删除。
7.点击Cancel按钮之后,软件会丢弃所有没有保存的修改,同时关闭窗口。
8.点击OK按钮之后,软件会执行Save同时关闭窗口。
9.接下来,我们可以试着应用一下刚刚创建的过滤器。找到Analyze | Display Filter | (拉动滚动条进行选择)Display Filter | Apply。
读者可以试着按照上面的方法创建自己希望保存下来的显示过滤器。
如果用户想要查找满足某一条标准的数据包,可以使用Find对话框进行查找。这个对话框提供了很多高效的搜索方式,可以对已经抓取的文件或者软件当前正在执行的抓包操作进行搜索。用户可以选择Edit | Find packets,或者使用快捷键Ctrl + F来调用Find工具(见图2-15)。
图2-15 Find Packet对话框
下面我们来介绍一下这个窗口中可以进行配置的选项。
0A:C4:22:90:45:00
AA:BB:CC
一旦用户对这些可选项进行了自定义,就要输入文本信息然后点击Find。这可以让用户准确抓取到与自己标准相匹配的数据包。要在匹配的数据包中前后移动进行分析,可以使用快捷键Ctrl + N(移动到下一个数据包)和Ctrl + B(移动到之前一个数据包)。
为了提升用户分析流量的体验,Wireshark提供了一种特性,让用户可以给某种他们希望重点显示的流量标记颜色。给流量标记颜色的目的在于区分不同类型的流量。用一种不同的规则来给某种类型的流量标记出与默认规则不同的颜色,这件事的难度不容小觑。
大多数协议的默认配置文件都是已经创建好的,所以我们在数据包列表面板中看到的流量本身就是用不同颜色标记出来的,用户可以选择View | Edit或者在主工具栏中点击Edit coloring rules按钮打开图2-16所示的窗口。
图2-16 标色规则
在这个对话框中,我们可以看到所有全局配置文件中保存的给流量标记前景颜色和背景颜色的规则。数据包列表面板中显示的所有数据包都会遵循相同的规则,这可以让用户获得独一无二且与众不同的使用体验。
我们来使用一下这个特性,用我们自己指定的颜色来标记一下http error数据包。比如说,我用自己的一台设备搭建了一台Web服务器,让客户端来访问这台设备上文件。现在,我的网络中有一台客户端正在尝试访问目录清单并获取HTTP 4.0错误消息。这些错误消息会在我们的数据包列表面板中弹出来,但这些消息也会采用与http标记颜色相同的规则显示,这会让这些错误消息对于网络分析人员来说不那么明显。为了让这些错误消息更加明显,我希望以black(黑色)作为背景色,以cyan(青色)作为前景色对HTTP 404错误消息进行标色。按照下面的步骤可以达到相同的效果。
1.我配置了一台Linux设备,这台设备的地址为172.16.136.129,而我的Mac OS运行的地址为172.16.136.1,这台设备在网络中负责充当Linux设备的Web服务器,详见图2-17。
图2-17 地址为172.16.136.1的Web服务器
Linux访问的Web服务器所发送的常规流量看起来如图2-18所示。
图2-18 地址为172.16.136.1的Web服务发送的流量
2.既然所有设备都已经启动并且开始运行了,我们可以从Linux上手动访问目录清单,结果是接收到了HTTP 404错误消息。
Wireshark抓取到了通过该请求生成的流量,详见图2-19。
图2-19 HTTP 404流量
我们可以在之前抓取到的流量中看到,客户端请求了abc.jpg这个资源,这个资源是不存在的;所以,客户端接收到了一条404 Not found错误消息。
3.我们之所以能够轻松找出问题,原因是只有一台客户端请求了某一个资源。试想在一个拥有成千上万台客户端的现网中出现了这样的问题又会是一种怎样的情形。在这样的情况下,对不同数据包用不同的规则来标记颜色,这会成为具有决定性意义的关键因素。
4.找到Edit Coloring Rules | New。在Name文本框中输入HTTP 404。在String文本框中输入http.response.code==404。将Foreground Color(前景颜色)设置为Cyan(青色),将Background Color(背景颜色)设置为Black(黑色)。然后点击OK,之后选择Apply | OK。
5.在点击Apply之后,我们就会看到Wireshark只会将HTTP 404错误数据包按照我们新设置的标色规则来标记颜色(见图2-20)。
图2-20 应用新标色规则后的面板
自己建立一个虚拟环境对上面的设置方法进行试验可以加深读者对这部分内容的理解。
Wireshark会按照自顶向下的顺序校验Edit Coloring Rules对话框中显示的标色规则。对于每个数据包来说,都有一个相关的标色规则信息。这个信息会显示在Frame区域下面的数据包详细信息面板(Packet Details Pane)上。通过图2-21也可以观察到相同的信息。
图2-21 数据帧头部中的颜色标记信息
Wireshark中的配置文件其实就像是用户自定义的环境。在用户分析网络流量的时候,使用配置文件可以帮用户节省大量的时间。配置文件是由一系列不同的元素所组成的,其中包括抓包过滤器、显示过滤器、时间优先顺序、列优先顺序、协议优先顺序、颜色配置文件等,这些元素可以一起给软件用户提供一个适用于某种特定场合的软件环境,让用户可以即刻调用之前的设置。
在Wireshak中,导入和导出配置文件的方法相当简单,如果用户正在分析的网络中一个没有预装的工具,就可以考虑向软件中导入配置文件。用户只需要复制某个目录下面的配置文件,就可以使用配置文件了。要创建配置文件,可以参照下面的流程。
1.右键单击Status Bar(状态栏)中的Profile一列。
2.在弹出的对话框中点击New。
3.接下来,将用户要使用的配置文件选为模板,然后输入新配置文件的名称。
4.最后,点击OK。
现在,在状态栏中,我们会看到软件已经激活了同一个配置文件。用户将来在这个配置文件中所作的变更都会保留在这个配置文件中,比如创建抓包过滤器/显示过滤器、修改协议优先顺序、修改颜色优先顺序。也就是说,在这个配置文件中所作的修改并不会改变我们保存的其他配置文件中的内容。
通过这种方法,我们可以给不同的抓包环境分别创建很多不同的配置文件,这可以节省很多的时间,也可以简化我们的网络分析任务。
在有些情况下,搜索工具十分好用,用户可以在Wireshark的Edit菜单中打开搜索工具。搜索工具为用户提供了很多搜索数据包内容的向量。
用户可以通过过滤流量的方式,来把注意力放在那些自己真正感兴趣的数据包上;过滤器的类型有两种:显示过滤器和抓包过滤器。
显示过滤器会把数据包隐藏起来,一旦用户清除了自己配置的过滤器表达式,所有隐藏的信息都会再次出现。但抓包过滤器会丢弃那些不满足(用户所定义的)表达式的数据包。Wireshark不会将这些丢弃的数据包转交给抓包引擎。
抓包过滤器使用了BPF语法,这种语法是行业标准,很多协议分析软件使用的都是这种语法。
在使用一种特定的表达式来过滤某一类流量时,用颜色标记流量的做法可以发挥重要的作用。给不同的流量标记不同的颜色可以让用户更容易区分不同类型的数据包,因为匹配规则的数据包在软件界面中会以一种不同的颜色显示出来。
配置文件类似于用户定义的不同软件使用环境,配置文件可以节省网络管理员的时间,减轻管理员的工作。对配置文件进行修改包括对配置文件中不同元素进行修改,如显示过滤器/抓包过滤器和色彩/协议/时间的优先顺序。
Wireshark的配置文件和许多设置参数都很容易导出,因此Wireshark这款软件的移植性是很强的。
在下一章中,我们会介绍如何使用Wireshark的一些高级特性,如图表和统计数据可选项。
1.请解释显示过滤器和抓包过滤器之间的区别,并说明哪种过滤器在系统资源的占用率上效率更高。
2.请解释Find Utility和Filters之间的区别。通过Find utility(搜索工具)使用十六进制进行搜索。
3.创建一个抓包过滤器,让软件只抓取ARP广播数据包。
4.创建一个抓包过滤器,让软件不抓取从读者这台设备物理地址发送的数据包,也不抓取发往读者这台设备物理地址的数据包。
5.创建一个抓包过滤器,让软件只抓取TCP SYN数据包和TCP ACK数据包。
6.创建一个抓包过滤器,让软件只抓取那些从读者设备发出的HTTP流量。
7.创建一个显示过滤器,让软件只显示那些读者设备IP地址发送的数据包。
8.创建一个显示过滤器,让软件只显示那些与安全套接字层(SSL)协议有关的数据包。
9.创建一个显示过滤器,让软件只显示那些ICMP目的主机不可达数据包。
10.创建一个显示过滤器,让软件只显示那些FIN和ACK标记位都置位的TCP数据包。
11.创建一个显示过滤器,让软件只显示头部长度大于40的TCP数据包。
12.修改所有DNS请求类型A数据包的标色规则,让软件将这类数据包用读者指定的颜色显示出来。
13.修改所有HTTP错误消息的标色规则,让软件将这类数据包用读者指定的颜色显示出来。
14.用DNS这个名称创建一个配置文件,配置文件的元素保留默认参数。接下来在这个配置文件中创建一个抓包过滤器让软件抓取DNS流量。最后,修改所有DNS响应数据包的标色规则,让软件将这类数据包用读者指定的颜色显示出来。