Wireshark网络分析实战(第2版)

978-7-115-50002-1
作者: [印度]甘德拉·库马尔·纳纳(Nagendra Kumar Nainar)、尧戈什·拉姆多斯(Yogesh Ramdoss)[以色列]约拉姆·奥扎赫(Yoram Orzach)
译者: 孙余强王涛
编辑: 傅道坤

图书目录:

详情

Wireshark是最流行的一款网络嗅探软件。本书以示例方式详细讲解了如何使用Wireshark进行网络分析。通过本书的学习,读者可以掌握如何安装、配置Wireshark,如何使用Wireshark捕获数据,如何来对捕获的数据进行分析,以解决常见的网络问题等。

图书摘要

版权信息

书名:Wireshark网络分析实战(第2版)

ISBN:978-7-115-50002-1

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [印度]甘德拉•库马尔•纳纳(Nagendra Kumar Nainar)

     [印度]尧戈什•拉姆多斯(Yogesh Ramdoss)

     [以色列]约拉姆•奥扎赫(Yoram Orzach)

译    孙余强 王 涛

责任编辑 傅道坤

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315  


Copyright © Packt Publishing 2018. First published in the English language under the title Network Analysis Using Wireshark 2 Cookbook (Second Edition)

All Rights Reserved.

本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


本书是畅销书《Wireshark 网络分析实战》的全新升级版,按部就班地讲解了 Wireshark的用法以及如何使用该工具解决实际的网络问题。

本书共分为19章,其内容涵盖了Wireshark版本2简介,熟练使用Wireshark排除网络故障,抓包过滤器的用法,显示过滤器的用法,基本信息统计工具的用法,高级信息统计工具的用法,Expert Information工具的用法,Ethernet和LAN交换,无线LAN,网络层协议及其运作方式,传输层协议分析,FTP、HTTP/1和HTTP/2,DNS协议分析,E-mail协议分析,NetBIOS和SMB协议分析,企业网应用程序行为分析,排除SIP、多媒体及IP电话故障,排除由低带宽或高延迟所引发的故障,网络安全和网络取证等知识。

本书适合对Wireshark感兴趣的网络从业人员阅读,高校网络相关专业的师生也能从本书中获益。


谨将本书献给我的挚友Suresh Kumar及其亡妻Dharshana Suresh。

——Nagendra Kumar Nainar

谨将本书奉献给我的父母Ramdoss和Bhavani,他们为我的成功倾注了自己的生命。

——Yogesh Ramdoss


Nagendra Kumar Nainar(CCIE #20987),Cisco公司RP升级(escalation)团队的高级技术领导。他是80多项专利申请的共同发明人,以及6份Internet RFC、多份Internet草案和IEEE论文的共同作者。他还是北卡罗来纳州立大学的客座讲师,在各种网络论坛上发表过演讲。

我要感谢我那亲爱的妻子Lavanya和可爱的女儿Ananyaa,感谢你们的理解和支持;感谢我的父母Nainar和Amirtham;还要感谢我的兄弟Natesh以及家人的支持。

要特别感谢我的导师Carlos Pignataro和领导Mike Stallings。要感谢Arun和Abayom提出的意见。还要感谢我的朋友Satish、Poornima、Praveen、Rethna、Vinodh、Mani、Parthi和出版社。

Yogesh Ramdoss(CCIE #16183),Cisco公司技术服务机构的高级技术领导。他是Cisco Live大会的杰出演讲者,在会上向客户分享并传授与企业/数据中心技术和平台、故障排除和抓包工具,以及与开放性网络编程有关的技术。他还是机器/行为学习(machine/behavior learning)方面某些专利的共同发明人。

我要感谢我的妻子Vaishnavi,孩子Janani和Karthik,感谢你们的耐心和支持。

要特别提及并感谢马杜赖(印度南部城市)蒂加拉杰工程学院的校长V. Abhaikumar博士。万分感谢本书的合著者Nagendra Kumar Nainar、我的领导Michael Stallings、我的导师Carlos Pignataro,以及我所有的朋友和家人。

Yoram Orzach,毕业于以色列海法理工学院,拥有该校颁发的科学学士学位。他最初以系统工程师的身份就职于Bezeq公司,从事传输及接入网相关工作。在担任过Netplus公司的技术管理者一职之后,现任NDI通信公司的CTO。Yoram对大型企业网络、服务提供商网络及Internet 服务提供商网络极有心得,Comverse、Motorola、Intel、Ceragon Networks、Marvel以及HP等公司都接受过他提供的服务。他在网络设计、实施及排障方面浸淫多年,具有研发、工程及IT团队培训工作的丰富经验。


Abayomi Adefila,Cisco公司服务机构的技术领导。他握有科学学士学位(B.Tech)和理科硕士学位(M.Sc),获得的证书包括CCNA、CCDA、CCNP、CCIP、CCDP、CCIE(R&S),精通MPLS L3 VPN、VRF、ISIS、IPv6、BGP4、MP-BGP、OSPFv2&3、RIPng、EIGRPv6、DS1、DS3、城域以太网、EEM、OER等诸多技术,熟练掌握Cisco网络设备的高级路由和交换、GRE、IPSec的配置以及Cisco VPN集中器和Juniper设备的配置。在Verizon公司效力期间,他获得过MCI的杰出表现奖,在Cisco公司也因表现出色而获得过多个CAP奖。

Jason Morris,系统和研究工程师,在系统架构、研究工程和大数据分析方面拥有18年以上的经验。

他是设计大型体系结构、云上最佳安全实践、基于深度学习的贴近实时图像检测分析,以及针对ETL的无服务器体系结构的演讲者和顾问。他近期的工作角色包括Amazon Web服务的解决方案架构师、大数据工程师、大数据专家和导师。他是Next Rev Technologies公司现任的首席技术官。

我要感谢Packt出版社的整个编辑和制作团队,感谢你们为出品精良图书所付出的努力,同时也要感谢本书的读者。愿本书能帮助读者探索伟大之事。


Wireshark早已成为网络分析领域里的标配工具,随着Internet和TCP/IP网络的极速发展,该工具受到了网络分析专家及排障工程师的热捧,同时获得了(网络协议或应用程序)研发工程师们的青睐,因为后一类人需要知道协议在网络中的实际运作方式以及在运行时所碰到的问题。

本书包含排除数据通信网络故障的实战秘诀。本书第2版围绕Wireshark 2展开,该软件因其所提供的增强功能,从而获得了很强的吸引力。本书第2版对第1版探讨的某些主题做了进一步的扩充,这些主题包括TCP性能、网络安全、无线LAN以及如何用Wireshark监控云和虚拟系统。读者将学会如何借助于Wireshark分析端到端IPv4和IPv6单、多播流量的连通性故障。本书还会展示Wireshark抓包文件的内容,好让读者将所学理论知识与实战相结合。读者将会认识E-mail协议的常规运作方式,学会如何用Wireshark进行基本分析和故障排除。使用Wireshark,读者将能够排除企业网内常用的应用程序(比如NetBIOS和SMB)的故障。最后,读者还将学会如何借助Wireshark测量网络(性能)参数,检查并有效解决由网络性能导致的网络故障。在本书的末尾,读者会掌握如何分析流量,如何发现各种违规流量模式,以及如何加固网络使其不受违规流量的影响。

本书的书名既然叫《Wireshark网络分析实战》,那么其内容一定是由一系列利用Wireshark对网络故障进行有效性、针对性分析的实用诀窍构成。书中包含的每个诀窍都与某一具体的网络故障相关联,在介绍如何使用Wireshark解决相关故障时,作者会指出应关注Wireshark工具的哪些地方、哪些(抓包)内容以及正在处理的故障的起因。为求表述圆满,每个诀窍都会包含相应主题的理论基础知识,好让尚未掌握基础概念的读者先行武装自己。

书中包含了许多示例,所有示例均来源于真实案例。作者在处理这些案例时,所花费的时间虽长短不一(有些只花了几分钟时间,有些则要花几小时甚至几天),但所遵循的原则只有一条,那就是:按部就班,选择正确的工具,当应用程序开发者肚里的“蛔虫”,外加像某些人说的那样,从网络的角度思考问题。只要按此原则行事,兼之能活学活用Wireshark,定能将故障查个水落石出。本书的目的也正在于此,享受这一切吧。

本书的读者对象包括使用Wireshark进行网络分析及排障的安全专业人员、网管人员、研发人员、工程和技术支持人员以及通信管理人员。阅读本书的读者需掌握网络的基本概念,但不要求读者对具体的协议及厂商实现有深入的了解。

阅读本书之前,请先到Wireshark官方站点下载并安装Wireshark软件。


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

本书提供如下资源:

 书中彩图文件。

要获得以上配套资源,请在异步社区本书页面中单击 ,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。

异步社区

微信服务号



本章涵盖以下内容:

本章会介绍Wireshark所能行使的基本功能。本书前言谈论了与网络排障有关的内容,提到了有助于完成排障任务的各种工具。在得出需要动用Wireshark协议分析器的结论之后,就应先行测试,将其安置在网络中正确的位置,赋予其基本的配置,进行相应的优化,使其用起来更为顺手。

设置Wireshark执行简单的抓包任务虽然简单、直观,但该软件有诸多选项可在某些特殊情况下使用,这样的特殊情况包括:通过某条链路持续抓包的同时,希望将抓包文件分割为更小的文件,以及在查看抓包文件时,希望显示参与连接的设备名称而不只是设备的IP地址等。本章将会向读者传授如何配置Wireshark来应对这些特殊情况。

在简单介绍过Wireshark第2版之后,本章还会透露几个如何安置及启动该软件的秘诀。

本章首先会介绍安置Wireshark的秘诀,涉及如何安置以及在何处安置Wireshark来执行抓包任务。应将Wireshark软件安装在服务器上呢,还是应该将安装它的主机连接在交换机的某个端口上呢?应将Wireshark置于防火墙身前还是身后呢?应置于路由器的WAN一侧,还是LAN一侧呢?到底应在上述的哪个位置才能正确采集到自己想要得到的数据呢?这些问题的答案、安置Wireshark的诀窍以及更多与Wireshark抓包有关的内容请见1.2节。

最近几年,在虚拟机上抓包变得越来越重要,本章介绍的第二个秘诀就与此有关。用Wireshark监视虚拟机的实用安装及配置秘诀请见1.3节,近年来,所使用的大多数服务器都是虚拟机。

紧随而来的问题是如何监控驻留在云内的虚拟机,这同样十分重要。“在云内抓取数据”一节会讨论几个问题,其中包括如何解密在本端和云端之间加密(大多数情况都会如此行事)的数据,如何使用云内可用的分析工具,以及诸如Amazon AWS和Microsoft Azure之类的主要云提供商会提供哪些工具[1]

启动Wireshark软件的秘诀以及配置、打印和导出数据的秘诀请见1.4节。该节会介绍如何操纵抓包文件,即如何保存抓取的数据,是要完整保存、部分保存,还是只准备保存经过过滤的数据呢?我们不但能以各种文件格式来导出抓取的数据,而且还能合并抓包文件(比如,将两份Wireshark抓包文件合二为一,这两份抓包文件中的数据分别从不同的路由器接口抓取)。

了解了网络故障的症状,决定动用Wireshark查明故障原委之前,应确定Wireshark(程序或主机)的安装或部署位置。为此,需要设法弄到一张精确的网络拓扑图(起码要清楚受故障影响的那部分网络的拓扑),并根据这张图来安置Wireshark。

安置Wireshark的原理非常简单。首先,应确定要抓取并监控由哪些(哪台)设备发出的流量;其次,要把安装了Wireshark的主机(或笔记本电脑)连接到受监控设备所连交换机;最后,开启交换机的端口监控功能(按Cisco的行话,该功能叫做端口镜像或交换式端口分析器[Switched Port Analyzer,SPAN]),把受监控设备发出的流量重定向给Wireshark主机。按此操作,便可抓取并查看所有进出受监控设备的流量了,这是最简单的抓包场景。

可用Wireshark监控LAN端口、WAN端口、服务器/路由器端口或接入网络的任何其他设备收发的流量。

以图1.1所示的网络为例,将Wireshark软件安装在左边的笔记本电脑和受监控的服务器S2上。

在这一最简单的抓包场景中,按图1.1所示方向配置端口镜像,即可监控到进出服务器S2的所有流量。当然,也可以直接将Wireshark安装在服务器S2上,如此行事,便能在服务器S2上直接观看进进出出的流量了。

图1.1

某些厂商的交换机还支持以下流量监控特性。

使用Wireshark抓包之前,请先访问Wireshark官网,下载并安装最新版本的Wireshark。

Wireshark软件的2.0版本以及后续更新发布在Wireshark官网的Download页面下。

每个Wireshark Windows安装包都会自带WinPcap驱动程序的最新稳定版本,WinPcap驱动程序为实时抓包所必不可缺。用于抓包的WinPcap驱动程序是UNIX libpcap库的Windows版本。

在安装过程中,会看到图1.2所示的软件包安装窗口。

图1.2

通常,在图1.2所示的组件选择窗口中,只需选择安装所有组件。对于这样的选择,会安装以下组件。

现以一个典型的网络为例,来看一下部署在其中的网络设备的运作方式、如何在必要时配置这些设备,以及如何安置Wireshark,如图1.3所示。

图1.3

请读者仔细研究一下图1.3给出的简单而又常见的网络拓扑结构。

1.服务器流量监控

像服务器流量监控这样的需求,在实战中经常会有人提出。要想监控某台服务器收/发的流量,既可以在交换机上针对连接服务器的端口配置端口镜像,将流量重定向至Wireshark主机(如图1.3中的编号1所示),也可以在服务器上直接安装Wireshark。

2.路由器流量监控

可根据以下具体情形,来监控进出路由器的流量。

情形1:监控路由器连接交换机的LAN口的进出流量。

1.对于这种情形,如图1.3中的编号2所示,请将安装了Wireshark的笔记本电脑连接至路由器所连接的交换机。

2.在交换机上开启端口镜像功能,把与路由器LAN口相连的端口的流量重定向至连接Wireshark主机的端口。

情形2:监控安装在路由器上的交换模块的端口的进出流量。

1.对于这种情形,当路由器安装了一块交换模块(比如Cisco EtherSwitch或HWIC模块)时,如图1.3中的编号6(编号5所指为WAN端口,编号6所指为LAN端口)所示,可将交换模块视为标准交换机。

 注意 

路由器一般不支持端口镜像或SPAN功能。对于简单的家用/SOHO路由器,根本就没有相应的配置选项。安装在某几款Cisco路由器(比如Cisco 2800或3800)上的交换模块支持端口镜像功能,Cisco 6800等大型路由器就更不用说了。

2.此时,只能监控连接到交换模块的设备的流量。

情形3:监控未安装交换模块的路由器的WAN口的流量。

1.对于这种情形,可在路由器WAN口和服务提供商(SP)网络设备之间架设一台交换机,在该交换机上执行端口监控,如图1.4所示。

图1.4

2.此时,要在交换机上开启端口镜像功能,将连接路由器WAN口的端口的流量重定向至连接了Wireshark笔记本电脑的端口。

 注意 

在SP网络与路由器WAN口之间部署一台交换机,是一项会导致网络中断的操作。但只要准备充分,断网的时长最多也就一两分钟。

情形4:嵌入了抓包功能的路由器。

最近几年,某些厂商将抓包功能集成进了路由器或路由器操作系统。12.4(20)T或更高版本的Cisco IOS路由器、15.2(4)S-3.7.0或更高版本的Cisco IOS-XE路由器、Juniper SRX/J系列路由器、Riverbed Stealhead路由器,以及诸多其他厂商的路由器都嵌入了抓包功能。

 注意 

启用路由器内置的抓包功能时,请确保路由器有足量的内存,不能因为开启该功能而影响路由器的运行速度。

监控路由器的流量时,有一点请务必留意:发往路由器的数据包并不一定都会得到转发。有些数据包或许会在途中走失,而路由器既有可能会因缓存溢出而对部分数据包忍痛割爱,也有可能会把某些数据包从接收端口原路送回。再就是,广播包不会得到路由器的转发。

3.防火墙流量监控

防火墙流量监控的手段有两种,一种是监控防火墙内口(如图1.5中的编号1所示)的流量,另外一种是监控防火墙外口(如图1.5中的编号2所示)的流量。当然,这两种方法有所不同。

图1.5

监控防火墙内口,可以观看到内网用户发起的所有访问Internet的流量,其源IP地址均为分配给内网用户的内部IP地址。监控防火墙外口,能观看到所有经过防火墙放行的访问Internet的流量,这些流量的源IP地址均为外部IP地址(拜NAT所赐,分配给内网用户的内部IP地址被转换成了外部IP地址);由内网用户发起,但防火墙未予放行的流量,监控防火墙外口是观察不到的。若有人从Internet发动对防火墙或内网的攻击,要想观察到攻击流量,观测点只能是防火墙外口。

 注意 

某些厂商的防火墙也像前文描述的路由器那样支持嵌入式抓包功能。

4.分路器和Hub

执行流量监控任务时,可能会用到以下两种设备。

要想弄清端口镜像(端口监控)的运作原理,需先理解LAN交换机的运作方式。以下所列为LAN交换机执行数据包转发任务时的举动。

现以图1.6所示网络为例,来说明第二层(L2)网络的运作方式。接入网络的每一台设备都会定期发送广播包。ARP请求消息和NetBIOS通告消息都属于广播包。广播包一经发出,就会传遍整个L2网络(如图中虚线箭头所示)。对于本例,所有交换机都会用学到M1的端口,外发目的MAC地址为M1的以太网帧[2]

图1.6

当PC2要将一帧发给PC1时,该帧会被先发给直连PC2的交换机SW5。SW5已从左起第6个端口[3]学到了PC1的MAC地址M1,即该帧的目的MAC地址。同理,网络内的每台交换机都会通过学到M1的端口外发该帧,直至其最终抵达PC1。

因此,将交换机上的某端口配置为镜像端口,先把受监控端口的流量重定向至该端口,再接入安装了Wireshark的笔记本电脑,即可观察到所有进出受监控端口的流量。但若将笔记本电脑随便连接到交换机的某个端口,不做任何配置,则只能观察到进出该笔记本电脑的单播流量,以及网络内的广播和多播流量[4]

用Wireshark抓包时,还需提防几种特殊情况。

在抓取整个VLAN的流量(VLAN流量监控)时,有几个重要事项需要铭记。第一个要注意的地方是,即便目的是要监控整个VLAN的流量,但Wireshark主机只能采集到与其直连的交换机承载的同一VLAN的流量。比方说,在一个交换式网络(LAN)内,有多台交换机的端口都被划入VLAN 10(多台交换机都拥有隶属于VLAN 10的端口),要是只让Wireshark主机直连某台接入层交换机,那必然采集不到VLAN 10内其他接入层交换机上的主机访问直连核心层交换机的服务器的流量。请看图1.7所示的网络,用户主机一般都分布在各个楼层,跟所在楼层的接入层交换机相连。各台接入层交换机会上连至1~2台(出于冗余)核心层交换机。Wireshark主机要想监控到某个VLAN的所有流量,就得与承载此VLAN流量的交换机直连。也就是,要想抓全VLAN 10的流量,Wireshark主机必须直连核心层交换机。

图1.7

在图1.7所示的网络中,若让Wireshark主机直连SW2,且在SW2上激活了相关端口的镜像功能,监控VLAN 30的流量,则只能抓取到进出SW2的P2、P4、P5端口的流量,以及由SW2承载的同一VLAN的流量。该Wireshark主机绝不可能采集到SW3和SW1之间来回穿行的VLAN 30的流量,以及连接在SW3或SW1上隶属于VLAN 30的不同设备之间的流量。

基于整个VLAN来实施抓包任务时,可能会抓到重复的数据包,是另外一个需要注意的地方。之所以会出现这种情况,是因为启用端口镜像时,对于在不同交换机端口之间交换的同一VLAN的流量,Wireshark主机会从流量接收端口的流入(input)方向及流量发送端口的流出(output)方向分别收取一遍。

在图1.8所示的交换机上激活了端口镜像功能,对VLAN 30的流量实施监控。对于服务器S4向S2发送的数据包,当其(从连接S4的交换机端口)流入VLAN 30时,Wireshark主机会收取一次;当其从(从连接S2的交换机端口)流出VLAN 30时,Wireshark主机会再收取一次。这么一来,便抓到了重复的流量。

图1.8

欲了解与配置端口镜像有关的信息,请参阅各网络设备厂商提供的操作手册。有些厂商也把端口镜像称为端口监控或SPAN(Switched Port Analyzer)(Cisco公司)。

某些厂商的交换机还支持远程流量监控功能(能让直连本地交换机的Wireshark主机采集到远程交换机端口的流量)以及高级过滤功能(比如,在把流量重定向给Wireshark主机的同时,过滤掉具有指定MAC地址的主机发出的流量)。还有些高端交换机本身具备数据包的采集和分析功能。某些交换机甚至支持虚拟端口(例如,LAG或EtherChannel group)的流量监控。有关详情,请阅读交换机的随机文档。

最近几年,大量的服务器都在向虚拟化环境转移,即在单台硬件设备上虚拟出若干台服务器。

咱们先来定义一些术语。在虚拟化领域,有以下两个重要术语需要牢记。

本节会逐一介绍上述组件,同时会讲解如何监控进出各组件的流量。

现在介绍具体的监控方法。

1.在驻留于单一硬件平台的VM上抓包

图1.9所示为一个身怀多台虚拟机的硬件平台。

图1.9

由图1.9可知,各操作系统(客户操作系统)分别运行了多个应用程序(App)。这些操作系统都运行于虚拟化软件之上,而虚拟化软件则运行于硬件平台之上。

如本章前文所述,要想实施抓包,有两种选择:在有待监控的主机上安装Wireshark;在LAN交换机上开启端口镜像功能,将连接受监控主机的网卡(NIC)的交换机端口的流量重定向至Wireshark主机。

那么,对于驻留于单一硬件上的虚拟化平台,有以下两种抓包方法。

1.在有待监视的指定服务器上安装Wireshark,直接在该服务器上抓包。

2.将安装了Wireshark的笔记本电脑连接至交换机,开启端口镜像功能,重定向进出服务器的流量。在图1.9所示的场景中,将笔记本电脑与交换机上的某个空闲端口(8口)相连,开启端口镜像功能,将1、2口的流量重定向至8口。不过,这种抓包方法可能会碰到问题。

第一种抓包方法非常直观,但第二种抓包方法可能会碰到某些问题。

如图1.9所示,服务器和LAN交换机之间通常会通过两条以上的链路互连。可把这样的连接方式称为链路聚合(LAG)、端口/网卡结对(teaming)或EtherChannel(如用Cisco交换机)。在监控服务器流量时,得检查连接服务器的交换机接口是运行于负载共享(load sharing)模式还是端口冗余(port redundancy)(也叫作故障切换或主备[Failover])模式。若运行于端口冗余模式,则没什么好说的:请先确定连接服务器网卡的活跃交换机端口,再配置端口镜像,实施抓包。若运行于负载共享模式,则必须采用以下三种流量镜像方法之一。

 注意 

将交换机上的多个物理端口捆绑在一起来使用,有很多称谓。最常用的是标准称谓——802.3ad(LAG),它随后被802.3AX LAG取代。Cisco的称谓是EtherChannel,各服务器和软件厂商的称谓包括端口结对或NIC结对(Microsoft)、端口绑定或网卡绑定(bonding)(各种Linux系统)、负载均衡(Load Based Teaming,LBT)等。重要的是要检查其具体的运行模式,是运行于负载共享模式还是端口冗余模式。请注意,负载共享模式只是在多个接口或多块网卡之间共享流量,但实现不了流量负载均衡,因为各个接口(或各块网卡)承载的流量并不完全均等。

图1.10所示为上述3种流量镜像方法。

图1.10

 注意 

Wireshark并不适合在高速网络环境下抓包,只要流量的速率超过200~300Mbit/s,Wireshark就会明显不适。因此若有待抓取的流量过于密集,请配置抓包过滤器或选用相应的商业抓包软件。

2.在刀片服务器上抓包

图1.11所示为刀片式服务器机箱的硬件网络拓扑。

图1.11

图1.11所示刀片式服务器机箱(刀箱)包含以下部件。

监控服务器刀箱(里刀片服务器的流量)会更困难,因为进出刀片服务器的流量是没有办法直接抓取的。有以下几种流量监控方法。

如前所述,有多种虚拟化平台可供选择。本节会简单介绍VMware平台的运作方式,VMware也是比较受欢迎的虚拟化平台之一。

在每一种虚拟化平台上,都可以配置主机,令其为虚拟机提供CPU和内存资源,同时让虚拟机访问这些资源。

图1.12所示为一台配置了4台虚拟机(Account1、Account2、Term1和Term2)的虚拟化服务器(IP地址为192.168.1.110)。这4台虚拟机都是虚拟服务器,对于本例,有两台作为计费服务器,另外两台作为终端服务器。

图1.12

进入配置菜单,点选Networking配置选项时,会出现vSwitch配置界面,如图1.13所示。在vSwitch配置界面的左侧,能看到连接了虚拟服务器的交换机内部端口;在右侧,则会看到交换机外部端口。

图1.13

对于本例,左侧可以看到虚拟服务器Account1、Account2、Term1和Term2,右侧可以看到交换机物理端口vmnic0。

标准vSwitch和分布式vSwitch

VMware平台vSphere可提供两种虚拟交换机:标准vSwitch和分布式vSwitch。

只有分布式vSwitch才支持端口镜像功能,配置方法请见VMware vSphere 6.0文档中心的Working With Port Mirroring一节。

交待过在网络中安置Wireshark的秘诀之后,本节将介绍如何启动Wireshark软件,以及如何配置Wireshark,以应对不同的抓包场景。

在计算机上安装过Wireshark之后,需点击桌面→“开始”→“程序”菜单或快速启动栏上相应的图标,运行该数据包分析软件。

 注意 

为了保持一致性,本书根据2016年2月发布的Wireshark 2.0.2版编写而成。一般而言(当然也有特例),若Wireshark版本号X.Y.Z中的X发生变化,则X将成为该软件的主版本(比如,Wireshark版本2)。Wireshark的主版本每几年才会改变一次,其功能也会随之发生天翻地覆的变化。当Y发生变化时,通常表示Wireshark又增加了新功能或某些功能发生了重大改变。当Z发生变化时,一般表示修复了某些Bug或添加了新的协议解析器。由于Wireshark通常每隔几周都会发布新的次要版本,因此读者可以查阅相应的版本说明。

Wireshark一旦运行,便会弹出图1.14所示的窗口(Wireshark 2.0.2启动窗口)。

图1.14

在Wireshark启动窗口中,可以看到下面这些信息。

在启动窗口的主区域,可以看见三个子区域。

 注意 

Wireshark 版本2会在其启动窗口界面显示所有本机网卡的流量状况,与版本1相比,这是一处重大改进,可方便操作人员确定本机在用的活跃网卡,并用其来抓包。

用Wireshark版本2抓包,其实非常简单。只要运行该软件,进入启动窗口,即可看见所有本机网卡及其流量状况,请看图1.15。

图1.15

发起单网卡抓包的最简单的方法是直接用鼠标左键双击有流量经过的在用网卡(1)。还可以在先选中在用网卡的情况下,单击窗口上方快速启动栏里最左边的Capture按钮(2),或点击Capture菜单,选择Start菜单项(也可直接使用快捷键Ctrl + E)(3)。

1.多网卡抓包

要想同时发起多网卡抓包,只需先按下Ctrl或Shift键,再以鼠标左键单击的方式选中多块抓包网卡。如图1.16所示,已经同时选中了两块网卡,一块为无线网卡,另一块为有线网卡,名称分别为Wireless Network Connection和Local Area Connection。

图1.16

选中两块网卡之后,再点击快速启动栏里的Capture按钮,那两块网卡就会开始抓包了。由图1.17可知,用来抓包的无线网卡和有线网卡的IP地址分别为10.0.0.4和169.254.170.91(自动分配的私有IP地址[APIPA])。

 注意 

在设置计算机网卡的IP地址时,若设置为DHCP自动分配,但网络内不存在DHCP服务器时,操作系统便会为网卡自动分配APIPA地址。APIPA地址与其他私有地址一样,可在本地使用,但网卡一旦分配了此类地址,则通常表示本地DHCP服务器不可用。

多网卡抓包在很多情况下都会派上用场,比方说,只要Wireshark主机配备了两块物理网卡,即可同时监控两台不同服务器的流量或一台路由器的两个接口的流量。典型的双网卡抓包布局如图1.18所示。

图1.17

图1.18

2.如何配置实际用来抓包的网卡

1.要想对实际用来抓包的网卡做进一步的配置,请点击Capture菜单中的Options菜单项,Wireshark Capture Interface窗口会立刻弹出,如图1.19所示。

在图1.19所示的窗口中,可配置抓包网卡的以下参数。

2.可在主窗口内的网卡列表区域选择实际用来抓包的网卡,如无需配置网卡的其他参数,直接点击Start按钮即可开始抓包。

3.在左下角,有一个名为Enable promiscuous mode on all interfaces的复选框。一旦勾选,Wireshark主机便会抓取交换机(端口镜像功能)重定向给自己的所有数据包,哪怕数据包的目的(MAC/IP)地址不是本机地址;若取消勾选,则Wireshark主机只能抓取到目的(MAC/IP)地址为本机地址的数据包,外加广播及多播数据包。

图1.19

 注意 

在某些情况下,勾选该复选框后,Wireshark将无法从无线网卡抓包。因此,若选用无线网卡抓包,且一无所获时,请取消勾选该复选框。

4.在网卡列表区域的正下方,有一个抓包过滤器输入栏。第3章会介绍抓包过滤器。

在Wireshark Capture Interface窗口的顶端,可以看见三个选项卡:Input(默认打开)、Output和Options。

3.将抓到的数据存入多个文件

在Wireshark - Capture Interfaces窗口中,点击Output选项卡,会出现图1.20所示的窗口。

可在图1.20所示的窗口内配置Wireshark,令其将抓包数据存入多个文件。为此,请在Capture to a permanent file下的File一栏内填入一个包含文件名的绝对路径名(或点击Browse按钮选择路径),Wireshark会将抓包数据保存进该绝对路径所指向的文件。若勾选了Create a new file automatically after复选框,则可以设定条件,让Wireshark按照所指定的条件,将抓包数据存入多个文件,文件名的格式为File一栏内输入的“文件名”+“xxxxx时间戳”。该功能在某些情况下会非常管用,比方说,在有待监控的网络链路的流量极高或需要长期抓包的情况下。在这样的情况下,可以设定条件,让Wireshark在指定时间之后、在抓取到了指定规模的数据之后,或者在抓取到指定数量的数据包之后,将抓包数据存入一个新的文件。

图1.20

4.设置抓包选项参数

1.在Wireshark - Capture Interfaces窗口中,点击Options选项卡,会出现图1.21所示的窗口。

图1.21

2.在左上区域(1),可以勾选以下抓包显示选项(Display Options)。

3.在右上区域,可以勾选以下名称解析选项(Name Resolution)。

 注意 

Wireshark的名称解析功能还存在某些不足。虽然Wireshark能缓存DNS名称,但解析IP地址会有一个DNS转换的过程,可能会减拖慢抓包的速度。该过程本身也会生成额外的DNS查询和响应消息,在抓包文件中自然可以看见与之相对应的数据包。名称解析失败的概率很高,因为正在查询的DNS服务器未必知道与抓包文件中的IP地址相对应的各种名称。综上所述,Resolve network name功能虽然有那么点作用,但在勾选时请仔细斟酌。

5.网卡管理

1.如图1.22所示,在Input选项卡的右下角有一个Manage Interfaces按钮,点击该按钮,会弹出Manage Interfaces窗口。该窗口由三个选项卡构成,分别为Local Interfaces、Pipes和Remote Interfaces。可在这几个选项卡中设置让Wireshark从哪块网卡抓取数据。

图1.22

2.图1.23所示为点击Manage Interfaces按钮后弹出的Manage Interfaces窗口,在Local Interfaces选项卡中,可以看到所有可用的本机网卡,包括未在启动窗口的网卡列表区域出现的网卡。

图1.23

3.Wireshark还能实时读取其他应用程序抓取的数据包。

6.从远程机器上抓包

要想从远程机器上抓包,请按以下步骤行事。

1.在远程机器上安装pcap驱动程序,也可以在远程机器上安装完整的Wireshark软件包。

2.在Wireshark启动窗口内选择Capture菜单,点击Options菜单项,在弹出的Wireshark- Capture Interfaces窗口中,点击Manage Interfaces按钮。在弹出的另一个Manage Interfaces窗口中,点击Remote Interfaces选项卡,如图1.24左侧所示。在Remote Interfaces选项卡中点击“+”按钮,会弹出图1.24右侧所示的Remote Interface窗口。

3.在Remote Interface窗口里输入以下参数。

图1.24

4.登录有待采集数据的远程机器。

5.回到图1.24所示的运行于本机的Wireshark的Remote Interface窗口界面,单击OK按钮,远程机器的网卡将会出现在Local Interfaces选项卡中。现在,可选择用远程机器的网卡抓包了,操作起来与用本机网卡抓包一模一样。

图1.25

 注意 

远程主机抓包功能的应用场合有很多,比方说,可用来监控本机与远程主机之间的连接,甚至还可以监控两台远程主机之间的连接。执行远程主机抓包任务,可观察到进出远程主机的数据包,这样一来,就能判断出远程主机的流量能否顺利抵达其他设备。远程主机抓包是一项非常强大的功能。

7.开始抓包——在Linux/UNIX机器上抓包

Linux和UNIX系统都自带一款古老而又实用的抓包工具,名为TCPDUMP,实为tcpdump命令,它是Wireshark的“祖宗”。

要用TCPDUMP工具抓包,可执行以下(最常用的)命令。

TCPDUMP工具抓包过滤器的写法详见第3章。

8.从远程通信设备采集数据

本节将介绍如何从远程通信设备抓取数据。由于有多家厂商的网络产品都支持该功能,因此本节只会提供在某些主要厂商的网络设备上开启该功能的通用配置指南。

该功能的常规理念是,某些厂商的网络设备具备本机抓包的功能,抓包完毕之后,还支持将抓包文件导出至外部主机。

按Cisco的说法,该功能名为嵌入式数据包捕获(EPC)功能,配置方法可在思科官网进行搜索。配置方法所在的文档提供了Cisco IOS和IOS-XE设备的EPC配置示例。

在Juniper设备上,要用monitor traffic命令来实现该功能,该命令的详细说明可在Juniper官网进行搜索。

在Checkpoint防火墙上,要用fw monitor实用工具来实现该功能,该实用工具的详细使用说明可在Checkpoint官网进行搜索。

更多与该功能有关的信息,请查阅具体厂商的设备文档。虽然一般不会先在LAN交换机、路由器、防火墙或其他通信设备上抓包,然后再下载抓包文件进行分析,但请读者别忘了这项功能,在必要时它可能还会派上用场。

Wireshark的抓包原理非常简单。将Wireshark主机的网卡接入有线或无线网络开始抓包时,介于有线(或无线)网卡和抓包引擎之间的软件驱动程序便会参与其中。在Windows和UNIX平台上,这一软件驱动程序分别叫作WinPcap和Libcap驱动程序;对于无线网卡,行使抓包任务的软件驱动程序名为AirPacP驱动程序。

若数据包的收发时间属于重要信息,且还要让Wireshark主机从一块以上的网卡抓包,则Wireshark主机就必须与抓包对象(受监控的主机或服务器)同步时间,可利用NTP(网络时间协议)让Wireshark主机/抓包对象与某个中心时钟源同步时间。

当网管人员需要观察Wireshark抓包文件,并对照检查抓包对象所生成的日志,以求寻得排障线索时,Wireshark主机与抓包对象的系统时钟是否同步将会变得无比重要。比方说,Wireshark抓包文件显示的发生TCP重传的时间点,与受监控服务器生成的日志显示的发生应用程序报错的时间点相吻合,则可以判断TCP重传是拜服务器上运行的应用程序所赐,与网络本身无关。

Wireshark软件所采用的时间取自OS(Windows、Linux等)的系统时钟。至于不同OS中NTP的配置方法,请参考相关操作系统配置手册。

以下所列为在Microsoft Windows 7操作系统内配置时间同步的方法。

1.单击任务栏最右边的时间区域,会弹出时间窗口。

2.在时间窗口中点击“更改日期和时间设置”,会弹出“日期和时间”窗口。

3.在“日期和时间”窗口中,点击“Internet时间”选项卡,再点击“更改设置”,会弹出“Internet时间设置”窗口。

4.在“Internet时间设置”窗口中,选中“与Internet时间服务器同步”复选框,在“服务器”后的输入栏内输入时间服务器(NTP)的IP地址,再点“确定”按钮。

 注意 

Microsoft Windows 7及后续版本的Windows操作系统会默认提供几个时间服务器(格式为域名)。可选择其中一个时间服务器,让网络内的所有主机都与其同步时间。

NTP是一种网络协议,网络设备之间可借此协议同步各自的时间。可把网络设备(路由器、交换机、防火墙)及服务器配置为NTP客户端,令它们与同一台NTP时间服务器(时钟源)对时(同步时间),时间精度要取决于那台时间服务器所处的层级(stratum)或等级(level)。NTP时间服务器所处层级越高,其所提供的时间也就越精确。直连原子时钟并提供NTP对时服务的设备被称为1级时钟源,其精度也最高。常用的NTP服务器为2~4级。

RFC 1059(NTPv1)是定义NTP的第一份标准文档,RFC 1119(NTPv2)则是第二份;目前常用的NTPv3和v4则分别定义于RFC 1305和RFC 5905。

NTP服务器IP地址表可从多处下载。

本节会介绍与Wireshark启动窗口有关的基本配置,同时会介绍抓包主窗口、文件格式以及可视选项的配置。

启动Wireshark软件,首先映入眼帘的就是启动窗口。可在此窗口中调整以下各项配置参数,来满足抓包需求:

先来熟悉一下Wireshark启动窗口内的主菜单和几个常用的工具条(栏),如图1.26所示。

图1.26

1.主菜单

Wireshark软件的主菜单位于主窗口的顶部,包括以下菜单。

2.主工具条

主工具条中的各工具按钮分别对应了主菜单中的各种常用菜单项功能,可点击工具按钮来快速执行相应的任务。可勾选或取消勾选View菜单中的Main Toolbar菜单项,来显示或隐藏主工具条。

由图1.27可知,最左边的一组4个按钮与抓包操作有关,紧邻的一组4个按钮与文件操作有关,正中间的一组6个按钮与数据包的选择(跳转)操作有关,再靠右的两个按钮分别控制实时抓包自动滚屏和(数据包)配色方案的开启和关闭,最右边的一组4个按钮控制字体大小以及数据包属性栏。

图1.27

3.显示过滤器工具条

显示过滤器工具条上有一个显示过滤器输入栏(1)外加3个按钮(2、3、4),如图1.28所示。

利用显示过滤器工具条,可以:

图1.28

第4章会重点介绍Wireshark显示过滤器。

4.状态栏

在Wireshark主窗口的最底部,有一个状态栏,分3个区域,如图1.29所示。

图1.29

通过图1.29所示的Wireshark主窗口底部状态栏,可以执行下述操作。

本节会按部就班地指导读者配置Wireshark启动窗口和抓包主窗口。

1.定制工具条

对于一般情况下的抓包,根本无须调整与Wireshark工具条有关的任何配置。但若要抓取无线网络中的数据(即要让Wireshark主机抓到无线网络里其他主机的无线网卡收发的数据),则需要在Wireshark启动窗口内激活Wireless工具条。为此,请点击启动窗口中的View菜单,并勾选Wireless Toolbar菜单项,如图1.30所示。

图1.30

Wireless Toolbar菜单项一经勾选,便会在Wireshark窗口中激活Wireless工具条。对当前版本的Wireshark而言,Wireless工具条上只有一个名为802.11 Preferences的按钮,可点击该按钮启动Wireshark的Preferences配置窗口。第9章会详述无线LAN流量分析。

2.定制抓包主窗口

可按图1.31来配置Wireshark,定制其抓包主窗口的界面。

图1.31

一般而言,无需对Wireshark抓包主窗口的界面做任何调整。但在某些情况下,也有可能需要取消勾选View菜单中的Packet Bytes菜单项,把抓包主窗口的空间都留给“数据包列表”区域(对应于View菜单中的Packet List菜单项)和“数据包结构”区域(对应于View菜单中的Packet Details菜单项)。

3.名称解析

在Wireshark软件里,名称解析功能一经启用,数据包中的L2(MAC)/L3(IP)地址以及第4层(UDP/TCP)端口号将会分别以有实际意义的名称示人,如图1.32所示。

图1.32

由图1.32可知,MAC地址34:08:04:16:09:78归D-Link公司所有,IP地址31.13.93.36对应的网站域名为www.facebook.com,TCP端口号443对应的应用层协议为HTTPS。Wireshark软件把数据包中的MAC地址、IP地址以及TCP端口号,分别替换成了有意义的名称。

 注意 

Wireshark软件将数据包中的MAC地址转换(解析并显示)为网卡制造商的名称最为简单——只需查询转换表(存储在Wireshark安装目录下的.manuf文件内);将IP地址转换(解析并显示)为域名,会借助于DNS,如前所述,这或多或少会影响性能;将TCP/UDP端口号转换为应用程序名,则要查询存储在Wireshark安装目录下的Services文件。

4.为数据包着色

通常,在使用Wireshark抓包时,应为抓取到的网络中的正常流量建立一个(视觉上的)基线模板。这样一来,便可以一边抓包,一边通过抓包主窗口显示出的数据包的色差,来发现潜在的令人生疑的以太网、IP或TCP流量。

要让Wireshark体现出这样的色差,请在抓包主窗口的数据包列表区域,选择一个可疑的或需要着色的数据包,同时单击右键,在弹出的菜单Colorize Conversation中点选Ethernet、IP或TCP/UDP(TCP和UDP只有一项可选,视数据包的第4层类型而定)子菜单项名下的各种颜色(color)菜单项。如此操作,会让该数据包所归属的(Ethernet、IP、UDP或TCP)对话中的所有其他数据包都以相同的颜色示人。

现举一个给抓包文件中隶属于某条TCP会话的所有数据包上色的例子,如图1.33所示。

图1.33 (Ethernet、IP、UDP或TCP)会话着色

要取消配色规则,请按下列步骤行事。

1.点击View菜单。

2.选择Colorize Conversation菜单项,点击Reset Colorization子菜单项或按下Ctrl +空格键。

5.字体缩放

要缩放Wireshark抓包主窗口的字体,请按图1.34所示步骤行事。

1.点击View菜单。

2.放大字体,请点中间的菜单项Zoom In或按Crtl +“+”键。

3.缩小字体,请点中间的菜单项Zoom Out或按Crtl +“−”键。

图1.34

[1] 译者注:本章其实并未包含“在云内抓取数据”相关内容。

[2] 译者注:原文是“In the example, all switches learn the MAC address M1 on the port they have received it from”,直译为“对于本例,所有交换机都会从接收MAC地址M1的端口学得M1”。按照原文的字面意思,交换机端口接收到的居然是MAC地址而非以太网帧。

[3] 译者注:原文是“the fifth port to the left”。

[4] 译者注:原文是“Therefore, when you configure a port monitor to a specific port, you will see all traffic coming in and out of it. If you connect your laptop to the network, without configuring anything, you will see only traffic coming in and out of your laptop, along with broadcasts and multicasts from the network”。

[5] 译者注:原文是“The server NICs are configured in the port redundancy: the port mirror from one port to two physical ports (in the diagram to ports 1 and 2 of the switch) ”,直译为“服务器NIC被配置为端口冗余:从一个端口到两个物理端口的端口(图1.10中交换机的1、2两口)镜像”。

[6] 译者注:此处图文不符,请读者知悉。

[7] 译者注:需要启动该服务,作者漏说了。


本章涵盖以下内容:

本章会讨论如何娴熟地将Wireshark作为网络排障工具来使用,先讲如何配置用户界面,再谈如何配置全局和协议参数,接下来将讨论Wireshark文件夹、配置文件、文件夹和插件[3]

本章还会讲解Wireshark的配色规则及配置方法,同时会介绍新添加进Wireshark版本2的智能滚动条功能,该功能对识别流量模式和协议的运作方式非常有帮助。

最后,会以对Wireshark模板(profile)及其使用方法的介绍来结束本章。所谓模板,是指为了加快排障时间,降低排障难度,事先在Wireshark中针对不同的网络环境、网络故障或网络协议,分别定义并保存的用户界面、协议参数、显示/抓包过滤器以及配色规则。本章会细述Wireshark模板,本书还会提供一些对读者有帮助的模板。

通过Edit菜单中的Preferences菜单项以及Preferences窗口中的Protocol配置选项,不但能控制Wireshark软件的显示界面,而且还能改变该软件对常规协议数据包的抓取和呈现方式。本节将介绍如何在Preferences窗口的Protocol配置界面中配置最常见的协议。

点击Edit菜单中的Preferences菜单项,Preferences窗口会立刻弹出,如图2.1所示。

图2.1

由图2.1可知,在Preferences窗口中,只要选择了窗口左边的配置选项,窗口的右边便会出现相应的配置参数。

本节会介绍如何配置Preferences窗口中的Appearance(外观)配置选项,以及如何针对最常用的协议,配置Preferences窗口中的Protocol选项。Preferences窗口所含其余配置选项的配置方法请见本书后面的相关章节。

 注意 

由于本书旨在向读者传授Wireshark的使用诀窍,以及如何娴熟地将其作为排障工具来使用,因此不可能细述Wireshark的所有功能。Wireshark的简单功能请参阅其官网的用户手册,作者会重点讲解可以提高用户使用娴熟度的重要和特殊的功能。

先把目光放在Preferences窗口所含配置选项的设置上,看看这些配置选项能否对用户有所帮助。

1.常规的外观设置

图2.2所示为Wireshark Preferences窗口的Appearance(外观)配置选项,可以对该选项的内容进行配置,来提高使用体验。

图2.2

Preferences窗口的Appearance配置选项可供配置的内容有:

2.抓包主窗口的布局设置

在Preferences窗口的Appearance(外观)配置选项中,有一个Layout子配置选项,用来设置数据包列表(Packet List)、数据包结构(Packet Details)和数据包内容(Packet Bytes)区域在Wireshark抓包主窗口里的呈现方式,如图2.3所示。

图2.3

在图2.3所示的Preferences窗口中,可通过选择区域(Pane)的排列样式,来设置上述3个区域在Wireshark抓包主窗口中的呈现方式。

3.调整及添加数据包属性列

在Preferences窗口的Appearance(外观)配置选项中,有一个Columns子配置选项,用来添加或删除抓包主窗口的数据包列表区域里的数据包属性列(栏)。在默认情况下,出现在抓包主窗口的数据包列表区域里的数据包属性列有No.(编号)、Time(抓取时间)、Source(源地址)、Destination(目的地址)、Protocol(协议类型)、Length(长度)以及Info(信息),如图2.4所示。

要给数据包列表区域添加一个新列,可通过以下两个途径。

图2.4

 注意 

还有一种添加新的数据包属性列的办法,那就是在抓包主窗口的数据包结构区域里选择数据包的某个字段,单击鼠标右键,在弹出的菜单中点击Apply as Column菜单项。这么一点,那个字段就会成为数据包列表区域里新的数据包属性列。

在分析网络故障时,酌情以定制方式添加数据包属性列,可加快定位故障的原因。与此有关的内容本书后文再叙。

4.设置字体和配色

在Preferences窗口的Appearance(外观)配置选项中,有一个Font and Colors子配置选项,用来更改字体大小、形状及颜色。可按图2.5所示来修改抓包主窗口的字体。

图2.5

 注意 

若不知如何将抓包主窗口的字体恢复为默认设置,请按图2.5所示将Font选为Consolas,将Size选为11.0,将Font style选为Normal。

5.抓包设置

可通过Preferences窗口中的Capture设置选项,将主机或笔记本电脑的常用网卡设置为Wireshark默认抓包网卡。

在图2.6中,作者将自己笔记本电脑上名为Wireless Network Connection 2的无线网卡设置为Wireshark默认抓包网卡。Capture设置选项的其余配置参数保持原样。

图2.6

6.配置显示过滤表达式首选项

可通过Preferences窗口中的Filter Expressions设置选项,来定义出现在抓包主窗口的显示过滤器工具条右边的显示过滤器表达式。

要定义这样的显示过滤器表达式,请按以下步骤行事。

1.在Preferences窗口中点击Filter Expressions设置选项,如图2.7所示。

图2.7

2.点击“+”号按钮,先在Filter Expression一栏里输入显示过滤器表达式,再在Button Label一栏里为它起个名字,最后点击OK按钮。

3.点击OK按钮之后,之前输入的显示过滤器表达式将会以按钮的形式,出现在显示过滤器工具条的右侧。

4.由图2.8可知,图2.7中定义的那两个名为TCP-Z-WIN和TCP-RETR的滤器表达式以按钮的形式,出现在了抓包主窗口的显示过滤器工具条的右侧。

图2.8

 注意 

如本章最后一节所述,在Wireshark中,可为每个模板分别配置不同的显示过滤器首选项。这样一来,就可以配置出各种模板,分别用来排除TCP、IP电话(IPT)等各种故障,或分别用来诊断各种网络协议故障。

如第4章所述,在Filter Expressions设置选项中,应按照Wireshark显示过滤器的格式来配置显示过滤表达式。

7.调整名称解析

Wireshark支持以下3个层级的名称解析。

图2.9所示为在Preferences窗口中点击过左侧的Name Resolution配置选项之后,在窗口右侧出现的配置内容。

图2.9

在图2.9所示的Preferences窗口中,可从上到下配置下述内容。

 注意 

对一个TCP/UDP数据包的源、目端口号而言,只有把目的端口号转换为应用程序名称才有意义。源端口号一般都是随机生成(高于1024),将其转换为应用程序名称没有任何意义。

8.调整Protocol配置选项里的IPv4配置参数

借助于Preferences窗口中的Protocols配置选项,可调整Wireshark对相关协议流量的抓取和呈现方式。点击配置选项Protocols左边的箭头,会出现多种协议配置子选项。图2.10所示为选择IPv4或IPv6协议配置子选项时,出现在Preferences窗口右侧的配置参数。

图2.10

下面是对IPv4配置子选项名下的某些配置参数的解释。

9.调整Protocol配置选项里的TCP和UDP配置参数

UDP是一种非常简单的协议,与Wireshark版本1相比,Wireshark版本2的Protocols配置选项里的UDP协议配置子选项几乎没有变化,可供配置的参数也不多,一般无需调整;而TCP协议则很是复杂,Protocols配置选项里TCP协议配置子选项中可供配置的参数较多,如图2.11所示。

图2.11

调整TCP协议配置子选项名下的参数,其实也就是调整Wireshark对TCP报文段的解析方式,以下是对其中某些参数的解释。

通过修改Preferences窗口中Protocols选项下相关协议子配置选项的参数,便能开启或禁用Wireshark软件对相应协议流量的某些分析功能。需要注意的是,为了保证Wireshark软件的运行速度,应尽量禁用不必要的分析功能

对TOS和DiffServ的介绍,详见本书第10章。

SNMP是一种用来行使网络管理功能的协议。SNMP对象标识符(OID)的作用是标识对象及其在管理信息库(MIB)中的位置。所谓对象,既可以是一个计数器,对流入接口的数据包进行计数;也可以是路由器接口的IP地址、设备的名称及安装位置、CPU负载或任何其他可呈现或可测量的实体。

SNMP MIB按树形结构来构建,如图2.12所示。顶层MIB对象ID分属不同的标准组织。每家网络厂商都会为自己的网络产品定义私有分枝(包括受管理的对象)。

图2.12

Wireshark在解析SNMP MIB时,不但会显示对象ID,还会显示其名称,这有助于排障人员识别受监控的数据。

将抓包文件分享给其他的运维团队或设备厂商的支持人员,以期查明网络故障的根本原因是常有的事儿。这样的抓包文件会包含很多数据包,而排障人员感兴趣的或许仅限于若干数据流或部分数据包。Wireshark不但支持将所抓数据有选择地导出至新的文件,甚至还能修改其格式,以便传输。本节将探讨Wireshark支持的各种抓包文件导入和导出功能。

运行Wireshark软件,点击主工具条上的Capture按钮,开始抓包(或打开一个已保存的抓包文件)。

在Wireshark主抓包窗口内,既可以把抓来的所有数据都保存进一个文件,也能以不同的格式或文件类型导出自己所需要的数据。

现在来讲解如何执行这些操作。

1.完整或部分导出抓包文件

既能把抓来的所有数据包(或抓包文件中的所有数据包)完整保存进一个文件,也能以各种文件格式和文件类型导出特定的数据。

要把抓来的所有数据包完整保存进一个文件(或将现有的抓包文件完整另存为一个新的文件),请按以下步骤行事。

若要保存抓包文件(或已抓数据包)中的部分数据(比如,经过显示过滤器过滤的数据),请按以下步骤行事。

图2.13

可在Export Specified Packets窗口的左下角区域,点击相应的单选按钮,来选择文件的导出方式。

要以压缩的形式保存数据包,请先勾选Export Specified Packets窗口中的Compress with gzip复选框,再点Save按钮。

上述“存盘”操作既可以基于整个抓包文件中的所有数据包来进行,也可以基于抓包文件中经过显示过滤器过滤的数据包来进行。

2.保存数据的格式选取

Wireshark支持将抓到的数据以不同的格式来保存,以便用各种其他工具做进一步的分析。

通过点击File菜单的Export Packet Dissections菜单项里的各个子菜单项,可将抓包文件保存为以下格式。

3.数据打印

要想打印数据,请点击File菜单里的Print菜单项,Print窗口会立刻弹出,如图2.14所示。

可在Print窗口中做如下选择。

图2.14

Wireshark支持以文本格式或PostScript格式来打印数据(以后一种格式打印时,打印机应为PostScript感知的打印机),同时支持将数据打印至一个文件。选妥了Print窗口中的各个选项,点击Print按钮之后,会弹出操作系统自带的常规“打印”窗口,可在其中选择具体的打印机来打印。

要查看Wireshark软件存储各种文件的系统文件夹,请点击Help菜单中的About Wireshark菜单项,在弹出的About Wireshark窗口中选择Folders选项卡,如图2.15所示。在About Wireshark窗口中,可以看到Wireshark软件存储各种文件的实际文件夹,在窗口的最右边,可以看到存储在那些文件夹中的文件类型。

图2.15

点击Location下的链接,会进入存储相应文件的文件夹。

Wireshark会根据事先定义的配色规则,用不同的颜色来分门别类地显示抓包文件中的数据。合理地定义配色规则,让匹配不同协议的数据包以不同的颜色示人(或让不同状态下的同一种协议的数据包呈现出多种颜色),能在排除网络故障时帮上大忙。

Wireshark支持基于各种过滤条件来配置新的配色规则。这样一来,就能够针对不同的场景定制不同的配色方案,同时还能以不同的模板来保存。也就是说,网管人员可在解决TCP故障时启用配色规则A,在解决SIP和IP语音故障时启用配色规则B。

 注意 

可通过定义模板(profile)的方式,来保存针对Wireshark软件自身的配置(比如,事先配置的配色规则和显示过滤器等)。要如此行事,请点击Edit菜单下的Configuration Profiles菜单项。

要定义配色规则,请按以下步骤行事。

1.选择View菜单。

2.点击中下部的Coloring Rules菜单项,Coloring Rules-Default窗口会立刻弹出,如图2.16所示。

该窗口显示的是Wireshark默认启用的配色规则,包括TCP数据包、路由协议数据包以及匹配某些协议事件的数据包的配色规则。

图2.16

要调整配色规则,请按以下步骤行事。

图2.17

 注意 

Coloring Rules窗口中配色规则的排放次序是有讲究的。请务必确保配色规则的排放次序与配色方案的执行次序相匹配。比方说,作用于应用层协议数据包的配色规则应置于作用于TCP/UDP数据包的配色规则之前,只有如此,方能避免Wireshark为了应用层协议数据包而干扰TCP/UDP数据包的颜色。

Wireshark软件中的许多操作都与显示过滤器紧密关联,定义配色规则也是如此,因为受配色规则约束的数据包都是经过预定义的显示过滤器过滤的数据包。

对时间显示格式的调整,会在Wireshark抓包主窗口数据包列表区域的Time列(默认为左边第2列)的内容里反映出来。在某些情况下,有必要让Wireshark以多种时间格式来显示数据包。比方说,在观察隶属同一连接的所有TCP数据包时,每个数据包的发送间隔时间是应该关注的重点;当所要观察的数据包抓取自多个来源时,则最应关注每个数据包的确切抓取时间。

要配置Wireshark抓包主窗口数据包列表区域中数据包的时间显示格式,请进入View菜单,选择Time Display Format菜单项,其右边会出现如图2.18所示的子菜单。

图2.18

图2.18所示的Time Display Format菜单项的上半部分子菜单包含以下子菜单项。

Time Display Format菜单项的下半部分子菜单项涉及对时间精度的调整。只有对时间精度要求很高的情况下,才建议更改默认设置。

可使用Ctrl+Alt+任意数字键来调整上述时间格式选项。

为抓到的数据包留下时间烙印时,Wireshark依据的是操作系统的时间。在默认情况下,生效的是Seconds Since Beginning of Capture子菜单项功能。

可定义Wireshark配置模板,来保存针对Wireshark软件自身的各种配置(比如,外观、预定义的配色规则、抓包及显示过滤器等)。要如此行事,请进入Edit菜单,选择Configuration Profile菜单项。

Wireshark配置模板会保存下列信息。

所有配置模板文件都会保存在Wireshark软件Personal Configuration目录的 profiles目录下。

运行Wireshark软件,点击主工具条上的Capture按钮,开始抓包(或打开一个已保存的抓包文件)。

要打开现有的配置模板文件,请执行如下操作。

1.可点击状态栏最后边的Profile区域,选择准备采用的现有配置模板,如图2.19所示。

图2.19

2.还可以进入Edit菜单,选择Configuration Profiles菜单项,在Configuration Profiles窗口中选择准备采用的现有配置模板,如图2.20所示。

图2.20

要创建一个新的配置模板,可执行如下步骤。

1.右键单击状态栏最后边的Profile区域,在弹出的菜单中选择New菜单项,或者在图2.20所示的窗口中点击“+”号按钮。

2.新的配置模板创建之后,在profiles目录下会创建一个新的目录,如图2.21所示。

图2.21

3.由图2.21可知,在新建的配置模板目录下(本例为Wireless模板及Wireless目录),可以看到包含抓包过滤器的cfilter文件、包含配色规则的colorfilters文件、保存HTTP字段配置的custom_http_header_fields文件,以及保存preference菜单项功能配置的preference文件。

创建新的模板时,Wireshark软件会在profiles目录下新建一个同名目录。此后,在关闭Wireshark或加载另一个配置模板时,一个名为recent的文件会诞生在那个新的模板目录内。该文件包含了常规的Wireshark窗口设置,包括可视工具栏、时间戳显示、字体缩放级别和列宽等配置。若在创建了新的配置模板之后还创建了抓包过滤器、显示过滤器和配色规则,则在那个新的模板目录内还会诞生别的文件(分别为cfilters、dfilters和colorfilters)。

如前所述,保存模板配置参数的文件都位于profiles目录下。那么,自然可以在不同的配置模板之间转移配置参数,比如,在默认的preference文件中,包含了以下与启动窗口中的显示过滤器工具条有关的配置参数[5]

####### Filter Expressions ########
gui.filter_expressions.label: SIP
gui.filter_expressions.enabled: FALSE
gui.filter_expressions.expr: sip
gui.filter_expressions.label: RTP
gui.filter_expressions.enabled: FALSE
gui.filter_expressions.expr: rtp

若另一个配置模板也需要这样的配置参数,则只需将这些参数复制进该配置模板目录下的preference文件。

在本书随后的相关章节内,会介绍具体的配置模板。第11章会介绍用于排除TCP性能故障的配置模板,第9章会介绍用于无线LAN分析的配置模板。

[1] 译者注:点击Edit菜单的Preferences菜单项,会弹出Preferences窗口。所谓配置用户界面,就是配置该窗口中Appearance配置选项里的内容。

[2] 译者注:即配置Preferences窗口中Protocol配置选项里的内容。

[3] 译者注:原文是“Next, we talk about Wireshark folders, configuration files, and folders and plugins”,译文按原文字面意思直译。

[4] 译者注:本书第10章并没有GeoIP相关内容。

[5] 译者注:原文是“You can of course copy parameters from one profile to another; for example, in the default performance file, you have these filters”。


本章涵盖以下内容:

前两章介绍了如何安装Wireshark、如何配置该软件以行使其基本或智能化功能,以及该软件在网络中的部署(或安装)位置。本章及下一章将讨论Wireshark抓包过滤器和显示过滤器的用法。

抓包过滤器和显示过滤器的重要区别如下所列。

 注意 

抓包过滤器的配置语法派生自libpcap/WinPcap库中tcpdump的语法,而显示过滤器的配置语法则在若干年后定义。因此,两种过滤器的配置语法并不相同。

在某些情况下,可能只想让Wireshark抓取某块网卡收到的部分数据,举例如下。

除了上面列举的几种情况之外,还有很多时候,也只需让Wireshark从网络中抓取特定而非全部数据包。抓包过滤器一经配置并加以应用,Wireshark将只会抓取经过其过滤的数据包,其余数据包一概不抓,网管人员可借此来采集自己心仪的数据包。

 注意 

使用抓包过滤器时,请务必考虑周全。在许多情况下,运行于网络中的某些应用程序会与某些看似不相关的东西(比如,看似不相关的某种协议或某台服务器)之间有着微妙的关联。因此,在使用Wireshark排除网络故障时,若开启了抓包过滤器,请确保未过滤掉某些看似不相关的数据包,否则将发现不了导致故障的真正原因。现举一个常见的简单示例。若故障的表象为HTTP应答缓慢,但“罪魁祸首”却是DNS服务器不响应DNS查询,那么配置抓包过滤器,让Wireshark只抓取发往/来自TCP 80端口的流量,再怎么分析抓包文件都将是徒劳无功。

本章会讲解复合型、字节偏移型和净载匹配型等多种抓包过滤器的配置方法。

配置抓包过滤器之前,建议读者考虑两个问题:要让Wireshark抓取什么样的数据包;配置抓包过滤器的目的何在。一定不要忘记,Wireshark会丢弃通不过抓包过滤器过滤检查的数据。

既可以使用Wireshark自带的预定义抓包过滤器,也可以使用自定义的抓包过滤器,本章会对此做重点介绍。

打开Wireshark软件,按本章内容行事。

抓包过滤器应在抓包之前配置妥当,配置步骤如下所列。

1.要配置抓包过滤器,请点击主工具条左边第4个Capture options按钮,如图3.1所示。

图3.1

2.Wireshark - Capture Interfaces窗口会立刻弹出,如图3.2所示。

图3.2

3.先选中用来抓包的网卡,再在Capture filter for selected interfaces文本框内输入待用的抓包过滤器表达式(可按第1章所述来判断哪块网卡为活跃网卡[在用网卡])。在该输入栏中输入的抓包过滤器表达式会在相应网卡的Capture Filter栏下现身,如图3.3所示。图3.3显示的抓包过滤器tcp port http会让Wireshark只抓目的端口号为80的TCP流量。

图3.3

4.抓包过滤器表达式输入完毕之后,只要Capture filter for selected interfaces文本框呈绿色,就表示表达式的语法合规,于是便可点击Start按钮,开始抓包。

要预先定义抓包过滤器,请按以下步骤行事。

1.要预先定义抓包过滤器,请按图3.4所示点击Capture菜单中的Capture Filters菜单项。

图3.4

这会弹出图3.5所示的Capture Filters窗口。

图3.5

2.在Capture Filters窗口中,可点击相关按钮来添加、删除、复制抓包过滤器。

在Wireshark - Capture Filters窗口中,可基于伯克利数据包过滤器(Berkeley Packet Filter,BPF)的语法来配置抓包过滤器。在填写完抓包过滤器所含字符串之后,点击Compile BPF按钮,BPF编译器将会检查所填字符串的语法,若通不过检查,会提示一条错误消息[1]

除此以外,在Capture Filter窗口的文本框内输入抓包过滤器所含字符串时,若语法正确,文本框Filter部分的颜色会变绿,否则将会变红。

伯克利数据包过滤器(BPF)只会对输入进那个文本框的过滤器进行语法检查,不会检查其条件是否正确。比方说,若在文本框内只输入host不加任何参数,则文本框的颜色将会变红,表示通不过BPF编译器的检查;但若输入的是host 192.168.1.1000,文本框的颜色将会变绿,表示通过了BPF编译器的检查。

 注意 

BPF所遵循的语法来源于Steven McCanne 和Van Jacobson于1992年在伯克利大学劳伦斯伯克利实验室所写论文The BSD Packet Filter: A New Architecture for User-level Packet Capture

构成抓包过滤器的字符串名为过滤表达式。这一表达式决定了Wireshark对数据包的态度(是抓取还是放弃)。过滤表达式由一个或多个原词(primitive)构成。每个原词一般都会包含一个标识符(名称或数字),这一标识符可能会位列一或多个限定符之后。限定符的种类有以下3种。

标识符是用来进行匹配的实际条件。标识符既可以是一个IP地址(比如,10.1.1.1),也可以是一个TCP/UDP端口号(比如,53),还可以是一个IP网络地址(比如,用来表示IP网络192.168.1.0/24的192.168.1)。

对抓包过滤器tcp dst port 135而言:

可进入Wireshark - Capture Interfaces窗口进行配置,让不同的抓包过滤器生效于不同的网卡,如图3.6所示。

图3.6

当Wireshark主机安装了双网卡,且需让两块网卡分别抓包时,就有可能需要如此配置。

抓包过滤器所含字符串都保存在Wireshark安装目录下的cfilters文件内。该文件不但会保存预定义的抓包过滤器,还会保存用户手工配置的过滤器。可将该文件复制进其他的Wireshark主机。cfilters文件的具体位置要视Wireshark主机的操作系统及Wireshark软件的安装路径而定。

本书提及的Ethernet过滤器所指为第二层过滤器,即根据MAC地址来行使过滤功能的抓包过滤器。本节会介绍这种过滤器及其配置方法和使用方法。

以下所列为一些简单的第二层过滤器。

要想让抓包过滤器中的字符串起反作用,需在原词之前添加关键字not或符号“!”。举例如下。

抓包过滤器Not ether host <Ethernet host> 或 ! Ether host <Ethernet host>的意思是,让Wireshark舍弃源自或发往由标识符Ethernet host所指定的以太网主机的以太网流量(即所抓以太网流量的源或目的MAC地址,与Ethernet host所定义的MAC地址不匹配)。

请看图2.6所示的网络,该网络中的一台路由器、一台服务器外加多台PC都连接到了同一台LAN交换机上。此外,有一台安装了Wireshark的笔记本也接入了该LAN交换机。在LAN交换机上已开启了端口镜像功能,并将整个VLAN 1(该LAN交换机上的所有端口都隶属于VLAN 1)的流量都重定向给了那台Wireshark主机。

图中紧随IP地址的符号/24所指为该IP地址的24位子网掩码,其二进制和十进制的写法为:11111111.11111111.11111111.00000000和255.255.255.0。

以下所列为以图3.7所示网络为基础,根据特定需求配置的若干抓包过滤器。

图3.7

Wireshark Ethernet抓包过滤器的运作原理非常简单:Wireshark抓包引擎会先拿用户事先指定的源和/或目的主机MAC地址,与抓取到的以太网流量的源和/或目的MAC地址相比较,再筛选出源和/或目的MAC地址相匹配的流量。

所谓以太网广播流量,是指目的MAC地址为广播地址(MAC地址为全1,其十六进制写法为ff:ff:ff:ff:ff:ff)的以太网流量。因此,只要启用了以太网广播过滤器,Wireshark就只会抓取目的MAC地址为ff:ff:ff:ff:ff:ff的以太网流量。以下所列为常见的以太网广播流量。

 注意 

一般而言,有特殊用途的以太网广播流量对网络设备之间的“互通有无”必不可缺。除IPv4 ARP流量之外,此类流量还包括RIP路由协议流量等。

可利用多播过滤器,让Wireshark只抓取IPv4/IPv6 多播流量。

以太网类型所指为以太网帧帧头的ETHER-TYPE字段,其值用来表示由以太网帧帧头所封装的高层协议流量的协议类型。若ETHER-TYPE字段值为0x0800、0x86dd以及0x0806,则以太网帧帧头所封装的分别是IPv4、IPv6以及ARP流量。

所谓主机和网络过滤器,是指基于IP地址的第三层过滤器,本章会介绍此类过滤器的使用及配置方法。

以下所列为一些简单的第三层过滤器。

 注意 

通过标识符host,既可以指定IP地址,也可以指定与某个IP地址相关联的主机名称。比如,抓包过滤器host www.packtpub.com一经配置,Wireshark就只会抓取发往或源于Packt网站的流量了,即所抓数据包的源或目的IP地址(在某种Hostname-to-IP address解析机制里)跟主机名称www.packtpub.com已经绑定。

 注意 

可用 ip proto \<protocol name>(比如,ip proto \tcp)代替ip proto <protocol code>这样的写法。

 注意 

在IPv6包头中,有一个名为“下一个包头”的字段,用来指明本包头之后跟随的是哪一种可选扩展包头。IPv6数据包可以形成扩展包头层层嵌套的局面。对当前版本的Wireshark而言,其抓包过滤器不支持基于IPv6扩展包头链中的相关字段值来执行过滤。

这就根据上一节的内容,来举几个抓包过滤器的配置实例。

配置主机过滤器时,若根据主机名执行过滤,则Wireshark会通过某种名称解析机制把用户输入的主机名转换为IP地址,并抓取与这一IP地址相对应的流量。比方说,若所配抓包过滤器为host www.epubit.com,Wireshark会通过某种名称解析机制(多半为DNS)将其转换为某个IP地址,并抓取源于或发往这一IP地址的所有数据包。请注意,在此情形下,倘若CNN Web站点将访问它的流量转发给设有另一IP地址的其他Web站点,Wireshark也只会抓取IP地址为前者的数据包。

以下所列为一些常用的抓包过滤器。

本章的最后一节会对上述过滤器的语法做进一步的解释。图3.8揭示了上述过滤器的基本原理,中括号内的那两个数字用来确定抓包过滤器所要“关注”的相关协议头部(图中所示为IP包头,还可以关注TCP、UDP或其他协议头部)的内容,第一个数字指明了抓包过滤器应从协议头部的第几个字节开始关注,第二个数字则定义了所要关注的字节数。

图3.8

本节会介绍使用Wireshark抓包时,如何根据第4层协议TCP/UDP的端口号来实施过滤,同时会介绍这种抓包过滤方法。

以下所列为几种基本的第4层抓包过滤器。

以下所列为几种根据端口范围来执行过滤的第4层抓包过滤器。

除了端口号以外,抓包过滤器还能根据以下TCP标记来筛选数据包。

现根据上一节的内容,举几个抓包过滤器的配置实例,如下所列。

 注意 

请注意,在过滤器tcp[tcpflags]&(tcp-syn|tcp-fin)!=0中,执行的是“位”运算(用的是“位与”运算符&),并非“逻辑”运算。举个例子,010 OR 101等于111,不等于000。

有些应用程序在运行时可能需要关联某段连续(而非某个具体)的TCP或UDP端口号,若要抓取涉及此类应用程序的流量,则可以根据端口范围来配置抓包过滤器。

第4层协议(主要是指TCP或UDP)属于互连末端应用程序的协议。末端节点A(比如,Web客户端)向末端节点B(比如,Web服务器)发出连接建立请求时,最常见的“举动”就是发送(第4层协议)报文。运行在那两个末端节点之上,用来发起或接收连接的进程的代号称为(第4层)端口号。第11章会对此展开深入探讨。

对TCP和UDP而言,端口号就是用来标识应用程序的代号。这两种第4层协议之间的差别在于,前者属于面向连接的可靠协议,而后者则是无连接(即不建立连接)的不可靠协议。还有一种名叫流控传输协议(Stream Control Transport Protocol,SCTP)的第4层协议,这是一种高级版本的TCP协议,也使用端口号。

TCP头部设有若干个标记位,这些标记位的主要作用是建立、维护及拆除连接。当TCP报文段的发送方将某一标记位置1时,其意在向TCP报文段的接收方传递某种信号。以下所列为TCP头部中几种常用的标记位。

利用第4层抓包过滤器,既可以让Wireshark只抓取某指定的基于TCP的应用程序生成或接收的流量,也能够筛选出开启了某个标记位的TCP流量。

 注意 

在介绍过滤器tcp[tcpflags]&(tcp-syn|tcp-fin)!=0时,曾强调过使用的是运算符&,而不是更为常见的运算符&&。两种运算符的不同之处在于,使用前者(&或|)时,与运算是按位而不是按整个字段来执行的。

有趣的是,若将上面这种过滤器中的“!=”改为“==”,比如,在Wireshark中应用抓包过滤器tcp[tcpflags]&(tcprst)==1 时,将抓不到任何数据包。这是因为该抓包过滤器会让Wireshark用11111111与所抓TCP报文段的标记字段值执行“位与”运算,并检查结果是否为1。RST标记位置1的TCP报文段的标记字段值为00000010。因此,00000010与11111111执行“位与”运算的结果为00000010,并不等于1。

换言之,若将该过滤器写为tcp [tcpflags]&(tcp-rst)!=0,00000010和11111111之间的“位与”运算结果为00000010,不等于0,故而能够匹配RST标记位置1的TCP报文段。

下列第4层抓包过滤器可供读者在某些反常情况下(比如,当网络遭到攻击时)使用。

图3.9揭示了上述TCP抓包过滤器的幕后原理。由图中所示TCP头部的格式可知,在上述TCP抓包过滤器中,tcp[13]所含数字13指代的是TCP头部中的“标记”字段(自TCP头部的起始处偏移13个字节),而“=”后面的1、3、5等数字则表示的是标记字段中各TCP标记位的置位情况。

图3.9

第11章会详细介绍TCP和UDP这两种第4层协议。

复合型过滤器也叫结构化过滤器,由多个过滤条件构成,过滤条件之间通过not、and或or之类的操作符来进行关联。

结构化抓包过滤器的格式如下所示:

[not] primitive [and | or [not] primitive ...]

以下所列为创建Wireshark抓包过滤器时经常用到的操作符。

对于以下按位运算符:

编写结构化抓包过滤器也很简单,只需根据本章前几节的内容“拼接”好满足需求的一个个条件即可。

下面给出一些经常会用到的结构化抓包过滤器。

再举一个复杂的结构化抓包过滤器示例。

最后举几个比较有意思的结构化抓包过滤器,其具体涵义由读者自行分析。

就过滤功能而言,字节偏移和净载匹配型过滤器要更加灵活,网管人员可凭借该工具来配置自定义型抓包过滤器(自定义型过滤器是指所含字段为非Wireshark解析器预定义的过滤器,可针对私有协议流量实施过滤)。只要网管人员熟悉所接触的网络协议,且对协议数据包的结构摸得门清,就能针对包中所含特定字符串定制特殊的抓包过滤器,让Wireshark在抓包时根据这一过滤器来筛选流量。本节会讲解如何配置这种特殊类型的抓包过滤器,同时还会列举几个在实战中可能会经常用到的配置示例。

要配置字节偏移和净载匹配型抓包过滤器,请运行Wireshark软件,并按3.2节所述步骤行事。

字节偏移和净载匹配型抓包过滤器一经应用,Wireshark便会用其中所含字符串与所抓数据包的相关协议头部中的某些字段值进行比对,并根据比对结果实施过滤。这种过滤器的格式有以下两种。

有了上述过滤器,便可以让Wireshark在抓包时,根据IP、UDP、TCP等协议头部中的某些字段值来实施过滤。对于净载匹配型过滤器,还得知道下述信息。

1.要想针对IP层来实施过滤,字节偏移和净载匹配型抓包过滤器的格式为:

ip[Offset:Bytes]

2.要想根据第4层协议头部中的某些字段值,乃至应用程序的某些特征来实施过滤(比如,针对UDP、TCP头部中的某些字段值,或FTP、HTTP流量的某些特征来实施过滤),最常用的字节偏移和净载匹配型抓包过滤器有以下两种:

tcp[Offset:Bytes]

udp[Offset:Bytes]

下面给出了字节偏移和净载匹配型抓包过滤器的常规写法:

(proto [Offset in bytes from the start of the header : Number of bytes to check])

proto (协议类型,如IP、UDP、TCP等)[协议头部前多少个字节数:抓包过滤器所要检查的字节数] 

下面举几个常用的字节偏移和净载匹配型抓包过滤器示例。

图3.10

中括号内的第一个数字2表示:抓包过滤器应从(Wireshark主机网卡所收数据包的)TCP头部的第2个字节起开始检查;第二个数字2则指明了检查范围为2字节长,即只检查TCP头部的目的端口号字段值。数字50和100则划定了端口范围(确定了TCP头部中目的端口号字段值的范围)。

图3.11

中括号内的第一个数字14表示:抓包过滤器应从(Wireshark主机网卡所收TCP数据包的)TCP头部的第14个字节起开始检查;第二个数字2则指明了检查范围为2字节长,即只检查TCP头部中窗口大小字段值;< 8192则指明了检查条件。

(tcp[12:1]&0xf0)>>2指明了TCP头部的长度[3]

下面再给几个刊载于tcpdump手册页的字节偏移和净载匹配型抓包过滤器示例。

[1] 译者注:原文是“The Wireshark - Capture Filters window enables you to configure filters according to Berkeley Packet Filter (BPF). After writing a filter string, you can click on the Compile BPF button, and the BPF compiler will check your syntax, and if it's wrong you will get an error message”。在Wireshark第2版的Capture Filters窗口中,根本就没有什么Compile BPF按钮。要预定义新的抓包过滤器,只需先点击“+”号按钮,再到文本框内直接输入过滤器字符串,语法正确与否全看文本框Filter部分的颜色。在Capture Interfaces窗口里才有Compile BPF按钮。

[2] 译者注:原文是“proto[x:y] = z: proto[x:y] has the bits set exactly to z”。

[3] 译者注:TCP头部的第13个字节的头4位为有意义的位,是TCP头部的长度字段,用来指明TCP头部的长度;后4位预留,全都置0。TCP头部长度字段值乘以4,表示TCP头部的实际长度。以TCP头部的长度为默认20字节的情况为例,此时,TCP头部字段值为0x5。于是,TCP头部的第13个字节的值为0x50。0x50与0xf0执行“位与”运算的结果还是0x50(二进制值01010000),再执行右移两位的移位运算(>>2),得到10100(十进制值20,常规情况下的TCP头部的实际长度)。之所以要用这么复杂的表达式,是因为还得考虑TCP头部包含选项字段的情况。所以说,过滤表达式“(tcp[12:1]&0xf0)>>2”的作用是,只要是TCP报文段,不论TCP头部的长度为何,都能精确指明TCP头部的字节数)。于是,可以很容易地看出抓包过滤器“port 80 and tcp[((tcp[12:1] &0xf0) >> 2):3] = 0x474554”的真正含义,那就是让Wireshark先筛选出目的端口号为80的TCP报文段,再检查TCP净载的头三个字节是否分别精确匹配0x47、0x45和0x54,即那三个字节在Wireshark的数据包内容区域里是不是分别以G、E、T的面目示人(对应于HTTP GET命令)。


相关图书

CTF快速上手:PicoCTF真题解析(Web篇)
CTF快速上手:PicoCTF真题解析(Web篇)
数字银行安全体系构建
数字银行安全体系构建
软件开发安全之道概念、设计与实施
软件开发安全之道概念、设计与实施
企业信息安全体系建设之道
企业信息安全体系建设之道
内网渗透技术
内网渗透技术
深入浅出密码学
深入浅出密码学

相关文章

相关课程