你所不了解的Wireshark,当程序员肚里的“蛔虫”

举报
Tom forever 发表于 2019/10/12 11:17:03 2019/10/12
【摘要】 Wireshark早已成为网络分析领域里的标配工具,随着Internet和TCP/IP网络的极速发展,该工具受到了网络分析专家及排障工程师的热捧,同时获得了研发工程师们的青睐,因为后一类人需要知道协议在网络中的实际运作方式以及在运行时所碰到的问题。文中包含了许多示例,所有示例均来源于真实案例。作者在处理这些案例时,所花费的时间虽长短不一,但所遵循的原则只有一条,那就是:按部就班,选择正确的工...

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

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


1545389548628020038.png


1545040195142021778.jpg

Wireshark版本2基础知识 

本文会介绍Wireshark所能行使的基本功能。在得出需要动用Wireshark协议分析器的结论之后,就应先行测试,将其安置在网络中正确的位置,赋予其基本的配置,进行相应的优化,使其用起来更为顺手。

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

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

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

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

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

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

安置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上直接观看进进出出的流量了。


1545040195402048813.jpg

图1.1

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

监控整个VLAN的流量:即监控整个VLAN(服务器VLAN或语音VLAN)的所有流量。可借助该特性,在指定的某一具体VLAN内进行流量监控。

“多源归一”的流量监控方式:以图1.1为例,借助该特性,可让Wireshark主机同时监控到服务器S1和S2的流量。

方向选择:可配置交换机,令其将受监控端口的入站流量、出站流量或同时将出入站流量镜像(重定向)给监控端口。

1.2.1 准备工作    

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

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

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

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


1545040195577077933.jpg

图1.2

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

Wireshark组件:Wireshark软件版本2。

TShark组件:一种命令行协议分析器。

Wireshark 1组件:老版Wireshark软件,Wireshark版本1。选择安装该组件时,会同时安装老的Wireshark版本1。就个人经验而言,作者还是会在安装Wireshark未来的几个版本时,选择安装该组件。作者之所以会如此行事,是因为当Wireshark版本2无法正常抓包,或不知如何使用某些功能时,总是有顺手的老版Wireshark可用。

Plugins & Extensions(插件及扩展功能)组件,由以下模块构成。

Dissector Plugins:包含某些扩展的解析(dissection)功能的插件。

Tree Statistics Plugins:扩展的统计信息。

MATE(Meta-Analysis and Tracing Engine):可供用户配置的显示过滤引擎的扩展功能。

SNMP MIB:更细致的SNMP解析功能。

Tools(工具)组件,由以下模块构成。

Editcap:读取抓包文件并将全部或部分数据包写入另一个抓包文件。

Text2Pcap:在ASCII十六进制dump文件中读取数据并将数据写入pcap抓包文件。

Reordercap:用时间戳来记录制抓包文件。

Mergecap:将多个已保存的抓包文件组合并为单个输出文件。

Capinfos:提供与抓包文件有关的信息。

Rawshark:原始数据包过滤器。

1.2.2 操作方法    

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


1545040195729010721.jpg

图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所示。


1545040195965032330.jpg

图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所示)的流量。当然,这两种方法有所不同。


1545040196114018407.jpg

图1.5

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

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

4.分路器和Hub

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

分路器:可在受监控链路上用一种叫做分路器(Test Access Point,TAP)的设备来取代图1.4中的交换机。这是一种简单的“三通”(三端口)设备,执行流量监控时,其所起作用跟交换机相同。与交换机相比,TAP不但便宜而且使用方便。此外,TAP还会把错包原样传递给Wireshark,而LAN交换机则会把错包完全丢弃。交换机不但价格高昂,而且还得花时间来配置,当然它所支持的监控功能也更多(比如,一般的LAN交换机都支持简单网络管理协议[SNMP])。排除网络故障时,最好能用可管理的交换机,哪怕是功能没那么丰富的可网管交换机也好。

Hub:可在受监控的链路上用一台Hub来取代图1.4中的交换机。Hub属于半双工设备。借此设备,路由器和SP设备之间穿行的每一个数据包都能被Wireshark主机看得一清二楚。使用Hub最大的坏处是,会显著加剧流量的延迟,从而对流量采集产生影响。如今,监控千兆端口的流量可谓是家常便饭,在这种情况下使用Hub,将会使链路速率骤降为百兆,这会对抓包产生严重影响。所以说,在抓包时一般都不用Hub。

1.2.3 幕后原理    

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

LAN交换机会“坚持不懈”地学习接入本机的所有设备的MAC地址。

收到发往某MAC地址的数据帧时,LAN交换机只会将其从学得此MAC地址的端口外发。

收到广播帧时,交换机会从除接收端口以外的所有端口外发。

收到多播帧时,若未启用Cisco组管理协议(Cisco Group Management Protocol,CGMP)或Internet组管理协议(Internet Group Management Protocol,IGMP)监听特性,LAN交换机会从除接收端口以外的所有端口外发;若启用了以上两种特性之一,LAN交换机将会通过连接了相应多播接收主机的端口外发多播帧。

收到目的MAC地址未知的数据帧时(这种情况比较罕见),交换机会从除接收端口以外的所有端口外发。

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


1545040196245096723.jpg

图1.6

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

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

1.2.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主机必须直连核心层交换机。


1545040196421026310.jpg

图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主机会再收取一次。这么一来,便抓到了重复的流量。


1545389525396043596.png


1545040195142021778.jpg

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

    [印度]甘德拉·库马尔·纳纳、尧戈什·拉姆多斯[以色列]约拉姆·奥扎赫 著

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

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

本文转载自异步社区。

文链接:https://www.epubit.com/articleDetails?id=Nce10181d-c79f-406b-a33f-85cd9e1442c9


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。