零、前言
Wireshark 早已成为网络分析的市场标准,随着互联网和基于 TCP/IP 的网络的发展,它变得非常流行,用于网络分析和故障排除,以及 R&D 工程,以了解网络上实际运行的内容以及我们面临的问题。
这本书包含了排除数据通信网络故障的实用方法。这本书的第二版侧重于 Wireshark 2,由于它提供的增强功能,它已经获得了很大的吸引力。该书扩展了第一版中探索的一些主题,包括 TCP 性能、网络安全、无线局域网,以及如何使用 Wireshark 进行云和虚拟系统监控。您将学习如何使用 Wireshark 分析单播和组播流量的端到端 IPv4 和 IPv6 连接故障。这本书还包括 Wireshark 捕获文件,以便您可以实践您所学到的东西。您将了解电子邮件协议的正常操作,并学习如何使用 Wireshark 进行基本分析和故障排除。使用 Wireshark,您将能够对企业网络中使用的常见应用(如 NetBIOS 和 SMB 协议)进行故障排除。最后,您还将能够测量网络参数,检查由这些参数引起的网络问题,并有效地解决它们。到本书结束时,您将知道如何分析流量,如何找到各种违规流量的模式,以及如何保护您的网络免受其害。
顾名思义,这是一本烹饪书。这是一个关于如何分析网络的有效的、有针对性的方法的列表。每个方法都针对一个特定的问题,如何使用 Wireshark,在哪里寻找,寻找什么,以及如何找到问题的原因。为了完成这幅图画,每一个食谱提供主题的理论基础,为了给读者必需的理论背景。
你会在书中看到很多例子,而且都是现实世界的案例。有些问题我花了几分钟就解决了,有些花了几个小时,有些花了很多天。但是他们都有一个共同的过程:系统地工作,使用适当的工具,尝试进入应用作者的头脑,并且,正如有人曾经告诉我的那样,尝试像网络一样思考。这样做,使用 Wireshark,你会得到结果。这本书的目的就是试图让你达到目的。玩得开心!
这本书是给谁的
本书面向使用 Wireshark 进行网络分析和故障排除的安全专业人员、网络管理员、R&D、工程和技术支持人员以及通信经理。它要求对网络概念有基本的了解,但不要求对协议或供应商实施有具体详细的技术知识。
从这本书中获得最大收益
您需要安装 Wireshark 软件。可以从www.wireshark.org下载。
下载彩色图像
我们还提供了一个 PDF 文件,其中有本书中使用的截图/图表的彩色图像。可以在这里下载:https://www . packtpub . com/sites/default/files/downloads/networkanalysisgusingwireshark cookbooksecondedition _ color images . pdf。
使用的惯例
本书通篇使用了许多文本约定。
CodeInText
:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄。下面是一个例子:“添加字符串tcp.window_size
来查看 TCP 窗口大小。”
代码块设置如下:
tcp[Offset:Bytes]
//Or
udp[Offset:Bytes]
Bold :表示一个新术语、一个重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词出现在文本中,如下所示。这里有一个例子:“当你去配置菜单,选择网络。”
警告或重要提示如下所示。
提示和技巧是这样出现的。
部分
在这本书里,你会发现几个经常出现的标题(做好准备,怎么做…、工作原理…,还有更多…和参见。
要给出如何完成配方的明确说明,请使用以下章节:
做好准备
本节将告诉您制作方法的内容,并介绍如何设置制作方法所需的任何软件或任何初步设置。
怎么做…
本节包含遵循配方所需的步骤。
它是如何工作的…
这一部分通常包括对前一部分发生的事情的详细解释。
还有更多…
这一部分包含了关于配方的附加信息,以使你对配方有更多的了解。
请参见
这个部分提供了一些有用的链接,可以链接到食谱的其他有用信息。
取得联系
我们随时欢迎读者的反馈。
总体反馈:发送电子邮件feedback@packtpub.com
,在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发邮件至questions@packtpub.com
联系我们。
勘误表:虽然我们已经尽力确保内容的准确性,但错误还是会发生。如果你在这本书里发现了一个错误,请告诉我们,我们将不胜感激。请访问 www.packtpub.com/submit-errata,选择您的图书,点击勘误表提交表格链接,并输入详细信息。
盗版:如果您在互联网上遇到我们作品的任何形式的非法拷贝,如果您能提供我们的地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com
联系我们,并提供材料链接。
如果你有兴趣成为一名作家:如果有你擅长的主题,并且你有兴趣写书或投稿,请访问 authors.packtpub.com。
复习
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?潜在的读者可以看到并使用您不带偏见的意见来做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢大家!
更多关于 Packt 的信息,请访问packtpub.com。
一、Wireshark v2 简介
在本章中,您将了解:
- Wireshark v2 基础知识
- 定位 Wireshark
- 在虚拟机和云上捕获数据
- 开始捕获数据
- 配置开始窗口
- 保存、打印和导出数据
Wireshark v2 基础知识
在本章中,我们将介绍与 Wireshark 相关的基本任务。在本书的前言中,我们稍微谈到了网络故障排除,我们看到了在这个过程中可以帮助我们的各种工具。在我们得出需要使用 Wireshark 协议分析器的结论后,是时候在网络中找到它进行测试了,用基本配置对它进行配置,并使它变得友好。
虽然为基本数据捕获设置 Wireshark 被认为非常简单和直观,但在特殊情况下我们可以使用许多选项;例如,当我们通过连接连续捕获数据并希望将捕获文件分割成小文件时,当我们希望看到参与连接的设备的名称而不仅仅是 IP 地址时,等等。在本章中,我们将学习如何针对这些特殊情况配置 Wireshark。
在简要介绍 Wireshark v2 之后,我们将在本章介绍几个方法来描述如何找到并开始使用该软件。
本章的第一个诀窍是定位 Wireshark;它描述了如何以及在哪里找到 Wireshark 来捕获数据。它会在服务器上吗?在交换机端口上?在防火墙之前?之后呢?我们应该将它连接到路由器的哪一侧,局域网侧还是广域网侧?我们应该期望从他们每一个人身上得到什么?第一个食谱描述了这个问题,以及如何做的建议。
下一个诀窍是关于在过去几年中变得非常重要的一个问题,那就是在虚拟机上捕获数据的诀窍*,它描述了如何安装和配置 Wireshark 的实际方面,以便监控在过去几年中被大多数服务器使用的虚拟机。*
近年来出现的另一个问题是如何监控存储在云中的虚拟机。在在云上捕获数据方法*、*中,我们有几个问题要讨论,其中包括如何解密大多数情况下在您和云之间加密的数据,如何使用云上可用的分析工具,以及哪些工具可从主要云供应商如 Amazon AWS、Microsoft Azure 等处获得。
本章的下一个诀窍是开始捕获数据,这实际上是如何开始使用软件,以及配置、打印和导出数据。我们讨论文件操作,即如何保存捕获的数据,无论我们是想保存全部数据、部分数据还是只保存过滤后的数据。我们将数据导出为各种格式,合并文件(例如,当您想要合并两个不同路由器接口上的捕获文件时),等等。
定位 Wireshark
理解问题并决定使用 Wireshark 后的第一步是决定在哪里放置它。为此,我们需要一个精确的网络图(至少是与我们的测试相关的网络部分)并找到 Wireshark。
基本原理是定位你想要监控的设备,将你的笔记本电脑连接到它所连接的同一个交换机,并配置一个端口镜像,或者在思科它被称为端口监控器或交换端口分析器 ( SPAN )到被监控的设备。此操作使您能够看到进出受监控设备的所有流量。这是最简单的情况。
您可以监控 LAN 端口、WAN 端口、服务器或路由器端口,或者连接到网络的任何其他设备。
在此图所示的示例中,Wireshark 软件安装在左侧的笔记本电脑上,以及我们要监控的服务器 S2 上:
在最简单的情况下,我们按照图中所示的方向配置端口镜像;这将监控所有进出服务器 S2 的流量。当然,我们也可以直接在服务器上安装 Wireshark,这样我们就可以直接在服务器上观察流量。
一些局域网交换机供应商还提供其他功能,例如:
- 监控整个 VLAN :我们可以监控服务器的 VLAN、电话 VLAN 等等。在这种情况下,您将看到特定 VLAN 上的所有流量。
- 监控几个端口到单个分析器:我们可以一起监控服务器 S1 和 S2 上的流量。
- 过滤:过滤包括配置是否监控传入流量、传出流量或两者。
做好准备
要开始使用 Wireshark,请访问 Wireshark 网站并下载该工具的最新版本。
Wireshark 的更新版本可以在 http://www.wireshark.org/网站上找到;选择下载。这将为您带来下载 Wireshark 页面。下载最新的 Wireshark v2。在 https://www.wireshark.org/#download 的发布的 X.X 稳定版本。
每个 Wireshark Windows 软件包都带有 WinPcap 的最新稳定版本,这是实时数据包捕获所必需的。WinPcap 驱动程序是用于流量捕获的 UNIX libpcap
库的 Windows 版本。
在安装过程中,您将看到软件包的安装窗口,如下图所示:
通常在这些设置窗口中,我们简单地检查所有并安装。在这种情况下,我们有一些有趣的事情:
- Wireshark:这是 Wireshark v2 软件。
- TSark:命令行协议分析器。
- Wireshark 1:老版 Wireshark 1。当您选中此项时,将同时安装旧版 Wireshark 版本 1。就我个人而言,我更喜欢在接下来的几个版本中安装它,所以如果 Wireshark v2 出现问题或者您不知道如何使用它,您总是可以使用旧版本。
- 插件和扩展:
- 剖析器插件:带有一些扩展剖析的插件
- 树统计插件:扩展统计
- Mate:元分析和跟踪引擎:显示过滤引擎的用户可配置扩展
- SNMP MIBs:更详细的 SNMP 剖析
- 工具:
- Editcap:读取一个捕获文件,并将部分或全部数据包写入另一个捕获文件
- Text2Pcap:读入 ASCII 十六进制转储并将数据写入 Pcap 捕获文件
- Reordercap:按时间戳对捕获文件进行重新排序
- Mergecap:将多个保存的采集文件合并成一个输出文件
- Capinfos:提供关于捕获文件的信息
- Rawshark:原始数据包过滤器
怎么做…
让我们看看典型的网络体系结构、网络设备、它们的工作方式、需要时如何配置它们,以及 Wireshark 的位置:
让我们看看上图中简单而常见的网络架构。
监控服务器
这是我们最常见的需求之一。这可以通过为服务器配置端口监视器(在上图中编号为1
)或在服务器上安装 Wireshark 来实现。
监控路由器
为了监控路由器,我们可以使用以下方法:
案例 1:监控路由器连接的交换机端口:
- 在上图中编号为 2 的例子中,我们将笔记本电脑连接到路由器所连接的交换机
- 在交换机上,配置从路由器连接的端口到笔记本电脑连接的端口的端口镜像
情况 2:具有交换模块的路由器
- 在这种情况下,在上图中编号为 5 和 6 ,我们在路由器上有一个交换机模块(例如,思科以太网交换机或 HWIC 模块),我们可以像使用标准交换机一样使用它(在上图中,编号为 5 用于 LAN 端口,编号为6 用于 WAN 端口)
一般来说,路由器不支持端口镜像或 SPAN。在简单的家用/SOHO 路由器中,您将没有此选项。在某些情况下,端口镜像选项可用于 Cisco 2800 或 3800 等路由器的交换机模块,当然也可用于 Cisco 6800 等大型路由器。
- 在这种情况下,您将只能监控那些连接到交换机模块的端口
情况 3:没有交换模块的路由器
- 在这种情况下,您可以在路由器端口和服务提供商 ( SP )网络之间连接一个交换机,并在该交换机上配置端口监视器,如下图所示:
- 在这种情况下,从路由器连接的端口到笔记本电脑连接的端口配置端口监视器。
连接路由器和服务提供商之间的交换机是一个断开连接的操作,但当您为此做准备时,应该不到一分钟。
情况 4:具有嵌入式数据包捕获的路由器
在近年来的路由器中,您还可以选择在路由器中集成数据包捕获功能。比如在思科 IOS 版本 12.4(20)T 或更高版本、思科 IOS-XE 版本 15.2(4)S-3.7.0 或更高版本,还有来自 SRX/J 系列路由器来自瞻博、来自河床的stealthead等众多品牌。
使用此选项时,请确保您的设备有足够的内存,并且不要将设备加载到会降低其运行速度的程度。
当监控路由器时,不要忘记这一点:可能发生的情况是,并非所有进入路由器的数据包都会被转发出去!有些数据包可能会丢失、被丢弃在路由器缓冲区中,或者被路由回它们来自的同一个端口,当然,有些广播不是由路由器转发的。
监控防火墙
当然,在监控防火墙时,监控内部端口(下图中编号为 1)还是外部端口(下图中编号为 2)是不同的:
在内部端口上,您将看到所有内部地址和由在内部网络中工作的用户发起的所有流量,而在外部端口上,您将看到我们发出的外部地址(由 NAT 从内部地址转换而来),您将看不到被防火墙阻止的来自内部网络的请求。如果有人从互联网上攻击防火墙,你将(希望)只在外部端口上看到它。
在某些品牌的防火墙中,您还可以选择使用嵌入式捕获引擎,如上文路由器一节所述。
测试接入点和集线器
您可以使用的另外两种设备是分路器和集线器:
-
测试接入点(TAPs) :您可以连接一个称为 TAP 的设备,这是一个简单的三端口设备,在这种情况下,它将扮演与交换机相同的角色,而不是将交换机连接到您想要监控的链路。与开关相比,分路器的优势在于简单性和价格。TAPs 还转发 Wireshark 可以监控的错误,不像 LAN 交换机会丢弃这些错误。另一方面,交换机要贵得多,需要几分钟来配置,但为您提供了额外的监控功能,例如 SNMP。当您排除网络故障时,最好有一个可用的管理局域网交换机,即使是一个简单的交换机。
-
集线器:您可以简单地将一个集线器并联到您想要监控的链路上,由于集线器是一个半双工设备,路由器和 SP 设备之间发送的每个数据包都会在您的 Wireshark 上被监控。这种方法最大的缺点是集线器本身会降低流量,因此会影响测试。在许多情况下,您还希望监控 1 Gbps 端口,由于没有集线器可用于此目的,您必须将速度降低到 100 Mbps,这又会影响流量。因此,集线器通常不用于此目的。
它是如何工作的…
要理解端口监视器的工作原理,首先要理解局域网交换机的工作方式。LAN 交换机以下列方式转发数据包:
- LAN 交换机不断学习与其相连的设备的 MAC 地址
- 现在,如果数据包被发送到目的 MAC,它将只被转发到交换机已经知道该 MAC 地址来自的物理端口
- 如果发送了广播,它将被转发到交换机的所有端口
- 如果发送多播,并且 CGMP 或 IGMP 被禁用,它将被转发到交换机的所有端口(CGMP 和 IGMP 是允许多播数据包仅被转发到特定多播组上的设备的协议)
- 如果数据包被发送到交换机不知道的 MAC 地址(这种情况非常罕见),它将被转发到交换机的所有端口
在下图中,您可以看到一个基于第 2 层的网络如何工作的示例。连接到网络的每台设备都会定期发送广播。它可以是 ARP 请求、NetBIOS 广告等等。广播一经发送,便会通过整个第 2 层网络转发出去(图中的虚线箭头)。在本例中,所有交换机都从接收 MAC 地址的端口上获知了 MAC 地址 M1 。
现在,当 PC2 想要向 PC1 发送帧时,它会将帧发送到与之相连的交换机 SW5 。 SW5 已经学习到左边第五个端口上的 MAC 地址 M1 ,并且那是帧被转发的地方。同样,每台交换机将帧转发到它从中学习到该帧的端口,最后转发到 PC1 。
因此,当您为特定端口配置端口监视器时,您将看到进出该端口的所有流量。如果您将笔记本电脑连接到网络,而不进行任何配置,您将只能看到进出笔记本电脑的流量,以及来自网络的广播和组播。
还有更多…
在捕获数据时,您应该注意一些棘手的情况。
监控 VLAN-监控 VLAN 时,您应该注意几个重要问题。第一个问题是,即使您监控 VLAN,数据包也必须通过您所连接的交换机进行物理传输才能被看到。例如,如果您监控网络中配置的 VLAN-10,并且您连接到您的楼层交换机,您将看不到从其它交换机到中心交换机上的服务器的流量。这是因为在楼宇网络中,用户通常连接到楼层中的单个或多个位置的楼层交换机,这些楼层交换机连接到楼宇中央交换机(或两个冗余交换机)。要监控 VLAN 上的所有流量,您必须连接到一台交换机,VLAN 的所有流量都通过该交换机,这通常是中央交换机:
在上图中,如果您将 Wireshark 连接到交换机 SW2,并将监视器配置到 VLAN30,您将看到所有数据包进出 P2 、 P4 和 P5 ,在交换机内部或外部。您将看不到在 SW3 、 SW1 上的设备之间传输的数据包,或 SW1 和 SW3 之间的数据包。
监控 VLAN 的另一个问题是您可能会看到重复的数据包。这是因为当您监控 VLAN 和进出 VLAN 的数据包时,您会看到进出 VLAN 的数据包也是相同的。
您可以在下图中看到原因。例如,当 S4 向 S2 发送数据包,并且您将端口镜像配置为 VLAN30 时,您将会看到数据包曾经从 S4 发送到交换机并进入 VLAN30 ,然后当离开 VLAN30 到 S2 时:
请参见
有关如何配置端口镜像的信息,请参阅供应商的说明。可以叫端口监视器、端口镜像,或者思科的 SPAN 。
还有一些高级功能,如远程监控(当您监控未直接连接到交换机的端口时)、高级过滤(如过滤特定的 MAC 地址)等。还有一些高级交换机,它们本身具有捕获和分析功能。还可以监控虚拟端口(例如,LAG 或 EtherChannel 组)。对于所有情况,以及本配方中描述的其他情况,请参考供应商的规范。
例如,有关供应商信息,您可以查看以下链接:
- Cisco IOS SPAN(针对 catalyst 交换机):http://www . Cisco . com/c/en/us/support/docs/switches/catalyst-6500-series-switches/10570-41 . html
- 思科 IOS 嵌入式数据包捕获功能:http://www . Cisco . com/c/en/us/products/parallels/IOS-NX-OS-software/IOS-Embedded-Packet-Capture/data sheet _ c78-502727 . html
- 检查点数据包嗅探器功能:https://www.checkpoint.com/smb/help/utm1/8.2/2002.htm
- Fortinet FortiOS 包嗅探器:http://kb.fortinet.com/kb/viewContent.do?externalId=11186
捕获虚拟机上的数据
做好准备
在过去的几年中,大量的服务器正在迁移到虚拟环境中,即在单个硬件设备上部署大量的服务器。
首先,整理一下术语。在虚拟世界中,有两个主要术语需要记住:
- 虚拟机是安装在单个或多个硬件平台上的计算机系统的模拟。虚拟机主要用于虚拟服务器的环境中。用于服务器虚拟化的主要平台有 VMware ESX 、微软 Hyper-V 或 Citrix XenServer。
- 刀片服务器是一个笼子,里面装有服务器卡和局域网交换机,以便将它们连接到世界各地。
在本节中,我们将了解这些组件中的每一个,并了解如何对它们进行监控。
怎么做…
我们来看看怎么做。
安装在单个硬件上的虚拟机上的数据包捕获
下图显示了带有虚拟机的单个硬件:
正如您在上图中看到的,我们有运行在操作系统(图中的来宾操作系统)上的应用。几个客户操作系统运行在硬件平台上运行的虚拟化软件上。
正如本章前面提到的,为了捕获数据包,我们有两种可能:在我们想要监控的设备上安装 Wireshark,或者将端口镜像配置到与网络接口卡 ( NIC )连接的 LAN 交换机。
因此,在单个硬件上的虚拟平台的情况下,我们有以下可能性:
- 在要监控的特定服务器上安装 Wireshark,并开始在服务器上捕获数据包。
- 将您的笔记本电脑连接到交换机 8 ,并为服务器配置一个端口镜像。在上图中,将笔记本电脑连接到交换机上的一个空闲端口,端口镜像到端口 1 和 2 。这里可能发生的问题是你监控。
第一种情况很明显,但第二种情况可能会出现一些问题:
- 如上图所示,通常有两个或更多端口连接在服务器和 LAN 交换机之间。这种拓扑称为链路聚合 ( 滞后)、成组,或者如果您使用思科交换机,称为以太网信道。监控服务器时,检查是否配置了负载分担或端口冗余(也称为故障转移)。如果它配置了端口冗余,那就很简单:检查活动端口是什么,并为其配置端口镜像。如果它配置了负载共享,您必须配置以下选项之一:
- 端口镜像到 LAG 接口:即端口镜像到包含两个或更多物理接口的虚拟接口。通常被交换机厂商称为端口组或端口通道接口。
将多个端口组合成一个聚合有不同的术语。最常见的标准是 802.3ad (LAG),后来被 802.3AX LAG 取代。还有思科 EtherChannel,服务器厂商称之为组队或 NIC 组队(微软)绑定(各种 Linux 系统)基于负载的组队 ( LBT )等术语。重要的是检查它是负载共享还是冗余配置。请注意,所有机制中使用的机制都是共享而非平衡的,这是因为接口之间的负载不平衡。
在任何情况下,Wireshark 都不适合高速数据包捕获,也不适合超过 200-300 Mbps 的速度,因此在监控大流量时,请配置捕获过滤器或使用合适的商业软件。
刀片服务器上的数据包捕获
在使用刀片中心的情况下,我们有以下硬件拓扑:
如图所示,我们有一个刀片中心,它包含以下部件:
- 刀片服务器:这些是硬件卡,通常位于刀片服务器的前端。
- 服务器:安装在硬件服务器上的虚拟服务器,也称为虚拟机。
- 内部局域网开关:安装在刀片中心前面或后面的内部局域网开关。这些交换机通常有 12-16 个内部或虚拟端口(图中的 Int )和 4-8 个外部或物理端口(图中的 Ext )。
- 外部开关:安装在通讯架上,不是刀片中心的一部分。
监控刀片中心更加困难,因为我们无法直接访问通过它的所有流量。这样做有几种选择:
- 刀片中心的内部监控:
- 对于特定服务器上的流量,请在虚拟服务器上安装 Wireshark。在这种情况下,您只需确保从哪些虚拟端口发送和接收流量。您将在虚拟机配置中看到这一点,同时在 Wireshark 上选择一个接口,并查看流量流向哪个接口。
- 第二种选择是在不同的虚拟机上安装 Wireshark,并在您希望监控的服务器和安装了 Wireshark 的虚拟机之间的刀片中心交换机中配置端口镜像。
- 从服务器到刀片中心交换机( 1 )在上图中:
- 对于从服务器到交换机的流量,配置从服务器连接的虚拟端口到连接笔记本电脑的物理端口的端口镜像。大多数供应商都支持这个选项,并且可以进行配置。
- 对于外部监控,从内部刀片中心交换机到外部交换机的流量:
- 在内部或外部交换机上使用标准端口镜像
它是如何工作的…
如前所述,有几种类型的虚拟平台。我将解释在 VMware 上操作的方式,这是最流行的方式之一。
在每个虚拟平台上,您可以配置主机,为其提供虚拟机使用的 CPU 和内存资源,并授予虚拟机对这些资源的访问权限。
在下一个屏幕截图中,您会看到一个地址为 192.168.1.110 的虚拟化服务器,配置了四个虚拟机:Account1、Account2、Term1 和 Term2。这些是虚拟服务器,在本例中,两台服务器用于记账,两台服务器用于终端:
当您转到配置菜单并选择网络时,如下一个屏幕截图所示,您会看到 vSwitch。在左侧,您可以看到连接到服务器的内部端口,在右侧,您可以看到外部端口。
在本例中,我们看到虚拟服务器 Account1、Account2、Term1 和 Term2 在右侧,我们看到物理端口 vmnic0。
标准和分布式虚拟交换机
VMware 平台 vSphere 提供两种虚拟交换机,标准和分布式:
- 标准虚拟交换机是每个 vSphere 安装都有的,无论它运行的许可证是什么
- 分布式虚拟交换机仅适用于拥有企业升级版许可证的用户
分布式 vSwitch 中启用端口镜像;怎么配置?您可以在 VMware vSphere 6.0 文档中心的使用端口镜像部分找到答案:http://pubs . VMware . com/VSP here-60/index . JSP # com . VMware . VSP here . networking . doc/GUID-cffd 9157-FC17-440d-BD B4-e 16 FD 447 a1 ba . html。
请参见
对于特定供应商的镜像配置:
- 对于 Alteon(现为 Radware)刀片式交换机:http://www . blade network . net/user files/file/pdf/IBM _ GbE _ L2-3 _ Applicat _ guide . pdf
- 对于思科刀片式交换机(称为 SPAN):http://www . Cisco . com/c/dam/en/us/TD/docs/switches/blades/igesm/software/release/12-1 _ 14 _ ay/configuration/guide/25k 8411 b . pdf,第 340 页, SPAN 和 RSPAN 概念和术语
开始捕获数据
在我们找到网络中的 Wireshark 后,我们将学习如何开始捕获数据,以及在各种捕获场景中会得到什么。
做好准备
在您的计算机上安装 Wireshark 后,唯一要做的事情就是从桌面、程序文件或快速启动栏启动 analyzer。
为了保持一致性,本书是为 2016 年 2 月开始的 Wireshark 2 . 0 . 2 版编写的。一般来说(但不总是),如果你查看版本号 X Y Z,当 X 改变时,它将是一个主要版本(像 v2),每隔几年改变一次,并完全出现在软件中。当 Y 发生变化时,通常会是额外的功能或某些功能的重大变化,而如果 Z 发生变化,通常会是 bug 修复和新的协议解析器。由于新的次要版本通常每隔几周发布一次,您可以快速浏览一下它们的发行说明。
当您这样做时,将会打开以下窗口(v2.0.2):
在开始窗口中,您将看到以下部分:
- 主菜单,具有文件、编辑和查看操作、捕获、统计和各种工具。
- 主工具栏,提供对菜单中常用项目的快速访问。
- 过滤器工具栏,它提供对显示过滤器的访问。
在开始窗口的主区域,我们有以下项目:
- 最近打开的文件列表
- 一个捕获部分,使我们能够配置捕获过滤器,并显示我们的计算机接口上的流量
在计算机接口上看到流量是版本 1 的一个很好的改进,因为它使我们能够快速看到活动的接口并开始捕获它们。
- 学习部分可以将我们直接带到手册页
怎么做…
在 Wireshark v2 中,这非常简单。当您运行该软件时,在主窗口中,您会看到所有接口以及通过它们的流量。见以下截图:
开始简单的单界面捕获的最简单方法就是双击活动界面( 1 )。也可以标记活动界面,点击窗口左上角的捕获按钮( 2 ,或者从捕获菜单中选择开始或Ctrl+E(3)。
在多个接口上捕获
为了在多个接口上开始捕获,您只需使用 Windows Ctrl 或 Shift 键,并左键单击选择您想要从中捕获数据的接口。在下面的屏幕截图中,您会看到无线网络连接和本地区域连接被拾取:
而且你会得到的流量会来自两个接口,从下一张截图可以看到:10.0.0.4
在无线接口上,169.254.170.9
1 自动私有 IP 地址 ( APIPA )在局域网接口上。
APIPA 地址是在您将设备配置为使用 DHCP 客户端时自动分配的地址,不会获取任何地址。APIPA 地址与任何其他地址一样,可以在本地使用,但通常用于通知您的 DHCP 服务器不可用。
在许多情况下,在多个接口上使用捕获会很有帮助,例如,当您有多个物理网卡时,您可以同时对两个不同的服务器、路由器的两个端口或任何其他多个端口进行端口监控。典型配置如下图所示:
如何配置从中捕获数据的接口
- 要配置从中捕获数据的接口,请从“捕获”菜单中选择选项。将出现以下窗口:
在此窗口中,您可以配置以下参数:
- 在窗口上方的主窗口中,选择要从中捕获数据的接口。如果不需要其他配置,请单击 Start 开始捕获。
- 在左下角,您有复选框在所有接口上使用混杂模式。选中后,Wireshark 将捕获计算机收到的所有数据包。取消选中它将只捕获发往该计算机的数据包。
在某些情况下,选中此复选框时,Wireshark 不会在无线接口上捕获数据,因此如果您开始在无线接口上捕获数据,但什么也看不到,请取消选中它。
- 在屏幕中间,接口窗口的正下方,您可以配置捕获过滤器。我们将在第 3 章、中使用捕获过滤器学习捕获过滤器。
在窗口的顶部,我们有三个选项卡:输入(默认打开)、输出和选项。
将数据捕获到多个文件中
单击输出选项卡,将打开以下窗口:
此窗口支持在多个文件中采集。要对此进行配置,请将捕获中的文件名写入永久文件区域。Wireshark 将以此名称保存捕获的文件,扩展名为 0001、0002 等,所有文件都保存在您在浏览中指定的路径下…按钮。当捕获大量数据时,此功能极其重要,例如,当通过负载较重的接口或长时间捕获数据时。您可以告诉软件在特定的时间、文件大小或数据包数量后打开新文件。
配置输出参数
- 当您选择选项选项卡时,将会打开以下窗口。
- 在左侧(1),您可以选择显示选项。这些选项是:
- 实时更新数据包列表:选中此选项后,Wireshark 会实时更新数据包窗格中的数据包
- 实时捕获期间自动滚动:选中此选项后,Wireshark 会在新数据包进入时在数据包窗格中向下滚动数据包
- 隐藏捕获信息对话框:选中此项,捕获信息对话框将被隐藏
- 右边是名称解析选项。在这里,我们可以检查:
- 将 MAC 地址的第一部分解析为供应商 ID 的 MAC 地址解析。
- 解析为 DNS 名称的 IP 地址解析。
- 解析为应用名称的 TCP/UDP 端口号。这些是端口号;例如,TCP 端口 80 将显示为 HTTP,端口 25 显示为 SMTP,以此类推。
Wireshark 名称解析有一些限制。尽管 Wireshark 缓存 DNS 名称,但解析 IP 地址是一个需要 DNS 转换的过程,因此会降低捕获速度。这个过程本身还会产生额外的 DNS 查询和响应,您可以在捕获文件中看到。名称解析经常会失败,因为您查询的 DNS 不一定熟悉捕获文件中的 IP 地址。出于所有这些原因,尽管网络名称解析是一个有用的功能,但您应该小心使用它。
管理接口(在输入选项卡下)
-
正如您在下面的屏幕截图中看到的,在右下角,您有管理界面…有三个选项卡的按钮;本地接口**、**管道和远程接口。Wireshark 可以从以下选项捕获数据:
-
当您选择管理接口时…按钮和输入选项卡,您将看到一个可用的本地接口列表,包括隐藏的接口,这些接口没有在其他列表中显示:
-
Wireshark 还可以从另一个应用实时读取捕获的数据包。
捕获远程机器上的数据包
要从远程机器捕获数据,请执行以下操作:
-
在远程机器上安装 pcap 驱动程序。你可以在 http://www.winpcap.org/的找到它或者安装整个 Wireshark 软件包。
-
要在远程机器上捕获数据,请选择选项|捕获接口|管理接口|远程接口。以下窗口将会打开:
-
在本地计算机上:
- 主机名:远程机器的 IP 地址或主机名
- 端口:2002:您可以让它保持打开,它使用默认的 2002
- 密码验证:远程机器的用户名和密码。
-
在远程计算机上:
- 在您要从中收集数据的远程 PC 上安装 WinPcap。你可以从 http://www.winpcap.org/那里得到它。不需要安装 Wireshark 本身,只需要安装 WinPcap。
- 配置防火墙从您的机器上打开 TCP 端口
2002
。 - 在远程 PC 上,将用户添加到 PC 用户列表,为其提供密码和管理员权限。您可以通过控制面板|用户帐户和家庭安全|添加或删除用户帐户|创建新帐户来进行配置。
- 右键单击 Windows 屏幕左侧的开始符号,选择打开 Windows 资源管理器,右键单击计算机,然后选择管理。在“管理”窗口中,打开服务,如下所示:
- 您将在远程接口上看到您已配置的接口,当您单击 OK 时,您也将在本地接口列表上看到它。现在,您可以在它上面捕获数据包,就好像它是您机器上的本地接口一样。
例如,当您监控您的 PC 和一台远程计算机之间的连接,甚至两台远程计算机之间的连接时,此功能会非常有用。当你实现它时,你会看到设备上的数据包;然后你会看到他们到达(或者没有!)在另一个设备上,这是一个非常强大的工具。
该文件作为Cap_B05518_01_01
附后。
开始捕获数据–在 Linux/Unix 机器上捕获数据
在 Linux 和 Unix 设备中,我们有很好的旧 TCPDUMP 实用工具,实际上是 Wireshark 的来源命令。
要使用 TCPDUMP ,您可以使用以下命令(最常用的命令):
- 在特定接口上捕获数据包:
- 语法是 tcpdump -i <接口 _ 名称>
- 例如 tcpdump -i eth0
- 捕获数据包并保存在文件中:
- 语法是 tcpdump -w <文件名> -i <接口名>
- 例如 tcpdump -w test001 -i eth1
- 读取捕获的数据包文件:
- 语法是 tcpdump -r <文件名>
- 例如 tcpdump -r test001
要使用捕获过滤器,使用第 3 章、使用捕获过滤器中描述的捕获过滤器格式。
从远程通信设备收集
在本节中,我们将描述如何从远程通信设备捕获数据。由于有许多供应商支持该功能,我们将为一些主要供应商提供该功能的一般指南,以及他们网站的链接,以获得准确的配置。
这里的一般想法是,有些供应商允许您在本地收集捕获的数据,然后将捕获文件下载到外部计算机。
对于思科设备来说,这个功能叫做嵌入式数据包捕获 ( EPC ,你可以在下面的链接中找到如何实现:http://www . Cisco . com/c/en/us/support/docs/IOs-NX-OS-software/IOs-Embedded-Packet-Capture/116045-product config-EPC-00 . html。在此链接中,您可以找到如何为 Cisco IOS 和 IOS-XE 操作系统配置捕获。
对于 Juniper 设备,该命令被称为 monitor traffic,您可以在http://www . Juniper . net/tech pubs/en _ US/Junos 14.1/topics/reference/command-summary/monitor-traffic . html找到它的详细描述。
对于 check point 防火墙,您可以使用实用工具 fw monitor,在http://dl3 . check point . com/payed/a4/How _ to _ use _ FW _ monitor . pdf?HashKey = 1415034974 _ a3 BCA 5785 be 6 cf 8 B4 d 627 cfbc 56 ABC 97&xtn =。pdf 。
如需更多信息,请查看具体的供应商。虽然在 LAN 交换机、路由器、防火墙或其他通信设备上捕获数据,然后下载文件进行分析通常不是首选选项,但请记住,如果需要,它就在那里。
它是如何工作的…
这里答案很简单。当 Wireshark 连接到有线或无线网络时,在物理或无线接口与捕获引擎之间有一个软件驱动程序。在 Windows 中,我们有 WinPcap 驱动程序;在 Unix 平台中,我们有 Libpcap 驱动程序;对于无线接口,我们有air cap驱动程序。
还有更多…
如果捕获时间很重要,并且您希望在一个或多个接口上捕获数据,并且希望与您正在监控的服务器保持时间同步,您可以使用网络时间协议 ( NTP )来实现这一目的,并使用中央时间源同步您的 Wireshark 和被监控的服务器。
这在您希望并行浏览 Wireshark 捕获文件和服务器日志文件,并寻找两者上显示的事件时非常重要。例如,如果您在捕获文件中看到重新传输的同时,被监控服务器上出现服务器或应用错误,那么您将知道重新传输是因为服务器错误而不是因为网络。
Wireshark 软件从操作系统时钟(Windows、Linux 等)获取时间。要将操作系统配置为使用时间服务器,请转到您使用的操作系统的相关手册。
在 Microsoft Windows 7 中,按如下方式进行配置:
- 转到控制面板
- 选择时钟、语言和地区
- 在日期和时间下,选择设置时间和日期。转到互联网时间选项卡
- 点击更改设置按钮
- 更改服务器名称或 IP 地址
在 Microsoft Windows 7 和更高版本中,时间服务器有一个默认设置。只要所有设备都调谐到它,您就可以像使用任何其他时间服务器一样使用它。
NTP 是用于时间同步的网络协议。当您将网络设备(路由器、交换机、防火墙等)和服务器配置为相同的时间源时,它们将与该时间源保持时间同步。同步的精度取决于时间服务器的精度,时间服务器的精度以级别或阶层来衡量。级别越高,会越准确。1 级最高。级别越高,准确度越低。通常你会有 2 到 4 级。
NTP 首先在 RFC 1059 (NTPv1)中标准化,然后在 RFC 1119 (NTPv2)中标准化。最近几年常见的版本是 NTPv3 (RFC1305)和 NTPv4 (RFC 5905)。
你可以在各种网站上获得 NTP 服务器的列表,其中有:http://support . NTP . org/bin/view/Servers/StratumOneTimeServers和【http://wpollock.com/AUnix2/NTPstratum1PublicServers.htm】T2
请参见
您可以从以下网址获得有关 Pcap 驱动程序的更多信息:
- 对于 WinPcap 访问:http://www.winpcap.org
- 对于 Libpcap 访问:http://www.tcpdump.org
配置开始窗口
在这个菜谱中,我们将看到开始窗口的一些基本配置。我们将讨论配置主窗口、文件格式和查看选项。
做好准备
启动 Wireshark,您将看到开始窗口。您可以在这里更改几个参数,以使捕获窗口适应您的要求:
- 工具栏配置
- 主窗口配置
- 时间格式配置
- 名字解析
- 实时捕获中的自动滚动
- 一款云视频会议软件
- 柱构型
首先,让我们看看软件使用的菜单和工具栏:
主菜单
Wireshark 的主菜单位于主窗口的顶部。在主工具栏中有以下符号:
- 文件:文件操作,如打开和保存文件、导出数据包、打印等。
- 编辑:查找数据包、标记数据包、添加注释,最重要的是,使用首选项的子菜单。这将在第二章 中描述,掌握 Wireshark 进行网络故障排除。
- View:用于配置 Wireshark 显示、数据包着色、缩放、字体更改、在单独的窗口中显示数据包、展开和折叠数据包详细信息中的树,等等。
- Go:转到特定的数据包,例如,转到捕获中的第一个数据包、最后一个数据包、数据包编号等。
- 捕获:配置捕获选项和捕获过滤器。
- 分析:用于分析和显示选项,如显示过滤器配置、解码选项、跟踪特定流等。
- 统计数据:显示统计数据,从基本的主机和会话统计数据到智能 IO 图和流图。
- 电话:用于显示 IP 电话和蜂窝协议信息,例如,RTP 和 RTCP、SIP 流和统计、GSM 或 LTE 协议等。
- 无线:用于显示蓝牙和 IEEE 802.11 无线统计,稍后在第 9 章 、 无线局域网中描述。
- 工具:用于附录 4Lua 编程中描述的 Lua 操作。
- 帮助:获取用户帮助、样本采集更新等。
主工具栏
主工具栏提供对菜单中常用项目的快速访问。使用视图菜单可以隐藏该工具栏。
最左边的四个符号用于捕获操作,然后是文件操作符号,转到数据包操作,自动滚动,使用着色规则绘制数据包,缩放和调整大小。
显示过滤器工具栏
在“过滤器”工具栏中,有以下符号:
在显示过滤器工具栏中,我们可以:
- 键入一个显示过滤器字符串,自动完成,同时显示我们以前配置的过滤器
- 管理过滤器表达式,允许您打开过滤器构造对话框以获得过滤器构造帮助
- 配置新过滤器并将其添加到首选项中
- 使用过滤器预定义表达式,并选择一个过滤器
在第 4 章、使用显示过滤器中提供了展曲过滤器的增强描述。
状态栏
在 Wireshark 窗口下方的状态栏中,您可以看到以下数据:
你可以在这里看到:
- 专家系统中的任何错误。
- 捕获文件属性,包括文件信息,捕获时间,时间和一般统计。
- 捕获文件的名称(在捕获过程中,它会显示软件分配的临时名称)。
- 捕获的数据包总数、显示的数据包(实际显示在屏幕上的数据包)和加载时间,即加载捕获文件所用的时间。
- 您使用的配置文件。关于 profiles 的更多信息,可以阅读第二章 ,掌握 Wireshark 进行网络故障排除 。
怎么做…
在这一部分,我们将一步一步地配置主菜单。
工具栏配置
通常对于常规的数据包捕获,你不需要做任何改变。当你想通过网络(不仅仅是从你的笔记本电脑)捕获无线数据时,这是不同的;您必须启用无线工具栏,这是通过在“查看”菜单下单击它来完成的,如下面的屏幕截图所示:
无线工具栏
在查看菜单中标记无线工具栏选项时,无线工具栏会打开。当前版本中唯一可用的选项是启动首选项的配置窗口。在第 9 章 、 无线局域网中有更多关于无线局域网的分析。
主窗口配置
要配置用于捕获的主菜单,您可以将 Wireshark 配置为显示以下窗口:
在大多数情况下,您不需要做任何更改。在某些情况下,当您不需要查看数据包字节时,您可以取消它们,您将获得更多的空间来显示数据包列表和详细信息。
名字解析
名称解析是将第 2 层(MAC 地址)、第 3 层(IP 地址)和第 4 层(端口号)转换成有意义的信息。
名字解析
截图中我们看到 MAC 地址 34:08:04:16:09:78(来自 D-Link),网址(也就是www.facebook.com),HTTPs 端口号(也就是 443)。
MAC 地址是最简单的翻译:Wireshark 看翻译表(存储在 Wireshark 目录下的.manuf
文件中)。IP 地址使用 DNS 进行转换,如本章前面所述,这会导致一些性能问题。TCP/UDP 端口号存储在 Wireshark 目录下的服务文件中。
彩色数据包列表
通常,您开始捕获是为了建立网络上正常流量的基线配置文件。在捕获过程中,您查看捕获的数据,可能会发现可疑的 TCP 连接、IP 或以太网连接,并且您希望以另一种颜色查看它们。
为此,右键单击属于您要着色的会话的数据包,选择以太网、IP 或 TCP/UDP(将根据数据包显示 TCP 或 UDP),然后选择会话的颜色。
在本例中,您可以看到我们想要对 TCP 对话进行着色。
彩色对话
要取消着色规则:
- 转到视图菜单
- 在菜单的下半部分,选择给对话着色,然后重置着色,或者简单地点击 Ctrl +空格键
一款云视频会议软件
正如您在下面的截图中看到的,对于放大和缩小:
- 转到视图菜单
- 点击主工具栏上的放大按钮或按下 Ctrl + + 进行放大
- 点击主工具栏上的缩小或按下 Ctrl ±缩小
二、掌握 Wireshark 网络故障排除
在本章中,您将了解以下内容:
- 配置用户界面、全局和协议首选项
- 导入和导出文件
- 配置颜色规则和导航技术
- 使用时间值和摘要
- 构建用于故障排除的配置文件
介绍
在本章中,我们将讨论如何改进 Wireshark 作为网络分析工具的使用。我们首先配置用户界面,并设置全局和协议首选项。接下来,我们将讨论 Wireshark 文件夹、配置文件以及文件夹和插件。
我们继续讲述着色规则以及如何配置它们。我们还将讨论 Wireshark v2 中添加的智能滚动条,它可用于流量模式和行为识别。
我们用概要文件和如何使用它们来结束这一章。配置文件是为特定环境、协议或网络问题预先配置的显示和捕获过滤器、着色规则和首选项集,以简化网络故障排除。简介被解释,连同有帮助的简介被附在这本书。
配置用户界面、全局和协议首选项
Preferences(首选项)菜单使我们能够根据需要调整显示方式,而配置 protocol preferences(协议首选项)使我们能够更改 Wireshark 捕获和显示常见协议的方式。在本菜谱中,我们将学习如何配置最常见的协议。
做好准备
转到编辑菜单中的首选项,您将看到以下窗口:
在 Preferences 窗口中,我们有菜单可以从中选择我们想要配置的内容,而配置参数显示在右侧。
怎么做…
在这个菜谱中,我们将讨论外观首选项,以及最常见协议的协议首选项。本书后面的相关章节将提供额外的首选项配置。
因为这本书是关于如何使用和改进读者使用 Wireshark 进行网络分析的方法,所以我们不会讨论 Wireshark 的所有特性。我将把简单的功能留给 Wireshark 网站上的大手册,并把重点放在那些重要的和特殊的、实际上可以改进软件使用的功能上。
让我们开始关注偏好,看看它们能如何帮助我们。
一般外观偏好
在下面的屏幕截图中,我们看到了一些可以在首选项窗口中配置的有用功能:
在这里,我们可以配置:
- 显示过滤器和最近文件缓冲区的大小
- 界面语言(未来版本将提供更多语言)
- 主工具栏样式—图标、文本或图标和文本
布局首选项
在布局首选项中,您只需设置 Wireshark 显示数据包列表、数据包详细信息和数据包字节的方式:
正如您在前面的截图中看到的,您可以设置窗格的外观以及每个窗格中将呈现的内容。
列首选项
在列首选项中,您可以添加或删除列。我们在数据包窗格中看到的默认列是编号、时间、来源、目的地、协议、长度和信息,如下面的屏幕截图所示:
要向数据包窗格添加新列:
- 您可以将字段名中的一个预定义参数配置为新列。这些字段包括时间增量、IP DSCP 值、端口号等。
- 当您在字段类型中填写 Custom 时,一个非常重要的特性出现了。在这种情况下,您可以为字段名填写任何过滤器字符串。例如,您可以添加以下内容:
- 添加字符串
tcp.window_size
来查看 TCP 窗口大小(这会影响性能) - 添加字符串
ip.ttl
查看每个数据包的 IP 生存时间 ( TTL )参数 - 每次在 RTP 数据包中设置标记时,添加
rtp.marker
进行查看
- 添加字符串
要应用列,您也可以在数据包详细信息窗格中选择数据包中的字段,右键单击,然后选择应用为列。该列将被添加到数据包列表窗格中。
正如我们将在后面的章节中看到的,这个特性将帮助我们快速解决网络问题。
字体和颜色首选项
要更改字体大小和形状,只需选择外观|字体和颜色,然后更改主窗口字体,如下图所示:
**Appearance | Font and Colors **
如果您忘记如何恢复默认字体,默认字体是 Consolas,大小 11.0,正常。
捕获首选项
在“采集”偏好设置中,您可以将默认界面设定为您最常用的界面:
在前面的屏幕截图中,接口设置为无线网络连接 2。保留所有复选框不变。
过滤表达式首选项
在筛选表达式中,您可以配置哪些筛选表达式将出现在屏幕顶部显示筛选栏的右侧。
要配置显示过滤器表达式,请按照下列步骤操作:
- 单击编辑菜单并选择首选项和过滤表达式。将出现以下窗口:
-
选择添加并配置按钮标签和过滤器表达式。
-
正如您在下面的屏幕截图中看到的,按钮标签将出现在显示过滤器栏的右侧:
- 如您所见,我们在过滤器首选项中配置的名为 TCP-Z-WIN 和 TCP-RETR 的过滤器出现在 Wireshark 的右上角。
我们可以为每个配置文件配置过滤器首选项,如本章后面的为故障排除建立配置文件方法中所述。通过这样做,我们可以为 TCP 问题、 IP 电话 ( IPT )问题等等配置配置文件,其中每个网络协议都配置有相应的配置文件。
应按照显示过滤器格式配置过滤器,如第 4 章、使用显示过滤器、所述。
名称解析首选项
Wireshark 支持三层名称解析:
- 第 2 层:将 MAC 地址的第一部分解析为厂商名称。例如,
14:da:e9
会呈现为华硕(ASUSTeK Computer Inc .)。 - 第 3 层:通过将 IP 地址解析为 DNS 名称。例如,
157.166.226.46
将被解析为www.edition.cnn.com。 - 第四层:将 TCP/UDP 端口号解析为端口名。例如,端口
80
将被解析为 HTTP,端口53
将被解析为 DNS。
在下面的屏幕截图中,您可以看到如何在偏好设置窗口中配置名称解析:
在此窗口中,您可以从上到下配置:
- 第 2 层、第 3 层和第 4 层名称解析。
- 如何执行名称解析:通过 DNS 和/或 hosts 文件,以及并发 DNS 请求的最大数量是多少(这样软件就不会过载)。
- 简单网络管理协议 ( SNMP ),对象标识符,id,以及我们是否要把它们翻译成对象名。
- GeoIP 以及我们是否要使用它。有关这方面的更多信息,请参见第 10 章、网络层协议和操作。
在 TCP 和 UDP 中,客户端最初打开连接只对目的端口有意义。打开连接的源端口是一个随机数(大于 1,024),因此将其转换为端口名称没有意义。
- Wireshark 默认解析第 2 层 MAC 地址和第 4 层 TCP/UDP 端口号。由于 Wireshark 使用大量的 DNS 查询,解析 IP 地址会降低 Wireshark 的速度,因此请小心使用。
IPv4 首选项配置
当您选择配置 IPv4 或 IPv6 参数时,您将看到以下窗口:
您需要更改的参数有:
- 将 IPv4 TOS 字段解码为 DiffServ 字段:最初的 IP 协议带有一个称为服务类型 ( TOS )的字段,用于通过网络实现 IP 服务质量。20 世纪 90 年代初,区分服务 ( DiffServ )标准改变了 IP 设备在这一领域的面貌。取消选中此复选框将在原始 IP 标准中显示该字段。
- 启用 GeoIP 查找:GeoIP 是一个数据库,允许 Wireshark 将 IP 地址显示为地理位置。在 IPv4 和 IPv6 中启用此功能将启用此演示。此功能涉及名称解析,因此会降低实时数据包捕获的速度。你可以在第十章、网络层协议和操作、中看到如何配置 GeoIP。
TCP 和 UDP 配置
在 UDP 中,没有太大的改变;这是一个非常简单的协议,配置非常简单。另一方面,在 TCP 中,有些参数是可以改变的:
您可以在 TCP 首选项中进行的大多数更改都与 Wireshark 解析捕获数据的方式有关:
- 如果可能,验证 TCP 校验和:在某些网卡中,您可能会看到许多校验和错误。这是因为 TCP 校验和卸载通常在网卡上实现。这里的问题可能是网卡实际上在 Wireshark 捕获数据包后添加了校验和,因此如果您看到许多 TCP 校验和错误,首先要做的是禁用此复选框,并验证这不是问题所在。
- 分析 TCP 序列号:必须选中此复选框,以便 Wireshark 可以提供 TCP 分析,这是其主要和最重要的功能之一。
- 相对序列号:当 TCP 打开一个连接时,它从一个随机序列号开始。选中此复选框后,Wireshark 会将其归一化为零,因此您看到的不是真实的数字,而是从零开始攀升的数字。在大多数情况下,相对数字更容易处理。
- 计算会话时间戳:选中此复选框时,TCP 分析器将在每个数据包中显示自连接开始以来的时间。在时间紧迫的情况下,这对于连接速度非常快的情况很有帮助。
它是如何工作的…
使用首选项|协议功能为 Wireshark 增加了更多分析功能。注意不要添加太多的功能,因为这会降低数据包捕获和分析的速度。
对于 TOS 和 DiffServ,进入第 10 章、网络层协议和操作、。
SNMP 是用于网络管理的协议。SNMP 对象标识符 ( OID )用于标识对象及其在管理信息库 ( MIB )中的位置。对象可以是对接口输入数据包计数的计数器、路由器接口的 IP 地址、设备名称或位置、CPU 负载或任何其他可以显示或测量的实体。
SNMP MIB 构建在一个树形结构中,如下图所示。顶级 MIB 对象 id 属于不同的标准组织。供应商为他们自己的产品定义私有分支,包括被管理的对象:
在解析 SNMP MIB 时,Wireshark 不仅显示对象 ID,还显示其名称,这有助于理解所监控的数据。
还有更多…
关于 GeoIP,请前往http://wiki.wireshark.org/HowToUseGeoIP获取进一步指示。
导入和导出文件
为了进行根本原因分析,需要与其他运营团队或供应商共享数据包捕获文件是很常见的。这样的捕获文件可能有很多包,而我们感兴趣的只是一个特定的流或一组包。Wireshark 不共享整个文件,而是允许您有选择地将数据包导出到一个新文件中,甚至修改文件格式以方便文件传输。在本菜谱中,我们将讨论 Wireshark 中可用的导入和导出选项。
做好准备
启动 Wireshark 或打开保存的文件。
怎么做…
我们按如下方式保存或导出数据。
导出整个或部分文件
我们可以保存整个文件或导出各种格式和各种文件类型的特定数据。在下面的段落中,我们将看到如何做到这一点。
要保存捕获数据的整个文件,请执行以下操作:
- 在文件菜单中,点击保存(或按下 Ctrl + S )以其当前名称保存文件
- 在文件菜单中,点击另存为(或按下Shift+Ctrl+S)以新名称保存文件
要保存文件的一部分,例如只保存显示的数据,请执行以下操作:
- 导航至文件菜单下的导出指定数据包。您将看到以下窗口:
在窗口的左下方,您会看到您可以选择要保存的数据部分:
- 要保存所有捕获的数据,请选择所有数据包和捕获。
- 要仅保存显示的数据,请选择所有数据包并显示。
- 要保存文件中选定的数据包(选定的数据包就是您单击的数据包),请选择仅选定的数据包。
- 要保存已标记的数据包,即在数据包列表窗口中右键单击已标记的数据包,请从菜单中选择仅标记的数据包(切换)。
- 要在两个标记的数据包之间保存数据包,请选择从第一个到最后一个标记的选项。
- 要保存数据包的范围,请选择范围并指定要保存的数据包的范围。
- 在数据包列表窗口中,您可以手动选择忽略数据包。在导出窗口中,您可以选择忽略这些数据包,不保存它们。
要压缩保存的文件,请选中用 gzip 压缩。
在提到的所有选项中,您可以从整个捕获的文件中选择数据包,或者从屏幕上显示的数据包中选择数据包(在应用显示过滤器后,数据包显示在数据包列表中)。
以各种格式保存数据
您可以用各种格式保存 Wireshark 捕获的数据,以便用其他工具进行进一步分析。
通过从“文件”菜单中选择“导出数据包剖析”,您可以用以下格式保存文件:
- 纯文本(*。txt) :将数据包数据导出为明文 ASCII 文件。
- 后记(*。ps) :将数据包数据导出为 PostScript 格式。
- 逗号分隔的值(*。csv) :将数据包摘要导出为 csv 文件格式,用于电子表格程序(如 Microsoft Excel)。
- C 数组到包字节(*。c) :将包字节导出到 C 数组中,以便 C 程序导入。
- PSML (*。psml) :将数据包数据导出到 psml,一种基于 XML 的格式,只包括数据包摘要。
- PDML (*。pdml) :将包数据导出到 PDM,一种基于 XML 的格式,包括包的细节。
打印日期
为了打印数据,单击文件菜单中的打印按钮,将出现以下窗口:
在打印窗口中,您有以下选择:
-
在窗口的右上方,选择要打印的文件格式。它可以是:
- 每个数据包只有一个摘要行。这是您从数据包列表窗格中获得的内容。
- 数据包详细信息。这将打印数据包详细信息窗格中提供的数据包的全部详细信息。
- 数据包字节,从“数据包字节”面板中获得。
-
在窗口的下半部分,您选择要打印的数据包,如前一节所述。
它是如何工作的…
数据可以以文本格式、PostScript(支持 PostScript 的打印机)打印,或打印到文件中。配置此窗口并点击打印后,将出现常规打印界面,您可以选择打印机。
还有更多…
要了解 Wireshark 存储在哪些文件夹中,只需从主菜单中选择“帮助”,然后选择“关于 Wireshark ”,并在打开的窗口中选择“文件夹”选项卡。正如您在下一个屏幕截图中看到的,您将看到存储文件的实际文件夹,在右侧,您可以看到存储在这些文件夹中的典型文件:
单击某个位置会将我们带到存储这些文件的文件夹。
配置颜色规则和导航技术
着色规则定义了 Wireshark 如何对捕获数据中的协议和事件着色。使用颜色规则将对网络故障排除有很大帮助,因为您可以用不同的颜色看到不同的协议,并且您还可以为不同的事件配置不同的颜色。
着色规则使您能够根据各种过滤器配置新的着色规则。它将帮助您为不同的场景配置不同的配色方案,并将它们保存在不同的配置文件中。这样,您可以配置用于解决 TCP 问题的着色规则、用于解决 SIP 和电话问题的规则等等。
您可以配置 Wireshark 配置文件以保存 Wireshark 配置,例如预定义的颜色、过滤器等。为此,请从编辑菜单导航到配置描述文件。
做好准备
从着色规则开始,步骤如下:
- 转到视图菜单。
- 在菜单的下半部分,选择着色规则。您将看到以下窗口:
在此窗口中,我们可以看到 Wireshark 中的默认着色规则,包括 TCP 和其他协议事件、路由数据包等的规则。
怎么做…
要转到着色规则,请执行以下操作:
- 对于新的着色规则,单击“新建”选项卡,您将看到以下窗口:
- 在名称字段中,填写规则的名称。比如网络时间协议填写
NTP
。 - 在 Filter 字段中,填写过滤字符串,也就是你希望规则显示的内容(我们将在第四章,使用显示过滤器中谈到显示过滤器)。
- 单击前景按钮并选择规则的前景颜色。这将是数据包列表中数据包的前景色。
- 单击背景按钮,选择规则的背景颜色。这将是数据包列表中数据包的背景颜色。
- 单击删除图标(加号左侧的减号)删除颜色规则。
- 如果要编辑现有规则,请单击复制图标(减号按钮右侧)。
- 您也可以点选汇入…按钮导入一个现有的配色方案,或者点击导出…导出当前方案的规则。
着色规则的顺序很重要。确保着色规则按照实现的顺序。例如,应用层协议应该在 TCP 或 UDP 之前,所以 Wireshark 会用它们的颜色而不是常规的 TCP 或 UDP 颜色来着色。
它是如何工作的…
像 Wireshark 中的许多操作一样,您可以对过滤的数据配置各种操作。着色规则机制只是将着色规则应用于预定义的过滤器。
请参见
- 你可以在 http://wiki.wireshark.org/ColoringRules 找到各种各样的配色方案,在简单的互联网搜索中还可以找到许多其他的例子
- 要使用此处列出的着色规则文件之一,请将其下载到您的本地计算机,在 Wireshark 中选择 View | Coloring Rules,然后单击 Import…按钮
使用时间值和摘要
时间格式配置是关于如何显示时间列(默认配置中从左数第二个)。在某些情况下,这一点非常重要,例如,在 TCP 连接中,您希望看到数据包之间的时间间隔,或者当您从多个源捕获数据并希望看到每个数据包的确切时间时。
做好准备
要配置时间格式,请转到视图菜单,在时间显示格式下,您将看到以下窗口:
怎么做…
您可以从以下选项中选择:
-
日期和时间:当您对具有时间相关事件的网络进行故障排除时,例如,当您知道在特定时间发生的事件,并且您想要查看在同一时间网络上发生了什么时,这将是很好的配置。
-
秒钟后…:自 1970 年 1 月 1 日以来的时间,以秒为单位。Epoch 是一个任意选择的日期,作为系统的参考时间,Unix 和类 Unix 系统选择 1970 年 1 月 1 日。
-
自捕获开始后的秒数:默认配置。
-
自上一次捕获数据包以来的秒数:这也是一个常见的特性,使您能够看到数据包之间的时间差。这在监控时间敏感型流量(如 TCP 连接、实时视频流、VoIP 呼叫等)时非常有用,因为数据包之间的时间差非常重要。
-
自上次显示数据包以来的秒数:这是一个有用的特性,可以在配置显示过滤器时使用,并且只显示捕获数据的选定部分(例如,TCP 流)。在这种情况下,您将看到数据包之间的时间差,这在某些应用中可能很重要。
-
UTC 日期和时间:提供相对 UTC 时间。
子菜单的下部提供时间显示的格式。只有在需要更精确的测量时才改变它。
你也可以使用键盘上的 Ctrl + Alt +任意数字键来选择不同的选项。
它是如何工作的…
这很简单。Wireshark 使用系统时钟,并显示系统中的时间。默认情况下,您会看到自捕获开始以来的时间。
构建用于故障排除的配置文件
您可以配置 Wireshark 配置文件以保存 Wireshark 配置,例如通过设置预定义的颜色、捕获和显示过滤器等。为此,请从编辑菜单导航到配置描述文件。
配置描述文件存储以下信息:
- 首选项,包括常规和协议首选项,例如窗格大小、文本大小和字体、列宽等
- 捕获过滤器
- 显示过滤器和显示过滤器宏(参见第 4 章、使用显示过滤器、 )
- 着色规则
- 定制的 HTTP、IMF 和 LDAP 头(参见第 12 章、 FTP、HTTP1 和 HTTP2 )
- 用户定义的解码,例如解码作为一种功能,使您能够暂时转移特定的协议分析
所有配置文件都保存在profiles
目录中。
做好准备
启动 Wireshark 并打开保存的文件或开始新的捕获。
怎么做…
要打开现有的配置文件:
- 单击状态栏右下角的配置文件,并选择您希望使用的配置文件:
- 选择“编辑”|“配置描述文件”,然后选择您想要使用的描述文件:
要创建新的配置文件:
- 右键单击 Wireshark 窗口右下角状态栏中的配置文件区域,然后选择“新建”,或者选择“编辑”|“配置配置文件”,然后选择“新建”。
- 将在
profiles
目录下创建一个新目录:
- 在概要文件目录中,在这个例子中是
Wireless
概要文件,我们有cfilter
文件,它保存了捕获过滤器;colorfilters
文件,它保存着着色规则;custom_http_header_fields
,保存 HTTP 字段配置;和保存首选项配置的preferences
文件。
它是如何工作的…
当您创建新的配置文件时,会在您的个人配置目录中的profiles
下创建一个以您的配置文件命名的文件夹。当您关闭 Wireshark 或加载另一个配置文件时,一个名为recent
的文件会放在您的新配置文件目录中。该文件包含 Wireshark 窗口的常规设置,如可见工具栏、时间戳显示、缩放级别和列宽。如果在自定义配置文件中工作时创建捕获过滤器、显示过滤器和着色规则,将创建附加文件并存储在自定义配置文件的目录中(分别为cfilters
、dfilters
和colorfilters
)。
还有更多…
正如我们在上一节中看到的,保存配置文件参数的文件位于配置文件目录中。当然,您可以将参数从一个概要文件复制到另一个概要文件;例如,在默认的性能文件中,有以下过滤器:
####### 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
如果您在另一个概要文件中需要这些过滤器中的一个,只需将它复制到您需要它的概要文件目录中的同一个文件中。
请参见
三、使用捕获过滤器
在本章中,我们将讨论以下主题:
- 配置捕获过滤器
- 配置以太网过滤器
- 配置主机和网络过滤器
- 配置 TCP/UDP 和端口过滤器
- 配置结构化过滤器
- 配置字节偏移量和有效负载匹配过滤器
介绍
在第一章和第二章中,我们讨论了如何安装 Wireshark,如何配置它进行基本和智能操作,以及它在网络上的位置。在本章和下一章,我们将讨论捕获过滤器和显示过滤器。
区分这两种类型的过滤器非常重要:
- 捕获过滤器是在我们开始捕获数据之前配置的,因此只有过滤器认可的数据才会被捕获。所有其他数据都将丢失。本章介绍了这些过滤器。
- 显示过滤器是在捕获数据后过滤数据的过滤器。在这种情况下,所有数据都被捕获,您可以配置想要显示的数据。这些过滤器将在下一章介绍。
捕获过滤器基于libpcap
/ WinPcap
库中的tcpdump
语法,而显示过滤器语法是几年后才出现的。因此,请记住显示和捕获过滤器有不同的语法!
在某些情况下,您需要将 Wireshark 配置为仅捕获它通过接口看到的部分数据:
- 当有大量数据在受监控的链路上运行,而您只想捕获您关心的数据时
- 当您希望仅捕获进出您监控的 VLAN 上的特定服务器的数据时
- 当您只想从特定的一个或多个应用中捕获数据时(例如,您怀疑网络中存在 DNS 问题,并且您只想分析 DNS 查询和来自 internet 的响应)
在许多其他情况下,您只想捕获特定的数据,而不是网络上运行的所有数据。使用捕获过滤器时,将只捕获预定义的数据,而忽略所有其他数据包,因此您将只获得所需的数据。
使用捕获过滤器时要小心。在网络上的许多情况下,不同的应用和服务器之间存在依赖关系,而您并不总是意识到这一点;因此,当您使用带有捕获过滤器的 Wireshark 对网络进行故障排除时,请确保您没有过滤掉一些导致信息不准确的连接。一个常见而简单的例子是只过滤 TCP 端口80
上的流量,以监控可疑的慢速 HTTP 响应,而问题可能是由于慢速或无响应的 DNS 服务器引起的,这不容易被注意到。
在本章中,我们将描述如何配置简单的、结构化的、字节偏移和有效载荷匹配的捕获过滤器。
配置捕获过滤器
我们建议在配置捕获过滤器之前,仔细设计要捕获的内容,并为此准备好过滤器。不要忘记,没有通过过滤器的内容将会丢失。
您可以使用一些 Wireshark 预定义的过滤器,也可以按照下一节所述自行配置。
做好准备
要配置捕获过滤器,请打开 Wireshark,并按照配方中的步骤操作。
怎么做…
要在开始捕获之前配置捕获过滤器,请执行以下步骤:
- 要配置捕获过滤器,请单击左侧第四个捕获选项按钮,如下图所示:
- Wireshark - Capture Interfaces 窗口将会打开,如下图所示:
- 标记您想要捕获的接口,在所选接口的捕获过滤器中填写您想要使用的过滤器表达式(您可以验证哪个接口是活动的,如第 1 章、Wireshark v2 简介)。正如您在下面的截图中看到的,您编写的过滤器表达式将出现在界面行中。在本例中,
tcp port http
将捕获 TCP 端口80
的所有数据包:
- 配置过滤器后,确保过滤器框变为绿色,表明过滤器字符串是合法的,单击 Start 按钮,捕获将开始。
要配置预定义的过滤器,请参见以下步骤:
- 要配置预定义的捕获过滤器,请选择捕获过滤器…从捕获菜单:
将会打开以下窗口:
- 在此窗口中,您可以添加、删除或复制。
它是如何工作的…
Wireshark - Capture Filters 窗口使您能够根据 Berkeley 数据包过滤器 ( BPF )配置过滤器。写完过滤字符串后,你可以点击编译 BPF 按钮,BPF 编译器会检查你的语法,如果错误,你会得到一个错误信息。
此外,当您在“捕获过滤器”文本框中键入过滤器字符串时,如果过滤器字符串正确,它将变为绿色,如果不正确,它将变为红色。
BPF 滤波器只检查语法是否正确。它不检查条件是否正确。例如,如果您键入不带任何参数的字符串host
,您将得到一个错误,该字符串将变为红色,但如果您键入host 192.168.1.1000
,它将通过,窗口将变为绿色。
BPF 是 1992 年 12 月伯克利大学劳伦斯伯克利实验室的 Steven McCanne 和 Van Jacobson 的论文BSD 数据包过滤器:用户级数据包捕获的新架构中的语法。该文件可以在 http://www.tcpdump.org/papers/bpf-usenix93.pdf 的看到。
捕获过滤器由包含过滤表达式的字符串组成。该表达式选择将被捕获的数据包和将被忽略的数据包。过滤器表达式由一个或多个原语组成。原语通常由一个标识符(名称或编号)后跟一个或多个限定符组成。有三种不同的限定词:
- 类型:这些限定词说明了标识符名称或编号指的是什么。可能的类型有:
host
代表主机名或地址,net
代表网络,port
代表 TCP/UDP 端口,等等。 - Dir (direction) :这些限定符指定一个特定的传入和/或传出 ID 的传输方向。例如,
src
表示来源,dst
表示目的地,依此类推。 - Proto (protocol) :这些是将匹配限制在特定协议的限定符。例如,
ether
代表以太网,ip
代表互联网协议,arp
代表地址解析协议,等等。
标识符是我们测试的实际条件。标识符可以是地址10.0.0.1
,端口号53
,或者网络地址192.168.1
(这是网络192.168.1.0
/ 24
的标识符)。
例如,在过滤器tcp dstport 135
中,我们有:
dst
是目录限定符port
是类型限定符tcp
是原型限定词
还有更多…
您可以在不同的接口上配置不同的捕获过滤器:
当您在设备的两个接口上捕获流量并希望检查两端的不同数据包时,可以使用这种方法。
捕获过滤器存储在Wireshark
目录下名为cfilters
的文件中。在该文件中,您将找到预定义的过滤器,以及您已配置的过滤器,并且您可以将该文件复制到其他计算机。该目录的位置将根据 Wireshark 的安装方式和平台而变化。
请参见
- Wireshark 的捕获过滤器基于
tcpdump
程序。你可以在http://www.tcpdump.org/tcpdump_man.html找到参考。 - 您也可以在 Wireshark 手册页上找到有用的信息:http://wiki.wireshark.org/CaptureFilters。
配置以太网过滤器
当谈到以太网过滤器时,我们指的是基于 MAC 地址的第 2 层过滤器。在本食谱中,我们将参考这些过滤器以及我们可以用它们做什么。
做好准备
基本的第 2 层过滤器是:
ether host <Ethernet host>
:获取以太网地址ether dst <Ethernet host>
:获取以太网目的地址ether src <Ethernet host>
:获取以太网源地址ether broadcast
:捕获所有以太网广播包ether multicast
:捕获所有以太网组播数据包ether proto <protocol>
:仅过滤协议标识符中指示的协议类型vlan <vlan_id>
:仅传递来自标识符字段中指示的特定 VLAN 的数据包
要否定一个过滤规则,只需在原语前面键入单词not
或!
。例如:
Not ether host <Ethernet host>
或! ether host <Ethernet host>
将捕获不是来自/去往标识符字段中指定的以太网地址的数据包。
怎么做…
让我们来看下图,图中我们有一台服务器、多台 PC 和一台路由器,连接到一台 LAN 交换机。Wireshark 运行在连接到 LAN 交换机的笔记本电脑上,端口镜像到整个交换机(到 VLAN1)。
图中的/24
符号是指 24 位的子网掩码,即二进制的11111111.11111111.11111111.00000000
或十进制的255.255.255.0
:
按照配置捕获过滤器配方中的说明,按如下方式配置过滤器:
- 要仅捕获来自/发往特定 MAC 地址的数据包,请配置
ether host 00:24:d6:ab:98:b6
。 - 要捕获去往目的 MAC 地址的数据包,请配置
ether dst 00:24:d6:ab:98:b6
。 - 要捕获来自源 MAC 地址的数据包,请配置
ether src 00:24:d6:ab:98:b6
。 - 要捕获广播包,配置
ether broadcast
或ether dst ff:ff:ff:ff:ff:ff
。 - 要捕获多播数据包,请配置
ether multicast
。 - 要捕获特定的以太网类型(十六进制数值),请配置
ether proto 0800
。也可以写ether proto \ip
(当一个关键字作为值使用时使用反斜杠)。
它是如何工作的…
捕获过滤器处理源主机和目的主机的方式很简单——捕获引擎只是将条件与实际 MAC 地址进行比较,只传递相关的内容。
广播地址是目的地址全为 1 的地址,即ff:ff:ff:ff:ff:ff:ff
,因此,当您配置广播过滤器时,只有这些地址会通过过滤器。广播地址可以是:
- 转换为第 2 层广播的第 3 层 IPv4 广播;例如,发往
10.0.0.255
的 IP 数据包将在目的 MAC 字段中转换为第 2 层广播 - 与网络相关的广播;例如,IPv4 地址解析协议 ( ARP ),它发送广播作为网络操作的一部分
与网络相关的广播是为了网络的正常运行而发送的广播。其中包括 ARP、路由更新、发现协议等等。
在多播过滤器中,有 IPv4 和 IPv6 多播:
- 在 IPv4 中,当 MAC 地址以字符串
01:00:5e
开始时,发送多播 MAC 地址。MAC 地址以该字符串开头的每个数据包都将被视为多播。 - 在 IPv6 中,当 MAC 地址以字符串
33:33
开始时,传输多播地址。MAC 地址以该字符串开头的每个数据包都将被视为多播。
以太网协议是指以太网数据包中的以太网类型字段,它指示上层协议。这里常见的值有 IPv4 的0800
,IPv6 的86dd
,ARP 等的0806
。乙醚类型的更新列表可在http://www . iana . org/assignments/IEEE-802-numbers/IEEE-802-numbers . XHTML找到。
还有更多…
- 要为特定的 VLAN 配置过滤器,请使用
vlan <vlan number>
- 要在几个 VLANs 上配置过滤器,使用
vlan <vlan number> and vlan <vlan number> and vlan <vlan number>...
请参见
- 大约有一百种以太类型的代码,其中大部分都没有使用。你可以参考http://www.mit.edu/~map/Ethernet/Ethernet.txt获得额外的代码,或者简单地在互联网上浏览以太网代码。
配置主机和网络过滤器
当谈到主机和网络过滤器时,我们指的是基于 IP 地址的第 3 层过滤器。在本食谱中,我们将参考这些过滤器以及我们可以用它们做什么。
做好准备
基本的第 3 层过滤器是:
ip
或ip6
:捕获 IP 或 IPv6 数据包。host <host>
:获取主机名或地址。dst host <host>
:获取目的主机名或地址。src host <host>
:获取源主机名或地址。
主机可以是与该号码相关的 IP 地址或主机名。例如,您可以键入一个过滤主机www.packtpub.com
,它将向您显示与 Packt 网站相关的所有进出 IP 地址的数据包。
gateway <Host name or address>
:捕获发往或来自硬件地址的流量,但不捕获发往主机 IP 地址的流量。此过滤器捕获通过指定路由器的流量。此过滤器需要一个可以被本地系统的名称解析过程找到的主机名(例如,DNS)。net <net>
:所有进出指定 IPv4/IPv6 网络的数据包。dst net <net>
:发往指定 IPv4/IPv6 目的网络的所有数据包。src net <net>
:发往指定 IPv4/IPv6 目的网络的所有数据包。net <net> mask <netmask>
:去往/来自特定网络和掩码的所有数据包。此语法对于 IPv6 网络无效。dst net <net> mask <netmask>
:去往/来自特定网络和掩码的所有数据包。此语法对于 IPv6 网络无效。src net <net> mask <netmask>
:去往/来自特定网络和掩码的所有数据包。此语法对于 IPv6 网络无效。net <net>/<len>
:所有进出net
网络的数据包,长度为len
位。dst net <net>/<len>
:所有进出net
网络的数据包,长度为len
位。dst net <net>/<len>
:所有进出net
网络的数据包,长度为len
位。broadcast
:所有广播包。multicast
:所有组播包。ip proto <protocol code>
:当 IP 协议字段等于protocol
标识符时捕获数据包。可以有各种各样的协议,比如 TCP(代码6
)、UDP(代码17
)、ICMP(代码1
等等。
不用写ip proto
和协议代码,可以写ip proto \<protocol name>
,比如ip proto \tcp
。
ip6 proto <protocol>
:使用类型字段中指示的协议捕获 IPv6 数据包。请注意,此原语不遵循 IPv6 扩展头链。
在 IPv6 报头中,报头中有一个可以指向可选扩展报头的字段,该字段又指向下一个扩展报头,依此类推。在当前版本中,Wireshark 捕获过滤器不遵循这种结构。
icmp[icmptype]==<identifier>
:当标识符是 ICMP 代码时,捕获 ICMP 数据包,如icmp-echo
、icmp-request
。
怎么做…
遵循配置捕获过滤器配方中的说明,并按如下方式配置过滤器:
- 为了捕获去往/来自主机
10.10.10.1
的数据包,配置host 10.10.10.1
。 - 为了在
www.cnn.com
捕获主机发送/接收的数据包,配置host www.cnn.com
。 - 为了捕获到主机
10.10.10.1
的数据包,配置dst host 10.10.10.1
。 - 为了从主机
10.10.10.1
捕获数据包,配置src host 10.10.10.1
。 - 为了捕获进出网络
192.168.1.0/24
的数据包,配置net 192.168.1.0
或net 192.168.1.0 mask 255.255.255.0
或net 192.168.1.0/24
。 - 为了在没有广播或组播的情况下捕获所有数据,配置
not broadcast
或not multicast
。 - 为了从/向 IPv6 网络
2001::/16
捕获数据包,配置net 2001::/16
。 - 为了捕获到 IPv6 主机
2001::1
的数据包,配置host 2001::1
。 - 要仅捕获 ICMP 数据包,请配置
ip proto 1
。 - 要仅过滤 ICMP 回应(pings ),您可以使用 ICMP 消息或消息代码。配置
icmp[icmptype]==icmp-echo
或icmp[icmptype]==8
。
它是如何工作的…
对于主机过滤,当您键入主机名时,Wireshark 会将该名称转换为 IP 地址,并捕获指向该地址的数据包。例如,如果您配置了一个过滤主机www.cnn.com
,它将被一个名称解析服务(通常是 DNS)翻译成一个 IP 地址,并向您显示进出该地址的所有数据包。请注意,在这种情况下,如果 CNN 网站将您转发到其他地址的其他网站,则只会捕获发送到第一个地址的数据包。
当写入icmp[icmptype]
时,它检查 ICMP 报头中的 ICMP 类型字段。icmp-echo
有代码8
,因此你可以写icmp[icmptype]==icmp-echo
或icmp[icmptype]==8
。
还有更多…
一些更有用的过滤器:
ip multicast
: IP 组播数据包ip broadcast
: IP 广播包ip[2:2] == <number>
: IP 包大小(IP 头的字节 3 和 4)ip[8] == <number>
: TTL 值(IP 头的字节 9)ip[12:4] = ip[16:4]
: IP 源等于 IP 目的地址(字节 13-16 等于字节 17-20)ip[2:2]==<number>
:IP 包的总长度(字节 3 和 4 等于<number>
ip[9] == <number>
:协议标识符(字节 10 等于number
)
本章末尾的配置字节偏移和有效载荷匹配滤波器中进一步解释了这些滤波器。如进一步说明的,原则是括号中的第一个数字定义从协议报头的开始有多少字节,第二个数字指示要观察多少字节:
请参见
- 有关更多过滤器,请参考位于http://www.tcpdump.org/tcpdump_man.html的
tcpdump
手册页
配置 TCP/UDP 和端口过滤器
在本菜谱中,我们将介绍第 4 层 TCP/UDP 端口过滤器,以及如何将它们与捕获过滤器一起使用。
做好准备
基本的第 4 层过滤器是:
port <port>
:当数据包是第 4 层协议(如 TCP 或 UDP)时,此过滤器将捕获发往/来自标识符字段中指示的端口的数据包dst port <port>
:当数据包是第 4 层协议(如 TCP 或 UDP)时,此过滤器会将数据包捕获到标识符字段中指示的目的端口src port <port>
:当数据包是第 4 层协议(如 TCP 或 UDP)时,此过滤器会将数据包捕获到标识符字段中指示的源端口
端口范围匹配过滤器包括:
tcp portrange <p1>-<p2>
或udp portrange <p1>-<p2>
:在p1
到p2
端口范围内的 TCP 或 UDP 数据包tcp src portrange <p1>-<p2>
或udp src portrange <p1>-<p2>
:在p1
到p2
的源端口范围内的 TCP 或 UDP 数据包tcp dst portrange <p1>-<p2>
或udp src portrange <p1>-<p2>
:在p1
到p2
的目的端口范围内的 TCP 或 UDP 数据包
除了这些过滤器之外,还可以使用以下 TCP 标志:
tcp-urg
:用于 TCP 紧急指针标志tcp-rst
:用于 TCP 复位指针标志tcp-ack
:用于 TCP 确认指针标志tcp-syn
:用于 TCP 同步指针标志tcp-psh
:用于 TCP 推送指针标志tcp-fin
:用于 TCP 结束指针标志
怎么做…
遵循配置捕获过滤器配方中的说明,按如下方式配置过滤器:
- 要捕获到端口
80
(HTTP)的数据包,配置dst port 80
或dst port http
- 要捕获进出端口
5060
(SIP)的数据包,请配置port 5060
- 要捕获所有启动连接的 TCP 数据包(所有带有
syn=1
的数据包),请配置tcp-syn != 0
- 要捕获所有 TCP 连接的开始(
syn
标志)和结束(fin
标志)数据包,请配置tcp[tcpflags] & (tcp-syn|tcp-fin) != 0
在tcp[tcpflags] & (tcp-syn|tcp-fin) != 0
中,需要注意的是,这是一个按位 AND 运算,而不是逻辑 AND 运算。比如010
或者101
等于111
,而不是000
。
- 要捕获所有将
rst
(复位)标志设置为1
的 TCP 数据包,请配置tcp[tcpflags] & (tcp-rst) != 0
- 长度过滤器的配置方式如下:
less <length>
:仅捕获长度小于或等于长度标识符的数据包。这相当于len <= <length>
。greater <length>
:仅捕获长度大于或等于长度标识符的数据包。这相当于<len >= length>
。
例如:
tcp portrange 2000-2500
udp portrange 5000-6000
端口范围过滤器可用于适用于一系列端口而非特定端口的协议。
它是如何工作的…
第 4 层协议主要是 TCP 和 UDP,是连接终端应用的协议。一端的端节点(例如,web 客户端)向另一端(例如,web 服务器)发送消息,请求连接到它。发送请求的进程和接收请求的进程的代码称为端口号。在第 11 章、传输层协议分析中提供了关于此问题的进一步讨论。
对于 TCP 和 UDP,端口号表示应用代码。它们之间的区别在于,TCP 是面向连接的可靠协议,而 UDP 是无连接的不可靠协议。还有一个额外的第 4 层协议叫做流控制传输协议 ( SCTP ),可以称为 TCP 的高级版本,也使用端口号。
TCP 标志以数据包的形式发送,以便建立、维护和关闭连接。当数据包中的特定位设置为1
时,信号被设置。最常用的标志有:
syn
:为了打开连接而发送的信号fin
:为了关闭连接而发送的信号ack
:发送确认接收数据的信号rst
:立即关闭连接的信号psh
:发送一个信号,用于推送数据,供终端进程(应用)处理
使用捕获过滤器,您可以过滤进出特定应用的数据包,以及过滤打开了特定标志的数据包。
我们讨论了过滤器tcp[tcpflags] & (tcp-syn|tcp-fin) != 0
,我们看到我们使用了&
而不是更常见的操作符&&
。不同的是,当我们写&
或|
时,这些是按位运算符,也就是说,结果是一位一位计算的,而不是在整个域上。
这里有一件有趣的事。例如,如果您尝试使用过滤器tcp[tcpflags] & (tcp-rst) == 1
,它将不会显示任何结果。这是因为前面的 Wireshark 过滤器正在指示对tcpflags
和11111111
执行布尔 AND 运算,并检查结果是否为1
。rst
标志设置为1
的 TCP 包将为00000010
。所以00000010
和11111111
会产生不等同于1
的00000010
。
另一方面,当我们写tcp[tcpflags] & (tcp-rst) != 0
时,我们在00000010
和11111111
之间执行一个按位 and,结果还是00000010
,它不等于配置的0
。
还有更多…
一些有问题的场景(主要是攻击)是:
tcp[13] & 0x00 = 0
:未设置标志(空扫描)tcp[13] & 0x01 = 1
:fin
设定,ack
未设定tcp[13] & 0x03 = 3
:syn
设定和fin
设定tcp[13] & 0x05 = 5
:rst
设定和fin
设定tcp[13] & 0x06 = 6
:syn
设定和rst
设定tcp[13] & 0x08 = 8
:psh
设定,ack
未设定
在下图中,您可以看到它是如何工作的。tcp[13]
是从协议头开始的字节数,当值0
、1
、3
、5
、6
和8
表示标志位置时:
请参见
- 在第 11 章、传输层协议分析中提供了对 UDP 和 TCP 的更深入的描述
配置复合过滤器
结构过滤器是简单地为编写几个条件的过滤器。它使用简单的条件,如 NOT、AND 和 OR 来创建结构化条件。
做好准备
结构化过滤器以下列格式编写:
[not] primitive [and|or [not] primitive ...]
Wireshark 捕获过滤器中通常使用以下修饰符:
!
或not
&&
或and
||
或or
对于按位运算符,请使用:
&
进行与运算|
进行或操作
怎么做…
要配置结构化过滤器,您只需根据我们在前面的菜谱中所学的内容编写条件,其中的条件满足您的要求。
一些常见的过滤器有:
- 为了仅捕获单播包,配置
not broadcast and not multicast
- 为了捕获到
www.youtube.com
的 HTTP 数据包,配置host www.youtube.com and port 80
- 对于捕获进出特定主机流量的 telnet 捕获过滤器,配置
tcp port 23 and host 192.180.1.1
- 要捕获所有非来自
192.168.1.1
的 telnet 流量,请配置tcp port 23 and not src host 192.168.1.1
- 要将数据包捕获到服务器
216.58.209.68
和216.58.209.69
上的端口80
(HTTP ),请配置((tcp) and (port 80) and ((dst host 216.58.209.68) or (dst host 216.58.209.69)))
它是如何工作的…
结构化过滤器的一些示例:
- 从
5000
-6000
的源端口范围捕获数据到 TCP 端口23
(telnet),配置tcp dst port 23 and tcp src portrange 5000-6000
还有更多…
一些有趣的例子如下:
host www.mywebsite.com and not (port xxx or port yyy)
host 192.168.0.50 and not tcp port 80
ip host 10.0.0.1 and not udp
请参见
配置字节偏移量和有效负载匹配过滤器
字节偏移量和有效负载匹配过滤器为我们提供了配置自定义过滤器的灵活工具(Wireshark 解析器中未定义的字段过滤器和专有协议过滤器)。通过了解我们使用的协议和它们的数据包结构,我们可以配置过滤器来监视捕获的数据包中的特定字符串,并根据该字符串过滤数据包。在这个食谱中,我们将学习如何配置这些类型的过滤器,我们还将看到一些常见和有用的例子。
做好准备
要配置字节偏移量和有效负载匹配过滤器,请启动 Wireshark,并按照本章开头的配置捕获过滤器方法中的说明进行操作。
字符串匹配过滤器检查数据包报头中的特定字符串。我们可以用两种方式配置它们:
proto [Offset:bytes]
,其中 offset 是从协议头开始的字节数。例如,ip[8:1]
检查 IP 报头的第 9 个字节,tcp[8:2]
检查 TCP 报头的第 9-10 个字节。Proto [byte]
,其中字节表示从协议开始检查的字节数。例如,ip[8]
也会检查 IP 头的第 9 个字节。
有了这个过滤器,我们可以为 IP、TCP 和 UDP 上的字符串创建过滤器。对于有效负载匹配过滤器,还要记住:
proto[x:y] & z = 0
:将屏蔽z
应用到proto[x:y]
时,匹配设置为0
的位proto[x:y] & z !=0
:当将屏蔽z
应用到proto[x:y]
时,一些位被设置为1
proto[x:y] & z = z
:将屏蔽z
应用到proto[x:y]
时,所有位都设置为z
proto[x:y] = z
:proto[x:y]
的位被精确设置为z
怎么做…
- 对于 IP 字符串匹配过滤器,您可以创建以下过滤器:
ip [Offset:Bytes]
- 对于匹配应用数据(即,查看 TCP 或 UDP 承载的应用数据),它最常见的用途是:
tcp[Offset:Bytes]
//Or
udp[Offset:Bytes]
它是如何工作的…
失调滤波器的一般结构如下:
proto [Offset in bytes from the start of the header : Number of bytes to check]
字符串匹配过滤器的常见示例有:
- 为了过滤
50
和100
之间的目的 TCP 端口,配置(tcp[2:2] > 50 and tcp[2:2] < 100)
。在这里,我们从 TCP 报头的开头开始计算两个字节,并检查接下来的两个字节是否低于100
和高于50
:
- 要检查小于
8192
的 TCP 窗口大小,请配置tcp[14:2] < 8192
。这里我们从 TCP 报头的开头开始计算两个字节,并检查接下来的两个字节(窗口大小)是否小于8192
:
- 为了只过滤 HTTP
GET
数据包,配置端口80
和tcp[((tcp[12:1] & 0xf0) >> 2):3] = 0x474554
。这里,tcp[12:1] & 0xf0) >> 2
给出了 TCP 报头的长度。紧随其后,在 TCP 报头之后的数据包字节窗格中检查字符串G
、E
、T
(即 HTTPGET
命令),这些字符串具有十六进制值47
、45
、54
。
在:http://www.wireshark.org/tools/string-cf.html有一个很好的字符串匹配捕获过滤器生成器。
还有更多…
您可以在tcpdump
主页中看到其他过滤器:
- 要打印进出端口
80
的所有 IPv4 HTTP 数据包(即,仅打印包含数据的数据包,而不是例如syn
、fin
或ack
-仅数据包),请配置过滤器:tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)
- 要打印涉及非本地主机的每个 TCP 会话的开始和结束数据包(
syn
和fin
数据包),请配置tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet
- 要打印不是通过以太网广播或组播发送的 IP 广播或组播数据包,请配置
ether[0] & 1 = 0 and ip[16] >= 224
- 要打印所有非回应请求/回复的 ICMP 数据包(即非 ping 数据包),请配置
icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply
请参见
- 在http://www.wireshark.org/tools/string-cf.html有一个字符串计算器。它并不总是提供工作结果,但它可能是一个好的起点。
- 另一个有趣的博客可以在:http://www.packetlevel.ch/html/txt/byte_offsets.txt找到。
四、使用显示过滤器
在本章中,您将了解:
- 配置显示过滤器
- 配置以太网、ARP、主机和网络过滤器
- 配置 TCP/UDP 过滤器
- 配置指定的协议筛选器
- 配置子字符串运算符过滤器
- 配置宏
介绍
在本章中,我们将学习如何使用显示过滤器。显示过滤器是我们在捕获数据(无论是否被捕获过滤器过滤)后,当我们希望只显示部分数据时应用的过滤器。
可以实施显示过滤器来定位各种类型的数据:
- 参数,如 IP 地址、TCP 或 UDP 端口号、URL 或服务器名称
- 条件,如数据包长度短于 TCP 端口范围
- 现象,如 TCP 重新传输、重复 ack 和其他、各种协议错误代码、标志存在等
- 各种应用参数,如短消息服务 ( SMS )源号码和目的号码、服务器消息块 ( SMB )、简单邮件传输协议 ( SMTP )、服务器名称等
通过网络发送的任何数据都可以被过滤,一旦过滤,就可以根据它创建统计数据和图表。
正如我们将在本章的配方中描述的,有多种方法可以配置显示过滤器,从预定义的菜单、数据包窗格或通过直接编写语法。
使用显示过滤器时,不要忘记所有的数据都是被捕获的,显示过滤器只决定显示什么。因此,在过滤数据后,捕获文件仍然包含捕获的原始数据。您可以稍后保存全部数据或仅保存显示的数据。
配置显示过滤器
为了配置显示过滤器,您可以选择以下选项之一:
- 从过滤器菜单中选择。
- 将语法直接写入过滤器窗口(使用 Wireshark 一段时间后,这将成为您的最爱)。
- 在数据包窗格中选择一个参数,并将其定义为过滤器。
- 在命令行中,使用
tshark
或wireshark
。这将在附录中讨论。
本章讨论前三个选项。
做好准备
一般而言,显示过滤器串采用由合取(and|or
等)连接的一系列基本表达式的形式,并且可选地以not
开头:
[not] Expression [and|or] [not] Expression...
同时:
Expression
可以是任何过滤器表达式,例如ip.src==192.168.1.1
(用于源地址)、tcp.flags.syn==1
用于 TCP 同步标志存在、tcp.analysis.retransmission
用于 TCP 重新传输,等等and|or
是连接词,可用于任何表达式组合,包括括号、多括号和任意长度的字符串
这些条件可以是下列条件之一:
| 类 C 语法 | 快捷方式 | 描述 | 例子 |
| ==
| eq
| 平等的 | ip.addr == 192.168.1.1
或ip.addr eq 192.168.1.1
|
| !=
| ne
| 不相等 | !ip.addr==192.168.1.1
或ip.addr != 192.168.1.1
或ip.addr ne 192.168.1.1
|
| >
| gt
| 大于 | frame.len > 64
|
| <
| lt
| 不到 | frame.len < 1500
|
| >=
| ge
| 大于或等于 | frame.len >= 64
|
| <=
| le
| 小于或等于 | frame.len <= 1500
|
| | Is present
| 存在一个参数 | http.response
|
| | contains
| 包含一个字符串 | http.host contains cisco
|
| | matches
| 符合条件的字符串 | http.host matches www.cisco.com
|
您可以在参数运算符之间插入空格字符,也可以不加空格。
每当您将!=
操作符用于组合表达式(如eth.addr, ip.addr
、tcp.port
或udp.port
)时,Wireshark 会将显示过滤区涂成黄色,但这不会起作用,因为当您键入过滤表达式(如ip.addr != 192.168.1.100
)时,必须读取过滤区,因为数据包包含值不同于192.168.1.100
的字段ip.addr
。因为 IP 数据报包含源地址和目的地址,所以只要这两个地址中至少有一个与192.168.1.100
不同,表达式就会计算为真。由于这个原因,你应该写!(ip.addr == 192.168.1.100)
,也就是说,当ip.addr
字段的值1.2.3.4
不为真时,它显示所有的包。
运算符可以如下所示:
| 类 C 语法 | 快捷方式 | 描述 | 例子 |
| &&
| and
| 逻辑与 | ip.src==10.0.0.1 and tcp.flags.syn==1
从 IP 地址10.0.0.1
发送的所有 SYN 标志实际上——从10.0.0.1
打开(或试图打开)的所有连接 |
| ||
| or
| 逻辑或 | ip.addr==10.0.0.1 or ip.addr==10.0.02
进出两个 IP 地址的所有数据包 |
| !
| not
| 逻辑非 | not arp and not icmp
既不是 ARP 数据包也不是 ICMP 数据包的所有数据包 |
怎么做…
要配置显示过滤器,您可以选择上述方法之一。
要使用“过滤器”菜单,请执行以下操作:
- 要从过滤器菜单中进行选择,请转到窗口顶部的显示过滤器窗格,然后单击表达式…按钮,如下图所示:
- 当您单击表达式时…按钮,将打开以下窗口:
“显示过滤器表达式”窗口中有四个重要的窗格:
- 字段名称:在此窗口中,您可以配置过滤器参数。您可以通过键入协议名称向下滚动,并通过单击列表左侧的(+)符号进入协议参数。
Example 1
Type the letters ipv4
to get to the IPv4 protocol, click on the (+) sign to see the protocol parameters (or click on Enter twice), and choose ip.addr
to filter a specific IP address.
Example 2
Type the letters tcp
to get to the TCP protocol, click on the (+) sign to see the protocol parameters, and choose tcp.port
for source or destination port number.
- 关系:这是您从中选择运算符的窗格。可以选择
==
表示相等,!=
表示不相等,以此类推。
Example 3
Type the letters sip
to get to the SIP protocol, choose sip.Method
, and from the Relation window choose ==
. In the value window, type invite
. This will filter all SIP invite methods.
- 值:在这里,您可以选择之前选择的字段的值。
Example 4
Type the letters tcp
to get to the TCP protocol, click on the (+) sign to see the protocol parameters, choose tcp.flags.syn
for a TCP SYN flag, and in the Value field choose 1
.
- 预定义值:当您选择的字段的值不是布尔值时,该字段中可能会有一个选项列表。
Example 5
Under TCP, there is a field tcp.option_kind
. This option relates to TCP options (for more details go to Chapter 11, Transport Layer Protocol Analysis). You will get a list of the values that are possible here.
- 搜索:一种搜索机制,使您能够搜索过滤器表达式。在搜索框中,你应该准确地写出你要找的内容。例如,你可以在下面的截图中看到它——当你搜索
ip fragment
时,它会出现 OpenFlow 和 Cisco NetFlow 表达式 :
写ipv4 fragment
的时候会显示我们需要的东西,也就是 IPv4 碎片,你可以在下面的截图中看到:
将语法直接写入过滤器窗口的操作如下:
- 习惯显示过滤器语法后,您可能会发现直接在过滤器窗口中键入过滤器字符串会更容易,如以下屏幕截图所示:
- 在这种情况下,当您将过滤器字符串写入窗口时,窗口将以下列三种颜色之一亮起:
- 绿色:此时滤镜正确,可以应用了。
- 红色:这是一个错误的字符串。请在应用之前修复字符串。
- 黄色:无论何时使用
!=
操作符,显示过滤区都会变成黄色。这并不意味着你的过滤器不起作用,这只是一个警告,它可能不起作用。
- 要应用过滤器,点击过滤器字符串窗口右侧的右箭头,或使用输入。
- 要从先前定义的过滤器中进行选择,请使用应用箭头右侧的向下滚动按钮。
- 要配置过滤器首选项和过滤器表达式,请单击过滤器窗口左侧的符号,如下图所示:
- 选择“管理显示过滤器”使您能够添加过滤器以供将来使用(例如,用于特定的配置文件)。
- 选择管理过滤器表达式使您能够添加过滤器表达式,这些表达式将显示在过滤器窗口的右侧,以便更方便地使用它们。
使用数据包窗格并将其定义为过滤器,如下所示:
这是一个非常方便的选择。您可以从捕获的文件中的 packet detail pain 中选择任何字段,右键单击它,您将获得以下选项,如以下截图所示:
这些选项包括:
- 应用为过滤器:这将根据您选择的字段设置过滤器,并将其应用于捕获数据。
- 准备过滤器:这将准备一个过滤器,但不应用它。当您单击过滤器窗口右侧的“应用”按钮时,它将被应用。
在这两个选项中,您都可以选择配置过滤器:
- 选定:这将选择选定的字段和参数
- 未选择:这将选择未选择的字段和参数
例如,右击http.request.method
字段并选择“已选择”将显示过滤字符串http.request.method == GET
,而选择“未选择”将显示字符串!(http.request.method == "GET")
。
您还可以为结构化过滤器选择选项“已选择”、“已选择”、“未选择”和“未选择”。
它是如何工作的…
显示过滤器是 Wireshark 的专有语言。有许多地方可以使用显示过滤器,这将在后面的章节中讨论协议时讨论。其他过滤器将在本章的以下配方中讨论。
您可以随时使用自动完成功能来完成筛选字符串。例如,如果您在下面的屏幕截图中键入tcp.f
,自动完成功能会列出可能创建的以tcp.f
开头的显示过滤器值,即 TCP 标志(SYN、FIN、RST 等):
还有更多…
一些其他有用的功能包括:
- 我们过滤的参数是什么?
- 每当您在数据包详细信息窗格中标记特定字段时,您都会在 Wireshark 左下角的状态栏中看到相关的过滤器字符串:
- 添加参数列:
- 您也可以右键单击数据包窗格中的参数。右键单击它,然后选择“应用为列”。这将添加一个带有特定参数的列。例如,您可以选择
tcp.window_size_value
参数并将其作为一列添加到数据包列表窗格,这样您将能够在线观察 TCP 窗口大小(这将影响 TCP 性能,我们将在第 11 章、传输层协议分析中了解)。
- 您也可以右键单击数据包窗格中的参数。右键单击它,然后选择“应用为列”。这将添加一个带有特定参数的列。例如,您可以选择
配置以太网、ARP、主机和网络过滤器
在这些食谱中,我们将讨论如何配置第 2-3 层过滤器,即基于以太网和基于 IP 的过滤器。我们还将讨论地址解析协议 ( ARP )过滤器。
做好准备
在第 2 层,我们将配置基于以太网的过滤器,而在第 3 层,我们将配置 IP 过滤器。对于以太网,我们有基于以太网帧和 MAC 地址的过滤器,而对于 IP,我们有基于 IP 包和地址的过滤器。
常见的帧增量滤波器包括:
frame.time_delta
:当前帧和前一帧之间的时间差(将用于统计图表,在第 6 章的和使用高级统计工具的中)frame.time_delta_displayed
:当前显示帧与前一显示帧之间的时间差值(将用于统计图表,在第 6 章中的,【使用高级统计工具的 )
由于帧之间的时间会显著影响 TCP 性能,我们将使用统计图中的frame.time_delta
参数来监控 TCP 性能。
常见的第 2 层(以太网)过滤器包括:
eth.addr == <MAC Address>
用于显示特定的 MAC 地址eth.dst == <MAC Address> or eth.src == <MAC Address>
对于源或目的 MAC 地址eth.type == <Protocol Type (Hexa)>
对于以太网协议类型
常见的 ARP 过滤器包括以下几种:
arp.opcode == <value>
对于 ARP 请求/响应arp.src.hw_mac == <MAC Address>
对于 ARP 发送者
常见的第 3 层(IP)过滤器包括:
ip.addr == <IP Address>
为源或目的 IP 地址- 源或目的 IP 地址的
ip.dst == <IP Address>
或ip.src == <IP Address>
- IP 生存时间 ( TTL )值的
ip.ttl == <value>
或ip.ttl < value>
或ip.ttl > <value>
- IP 数据包长度值的
ip.len = <value>
或ip.len > <value>
或ip.len < <value>
ip.version == <4/6>
针对 IP 协议版本(版本 4 或版本 6)
怎么做…
在本节中,我们将看到第 2 层/第 3 层滤波器的一些常见示例:
| 地址格式 | 语法 | 例子 |
| 以太网(MAC)地址 | eth.addr == xx:xx:xx:xx:xx:xx
where x
is 0
to f
| eth.addr == 00:50:7f:cd:d5:38
|
| eth.addr == xx-xx-xx-xx-xx-xx
where x
is 0
to f
| eth.addr == 00-50-7f-cd-d5-38
|
| eth.addr == xxxx.xxxx.xxxx
where x
is 0
to f
| eth.addr == 0050.7fcd.d538
|
| 广播 MAC 地址 | Eth.addr == ffff.ffff.ffff
| |
| IPv4 主机地址 | ip.addr == x.x.x.x
where x
is 0
to 255
| Ip.addr == 192.168.1.1
|
| IPv4 网络地址 | ip.addr == x.x.x.x/y
其中x
是0
到255
,y
是0
到32
| ip.addr == 192.168.200.0/24
(all addresses in the network 192.168.200.0
mask 255.255.255.0
) |
| IPv6 主机地址 | ipv6.addr == x:x:x:x:x:x:x:x``ipv6.addr == x::x:x:x:x
其中nnnn
、n
格式为0
到f
(十六进制) | ipv6.addr == fe80::85ab:dc2e:ab12:e6c7
|
| IPv6 网络地址 | ipv6.addr == x::/y
where x
is 0
to f
(hex), y
is 0
to 128
| ipv6.addr == fe80::/16
(all addressees that start with the 16 bits fe80
) |
该表引用了ip.addr
和ipv6.addr
滤波器字符串。任何具有 IP 地址值的字段的值都可以用同样的方式书写。
以太网过滤器:
- 仅显示特定 MAC 地址发送或接收的数据包:
eth.src == 10:0b:a9:33:64:18
eth.dst == 10:0b:a9:33:64:18
- 仅显示广播:
Eth.dst == ffff.ffff.ffff or Eth.dst == ff:ff:ff:ff:ff:ff
ARP 过滤器:
- 仅显示 ARP 请求:
arp.opcode == 1
- 仅显示 ARP 响应:
arp.opcode == 2
IP 和 ICMP 过滤器:
-
只显示来自特定 IP 地址的数据包:
ip.src == 10.1.1.254
-
仅显示不是来自特定地址的数据包:
!ip.src == 64.23.1.1
-
仅显示两台主机之间的数据包:
ip.addr == 192.168.1.1 and ip.addr == 200.1.1.1
-
只显示发送到多播 IP 地址的数据包:
ip.dst == 224.0.0.0/4
-
仅显示来自网络
192.168.1.0/24
(掩码255.255.255.0
)的数据包:ip.src==192.168.1.0/24
-
仅显示发往/来自特定地址的 IPv6 数据包:
ipv6.addr == ::1
ipv6.addr == 2008:0:130F:0:0:09d0:666A:13ab
ipv6.addr == 2006:0:130f::9c2:876a:130b
ipv6.addr == ::
复杂过滤器:
-
从网络
10.0.0.0/24
到包含单词packt
的网站的数据包:ip.src == 10.0.0.0/24 and http.host contains "packt"
-
从网络
10.0.0.0/24
到以.com
结尾的网站的数据包:ip.addr == 10.0.0.0/24 and http.host matches ".com$"
-
来自源 IP 地址
10.0.0.3
的所有广播:ip.src == 10.0.0.0/24 and eth.dst == ffff.ffff.ffff
-
所有不是 ARP 请求的广播:
not arp and eth.dst == ffff.ffff.ffff
-
所有不是 ICMP 和 ARP 的数据包:
!arp || !icmp or not arp&¬ icmp
它是如何工作的…
下面是对我们在上一段中看到的过滤器的一些解释。
- 以太网广播:对于以太网来说,广播是发送到目的地字段全为 1 的地址的数据包,这就是为什么,为了找到网络中的所有广播,我们编写了过滤器
eth.dst == ffff.ffff.ffff
。 - IPv4 组播 : IPv4 组播是发送到地址范围
224.0.0.0
到239.255.255.255
内的一个地址的数据包,也就是二进制的,地址范围11100000.00000000.00000000.00000000
到11101111.11111111.11111111.11111111
。
出于这个原因,如果您查看二进制表示,目的地多播地址是以三个 1 和一个 0 开始的地址,因此到 IPv4 多播目的地的过滤器将是ip.dst == 224.0.0.0/4
。
也就是说,以四个 1(224)开头的地址和四位的子网掩码(/4)将表示 224 到 239 的网络地址将过滤多播地址。
- IPv6 组播 : IPv6 组播是发送到以
ff
(前两个十六进制数字=ff
)开头的地址的数据包,然后是一个数字标志和范围。因此,当我们编写过滤器ipv6.dst == ff00::/8
时,它意味着显示 IPv6 中发送到以字符串 ff 开头的地址的所有数据包,即 IPv6 组播。
请参见
配置 TCP/UDP 过滤器
TCP 和 UDP 是第 4 层的主要协议,提供终端应用之间的连接。无论何时从一端到另一端启动应用,都是从源端口(通常是一个等于或大于 1,024 的随机数)启动会话,并连接到目的端口,目的端口是一个众所周知的或注册的端口,它等待另一端的会话。这些是标识在会话中工作的应用的端口号。
其他类型的过滤器指的是 UDP 和 TCP 报头中的其他字段。在 UDP 中,我们有一个非常简单的报头,其中包含非常基本的数据,而在 TCP 中,我们有一个更复杂的报头,从中我们可以获得更多的信息。
在这个菜谱中,我们将集中讨论配置 TCP 和 UDP 显示过滤器的可能性。
做好准备
像以前一样,我们应该精确地计划我们想要显示的内容,并相应地准备过滤器。
TCP 和 UDP 端口号显示过滤器
对于 TCP 或 UDP 端口号,使用以下显示过滤器:
tcp.port == <value>
或udp.port == <value>
用于特定的 TCP 或 UDP 端口(源或目的地)tcp.dstport == <value>
或udp.dstport == <value>
用于特定的 TCP 或 UDP 目的端口tcp.srcport == <value>
o rudp.srcport == <value>
为特定的 TCP 或 UDP 目的端口
TCP 标头过滤器
在 UDP 中,报头结构非常简单—源端口和目的端口、数据包长度和校验和。因此,这里唯一有意义的信息是端口号。
另一方面,TCP 更复杂,它使用可被 Wireshark 监控的连接和可靠性机制。使用tcp.flags
、tcp.analysis
和其他智能过滤器将帮助您解决性能问题(重新传输、重复 ack、零窗口等),或协议操作问题,如重置、半开等。
此类别中常见的显示过滤器如下:
tcp.analysis
:用于 TCP 分析标准,如重传、重复 ack 或窗口问题。这些筛选器的示例如下(您可以使用自动完成功能来获取可用筛选器的完整列表):tcp.analysis.retransmission
显示重新传输的数据包tcp.analysis.duplicate_ack
显示多次确认的数据包tcp.analysis.zero_window
当连接端的设备发送零窗口消息时显示(该消息告诉发送方停止在此连接上发送数据,直到窗口大小再次增加)
tcp.analysis
fields do not analyze the TCP header, they provide protocol analysis through the Wireshark expert system.
tcp.flags
:这些过滤器用于确定是否设置了标志;tcp.flags.syn == 1
检查是否设置了 SYN 标志tcp.flags.reset == 1
检查是否设置了 RST 标志tcp.flags.fin == 1
检查是否设置了 FIN 标志tcp.window_size_value < <value>
寻找 TCP 窗口较小的情况,在某些情况下,这表示设备运行缓慢
tcp.flags
filters—for TCP flags, this will be used to find out whether a specific flag is set or not.
怎么做…
TCP/UDP 过滤器中的一些过滤器示例如下:
- 发往 HTTP 服务器的所有数据包:
tcp.dstport == 80
- 从网络
10.0.0.0/24
到 HTTP 服务器的所有数据包:ip.src==10.0.0.0/24 and tcp.dstport == 80
- 特定 TCP 连接上的所有重新传输:
tcp.stream eq 16 && tcp.analysis.retransmission
要隔离特定的连接,请将鼠标放在要观察的连接上的数据包上,右键单击它,然后选择跟随和 TCP 流。TCP 流是指从建立连接到断开连接,在事务两端之间传输的数据。字符串tcp.stream eq <value>
将出现在显示过滤器窗口中。这是你现在可以工作的流。在以下示例中,它作为流 6 输出,但它可以是任何流编号(从捕获文件中的流编号 1 开始):
重新传输是再次发送的 TCP 数据包。这可能有几个原因,如第十一章、传输层协议分析、中所述。
当您监视诸如重新传输、重复 ack 和其他影响性能的行为等现象时,请务必记住这些现象指的是特定的 TCP 连接。
-
特定连接上的所有窗口问题:
tcp.stream eq 0 && (tcp.analysis.window_full || tcp.analysis.zero_window)
tcp.stream eq 0 and (tcp.analysis.window_full or tcp.analysis.zero_window)
-
从
10.0.0.5
到 DNS 服务器的所有数据包:ip.src == 10.0.0.5 && udp.port == 53
-
包含字符串
cacti
(区分大小写)的 TCP 或 TCP 协议(例如 HTTP)中的所有数据包:tcp contains "cacti"
-
来自
10.0.0.3
的所有重新传输的数据包:ip.src == 10.0.0.3 and tcp.analysis.retransmission
-
发往任何 HTTP 服务器的所有数据包:
tcp.dstport == 80
-
从特定主机打开的所有连接(如果以扫描的形式,可能是一个警告):
ip.src==10.0.0.5 && tcp.flags.syn==1 && tcp.flags.ack==0
-
客户端发送和接收的所有 cookies:
ip.src==10.0.0.3 && (http.cookie || http.set_cookie)
它是如何工作的…
以下是 TCP 和 IP 报头结构的示意图。UDP 非常简单,只有源和目的端口号、长度和校验和:
IP 数据包中的一些重要内容:
- 版本 4 或 6。
- 报头长度 : 20 到 24 字节,带选项。
- 服务类型(ToS) :通常用区分服务 ( DiffServ )实现,优先提供优先服务。
TCP 标准(1981 年 10 月的 RFC 793)将该字段命名为 ToS,并定义了其结构。后来发布的区分服务标准(1998 年 12 月的 RFCs 2474、2475 和其他标准)用于在大多数应用中实现 ToS 字节。
- 长度:数据报总长度,以字节为单位。
- 标识符、标志和片段偏移量:每个数据包都有自己的数据包 ID。当分段时,连同标志和偏移,它将使接收器能够重组它。
- 生存时间:从 64、128 或 256(取决于发送数据包的操作系统)开始,此时途中的每台路由器都会将该值减 1。这可以防止数据包在网络中无休止地传输。在数据包中发现 1 的路由器会将其递减为零,并丢弃该数据包。
- 上层:上层协议——TCP、UDP、ICMP 等。
- 互联网校验和:这里的想法是发送方使用一种错误检查机制来计算数据包的值。该值在校验和字段中设置,而数据包的接收方将再次计算该值。如果发送的值不等于接收的值,将被视为校验和错误。
- 源和目的 IP 地址:顾名思义。
- 选项:IP 版本 4 中通常不使用。
IP 报头后面是 TCP 报头。格式如下:
TCP 数据包中的一些重要内容:
- 源端口和目的端口:这是两端的应用代码。
- 序列号:统计发送方发送给接收方的字节数。
- 确认号 : ACK 的接收字节。我们将在第十一章、传输层协议分析中详细讨论这一点。
- HL :表头长度,表示是否使用选项字段。
- Res :保留(用于未来标志)。
- 标志:启动连接(SYN)、关闭连接(FIN)、重置连接(RST)和推送数据以进行快速处理(PSH)的标志。将在 TCP 分析章节中讨论。
- Rcvr 窗口大小:接收方已经分配给进程的缓冲区。
- 校验和:数据包校验和。
- 选项:时间戳、接收器窗口增强(RFC 1323)和 MSS 扩展。最大段尺寸 ( MSS )是 TCP 有效载荷的最大尺寸。我们将在第 11 章、传输层协议分析中进一步讨论这一点。
还有更多…
IP 中的 TTL 字段是非常有用的字段。当看到一个 TTL 值时,它明确地指出数据包通过了多少个路由器。由于操作系统默认为 64、128 或 256,数据包通过互联网的最大跳数为 30(在专用网络中更少),例如,如果我们看到值为 120,则数据包已通过 8 个路由器,值为 52 表示数据包已通过 12 个路由器。
请参见
- 有关 TCP/IP 协议栈的更多信息,请参见第 11 章、传输层协议分析、 s
配置特定的协议过滤器
在本菜谱中,我们将提供为常见协议(如 DNS、HTTP、FTP 等)配置显示过滤器的说明和示例。
本菜谱的目的是学习如何配置过滤器,这将有助于我们进行网络故障排除,我们将在以下章节中详细讨论。
做好准备
要逐步完成这个食谱,您需要 Wireshark 软件和一个正在运行的捕获。不需要其他先决条件。
怎么做…
在这个菜谱中,我们将看到一些常见协议的显示过滤器。
HTTP 显示过滤器
一些常见的 HTTP 显示过滤器如下:
- 显示发往主机名的所有 HTTP 数据包:
http.request.method == <"Request methods">
- 使用 HTTP
GET
方法的数据包:http.request.method == "GET"
- 显示客户要求的 URI:
http.request.method == <"Full request URI">
http.request.uri == "/v2/rating/mail.google.com"
- 显示客户端请求的包含特定字符串的 URI(本例中是对 Google 的所有请求):
http.request.uri contains "URI String"
http.request.uri contains "mail.google.com"
- 通过网络发送的所有 cookie 请求(注意,cookie 总是从客户端发送到服务器):
http.cookie
- 从服务器发送到客户端的所有 cookie 集命令:
http.set_cookie
- Google 服务器发送到您电脑的所有 cookies:
(http.set_cookie) && (http contains "google")
- 包含 ZIP 文件的所有 HTTP 数据包:
http matches ".zip" && http.request.method == "GET"
DNS 显示筛选器
一些常见的 DNS 显示过滤器如下:
- 显示 DNS 查询和响应:
dns.flags.response == 0 for DNS queries
dns.flags.response == 1 for DNS response
- 仅显示具有四个或更多答案的 DNS 响应:
dns.count.answers >= 4
FTP 显示过滤器
一些常见的 FTP 显示过滤器如下:
- FTP 请求命令:
ftp.request.command == <"requested command"> - ftp.request.command == "USER"
- FTP 或 FTP 数据—FTP 命令(端口
21
)或数据(端口20
或变量):ftp
ftp-data
它是如何工作的…
用于显示过滤器的 Wireshark 正则表达式语法与 Perl 中的正则表达式使用相同的语法。
一些常见的修饰符如下:
您可以使用这些修饰符来配置更复杂的过滤器。例如,查找包含 ZIP 文件的 HTTP GET
命令:
http.request.method == "GET" && http matches ".zip" && !(http.accept_encoding == "gzip, deflate")
查找包含以.com
结尾的网站的 HTTP 邮件:
http.host matches ".com$"
请参见
- Perl 正则表达式语法列表可以在 http://www.pcre.org/的找到,手册页可以在 http://perldoc.perl.org/perlre.html 的找到
配置子字符串运算符过滤器
偏移过滤器是这样的过滤器,其中您实际上说*“转到协议报头中的字段 X,并检查接下来的 Y 字节是否等于…”*。
这些过滤器可以用在许多情况下,一个已知的字节字符串出现在包的某个地方,你想显示包含它的包。
做好准备
要逐步完成这个食谱,您需要 Wireshark 软件和一个正在运行的捕获。不需要其他先决条件。失调滤波器的一般表示如下:
Protocols[x:y] == <value>
X: Bytes from beginning of header
Y: Number of bytes to check
怎么做…
使用子字符串运算符的筛选器示例如下:
- 发往 IPv4 多播地址的数据包
eth.dst[0:3] == 01:00:5e RFC 1112
, section 6.4 allocates the MAC address space of 01-00-5E-00-00-00 to 01-00-5E-FF-FF-FF
to multicast addresses.
- 发往 IPv6 组播地址的数据包
eth.dst[0:3] == 33:33:00 RFC 2464
, section 7 allocates the MAC address space that starts with 33-33
to multicast addresses.
它是如何工作的…
Wireshark 允许您查看协议并在其中搜索特定的字节。这对于诸如以太网之类的协议中众所周知的字符串尤其实用。
配置宏
显示过滤器宏用于为复杂的显示过滤器创建快捷方式,您可以配置一次并在以后使用。
做好准备
要配置显示过滤器宏,请转到:分析|显示过滤器宏。您将看到以下窗口:
怎么做…
- 为了配置一个宏,你给它一个名字,并在文本框中填入过滤字符串。
- 为了激活宏,您只需编写以下内容:
$(macro_name:parameter1;paramater2;parameter3 ...)
- 让我们配置一个简单的过滤器名称
test01
,它采用以下参数作为值:
ip.src == <value> and
tcp.dstport == <value>
- 这将是一个过滤器,用于查找从特定源网络发送到 HTTP 端口的数据包。
采用这两个参数的宏如下所示:
ip.src==$1 && tcp.dstport==$2
- 现在,为了获得参数的过滤结果,我们执行以下操作:
ip.src == 10.0.0.4 and
tcp.dstport == 80
- 我们应该在显示窗口栏中编写如下字符串:
${test01:10.0.0.4;80}
它是如何工作的…
宏的工作方式很简单——在每个位置参数前写一个带符号$
的过滤字符串。运行宏时,它将按顺序接受参数。
五、使用基本统计工具
在本章中,您将了解:
- 使用统计-捕获文件属性
- 使用统计解析的地址
- 使用统计–协议层次菜单
- 使用统计–对话菜单
- 使用统计–端点菜单
- 使用统计–HTTP 菜单
- 配置用于查看 TCP 流的流图
- 创建基于 IP 的统计数据
介绍
Wireshark 的优势之一是它的统计工具。使用 Wireshark 时,我们有各种类型的工具,从列出终端节点和对话的简单工具,到更复杂的工具,如流和 I/O 图。
在接下来的两章中,我们将学习如何使用这些工具。在本章中,我们将了解为我们提供基本网络统计数据的简单工具,即谁在网络上与谁交谈,什么是聊天设备,网络上传输的数据包大小,等等。在下一章中,我们将进入诸如 I/O 和流图等工具,它们为我们提供了更多关于网络行为的信息。
有些工具我们就不说了——有些很明显(比如数据包大小),有些不太常见(比如 ANSP、BACnet、NCP 等等)。其他一些我们将在相关章节中提及,例如,统计|服务响应时间或统计|DNS。
要启动统计工具,请启动 Wireshark,并从主菜单中选择统计。
使用统计–捕获文件属性菜单
在这个菜谱中,我们将学习如何从网络上运行的数据中获取一般信息。Wireshark 2 中的捕获文件属性取代了 Wireshark 1 中的摘要菜单。
做好准备
启动 Wireshark,点击统计。
怎么做…
- 从统计菜单中,选择捕获文件属性:
您将会看到“捕获文件属性”窗口(显示在下面的屏幕截图中)。
- 正如您在下面的屏幕截图中看到的,我们有以下内容:
- File:提供文件数据,如文件名和路径、长度等
- 时间:捕获的开始时间、结束时间和持续时间
- 捕获:安装 Wireshark 的 PC 的硬件信息
- 接口:接口信息—左侧的接口注册表标识符(如果打开了捕获过滤器)、接口类型和数据包大小限制
- 统计数据:常规捕获统计数据,包括捕获和显示的数据包:
它是如何工作的…
当有人想了解捕获统计信息时,该菜单简单地给出了过滤数据属性和捕获统计信息(平均每秒包数或字节数)的摘要。
还有更多…
从 summary 窗口中,您可以获得整个捕获文件的平均每秒数据包数和每秒位数,显示的数据也是如此。
使用统计解析的地址
在这个菜谱中,我们将了解 Wireshark v2 的一个新功能:捕获的 IP 地址的 DNS 转换,以及众所周知的 TCP/UDP 端口和以太网(MAC)地址供应商的列表。
做好准备
启动 Wireshark,点击统计。
怎么做…
从统计菜单中,选择已解析的地址。您将看到以下窗口:
在此窗口中,您可以看到以下信息:
- 地址解析,提供捕获的 IP 地址的 DNS 名称。如果您希望看到评论,也可以选中评论。
- 哈希表是 IP 地址的哈希值。
- 端口名称(服务)、以太网地址、以太网制造商和以太网知名地址提供了以太网地址信息。
它是如何工作的…
对于 IP 地址,Wireshark 只需使用笔记本电脑的解析机制,即 DNS 和 Wireshark 主机文件,它们位于 Wireshark 主目录中。
对于 MAC 制造商,Wireshark 使用 IEEE 802 委员会所定义的 MAC 地址转换。
TCP 和 UDP 端口号由互联网编号分配机构 ( IANA )在http://www . iana . org/assignments/service-names-port-Numbers/service-names-port-Numbers . XHTML定义。
还有更多
借助 Wireshark 的这一新功能,我们可以获取互联网上的信息。它只是一些对我们有帮助和可获取的更多信息。
使用统计–协议层次菜单
在这个菜谱中,我们将学习如何获取在网络上运行的数据的协议层次信息。
做好准备
启动 Wireshark,点击统计。
怎么做…
- 从统计菜单中,选择协议层次结构:
您将获得的是关于捕获文件中协议分布的数据。您将获得捕获数据的协议分布。
- 此处显示的部分屏幕截图描述了基于每个协议捕获的数据包的统计信息:
您将看到协议层次窗口:
- 协议:协议名称
- 百分比数据包:协议数据包占捕获的全部数据包的百分比
- 数据包:总捕获数据包中协议数据包的数量
- 百分比字节:协议字节占捕获数据包总数的百分比
- Bytes:总捕获数据包中的协议字节数
- 位/秒:该协议的带宽,与捕获时间相关
- 结束数据包:该协议的数据包的绝对数量(对于解码文件中的最高协议)
- End Bytes:该协议的绝对字节数(用于解码文件中的最高协议)
- 结束位/秒:此协议的带宽,相对于捕获数据包和时间(对于解码文件中的最高协议)
当协议是数据包中的最后一个协议时(即当协议出现在帧的末尾时),end 列计数。这些数据包可以是不带有效负载的 TCP 数据包(例如,SYN 数据包),它们携带上层协议。这就是为什么您会看到以太网、IPv4 和 UDP 结束数据包的计数为零;不存在那些协议是帧中最后一个协议的帧。
在这个文件示例中,我们可以看到两个有趣的问题:
- 我们可以看到 1842 个 DHCPv6 数据包。如果不需要 IPv6 和 DHCPv6,请将其禁用。
- 我们看到超过 200,000 个检查点高可用性 ( CPHA )数据包,其中 74.7%是通过我们监控的网络发送的。这些是在集群中工作的两个防火墙之间发送的同步数据包,用于更新防火墙之间的会话表。如此大量的数据包会严重影响性能。此问题的解决方案是在防火墙之间配置专用链路,以便会话表不会影响网络。
它是如何工作的…
简单地说,它计算捕获数据的统计数据。一些需要注意的重要事项:
- 百分比总是指同一层协议。例如,在下面的屏幕截图中,我们看到逻辑链路控制有 0.5%的数据包在以太网上运行,IPv6 有 1.0%,IPv4 有 88.8%的数据包,ARP 有 9.6%的数据包,甚至旧的思科 ISK 也有 0.1%—第 2 层以太网上的协议总数为 100 %。
- 另一方面,我们看到 TCP 有 75.70%的数据,在 TCP 内部,只有 12.74%的包是 HTTP,差不多就是这样。这是因为 Wireshark 只计算带有 HTTP 报头的数据包。例如,它不计算 ACK 包、数据包等:
还有更多…
为了让 Wireshark 也能对数据包进行计数,例如 TCP 数据包中的 HTTP 数据包,请禁用允许子分离器重组 TCP 流。您可以从 Preferences 菜单或通过在 packet details 窗格中右键单击 TCP 来完成此操作。
使用统计–对话菜单
在这个菜谱中,我们将学习如何获取在网络上运行的数据的会话信息。
做好准备
启动 Wireshark,点击统计。
怎么做…
从统计菜单中,选择对话:
将出现以下窗口:
您可以选择第 2 层以太网统计、第 3 层 IP 统计或第 4 层 TCP 或 UDP 统计。
您可以将此统计工具用于:
- 在第 2 层(以太网):发现并隔离广播风暴
- 在第 3 层/第 4 层(TCP/IP) :并行连接到互联网路由器端口,并检查是谁在向 ISP 加载线路
If you see that there is a lot of traffic going out to port 80
(HTTP) on a specific IP address on the internet, you just have to copy the address to your browser and find the website that is most popular with your users.
If you don’t get anything, simply go to a standard DNS resolution website (search Google for DNS lookup) and find out what is loading your internet line.
要以名称的形式查看 IP 地址,您可以选中名称解析的名称解析复选框(前面截图中的 1 )。要查看名称解析,您必须首先通过选择视图|名称解析|启用网络层来启用它。
您还可以通过选中“限制显示过滤器”复选框( 2 )将对话统计信息限制为显示过滤器。这样,通过显示过滤器的所有数据包的统计数据都会显示出来。
Wireshark v2 中的一个新功能是图形功能,在之前的截图中标记为( 5 )。当您在 TCP 对话统计中选择特定线路并单击图形时…,它会将您带到 TCP 时间/序列(tcptrace)流图。该图也可从统计| TCP 流图中获得,将在下一章中解释。
要复制表格数据,点击复制按钮( 3 )。在 TCP 或 UDP 中,您可以标记特定的行,然后点选跟随流…按钮( 4 )。这将定义一个显示过滤器,向您显示特定的数据流。正如您在下面的屏幕截图中所看到的,您也可以右键单击一行,然后选择准备或应用过滤器,或者为数据流着色:
我们还可以看到,与以前的 Wireshark 版本不同,在以前的版本中,我们可以在上面的选项卡中看到所有类型的协议,而在这里,我们可以选择在默认情况下只显示已识别的协议时查看哪些协议。
它是如何工作的…
网络会话是两个特定端点之间的流量。例如,IP 会话是两个 IP 地址之间的所有流量,而 TCP 会话表示所有 TCP 连接。
还有更多…
使用对话列表时,会出现许多网络问题。
在以太网会话统计中:
- 寻找大量的广播——你可能会看到一个广播风暴(一个小的;在大调中,你可能什么也看不见)
在严重的广播风暴中通常会发生的情况是,由于 Wireshark 接收到数千甚至数万个每秒发送的数据包,软件只是停止向我们显示数据,屏幕冻结。只有当您断开 Wireshark 与网络的连接时,您才能看到它。
- 如果您看到大量流量来自特定的 MAC 地址,请查看它的第一部分——这是供应商 ID,它将为您提供麻烦制造者的线索
尽管 MAC 地址的前半部分标识了供应商,但它不一定标识 PC 本身。这是因为 MAC 地址属于安装在 PC 或笔记本电脑主板上的以太网芯片供应商,而不一定来自 PC 制造商。如果您没有得到一个您知道它来自哪里的地址,您可以 ping 可疑设备并通过 ARP 得到它的 MAC 地址,在交换机中找到 MAC 地址,如果您有一个管理系统,使用一个简单的 find 命令找到它。
在 IP 会话统计中:
- 检查发送或接收大量数据包的 IP 地址,并比较预期行为。如果该地址属于服务器,您可能会看到大量的数据包。但如果是最终用户,可能是网络扫描或只是产生了太多的流量。
- 寻找扫描模式,详见第 19 章、安全和网络取证。这可能是一个很好的扫描,如 SNMP 软件发送 ping 来发现网络,但通常网络扫描不是好事情。
- 您可以在下面的屏幕截图中看到典型的扫描模式:
在这个例子中,有一个扫描模式。一个 IP 地址192.168.110.58
,发送 ICMP 数据包到192.170.3.44
,到192.170.3.45
,到192.170.3.46
,到192.170.3.47
,等等(在图片中我们只能看到很短的一部分扫描)。然后扫描继续到192.170.4.0
、192.168.4.1
等等。在这种情况下,我们有一个蠕虫感染了网络中的所有 PC,当它感染 PC 时,它开始生成 ICMP 请求并将其发送到网络,因此窄带链路很容易拥塞(例如,WAN 连接)。
在 TCP/UDP 会话统计中:
- 寻找具有太多打开的 TCP 连接的设备。一台 PC 有 10-20 个连接是合理的;几百个不是。
- 查看并尝试找到无法识别的目的端口号。这可能没问题,但也可能意味着麻烦。在下面的屏幕截图中,您可以看到典型的 TCP 扫描:
在前面的屏幕截图中,我们看到了一个简单的 TCP 扫描模式。显示源地址10.0.0.1
,它在目的端口1
、3
、4
、6
、7
等产生发往 IP 地址81.218.230.244
的 TCP 包。
这种情况下的扫描是一种模式;10.0.0.1
向每个目的端口发送两个数据包。两个数据包从源端口63033
和63038
发送到端口1
,两个数据包从源端口63650
和63655
发送到端口3
,以此类推。
使用 conversations 工具时,可以立即识别的一件事情是,当您单击此窗口中的 source 或 destination 选项卡时,扫描模式会立即显示出来。
使用统计–端点菜单
在这个菜谱中,我们将学习如何获取捕获数据的端点统计信息。
做好准备
启动 Wireshark 并单击统计数据。
怎么做…
要查看端点统计信息,请按照下列步骤操作:
- 从统计菜单中,选择端点:
- 将出现以下窗口:
在此窗口中,您将能够看到第 2 层、第 3 层和第 4 层端点,即以太网、IP 和 TCP 或 UDP。
从窗口的左侧,您可以看到(这里是 TCP 选项卡的示例):
- 该主机上的端点 IP 地址和端口号
- 该主机发送和接收的数据包总数和字节数
- 发往主机的数据包(数据包 A → B)和发往主机的字节(字节 A → B)
- 发往主机的数据包(数据包 B → A)和发往主机的字节(字节 B → A)
- 适用于 GeoIP 的纬度和经度列,如第 10 章 、 网络层协议和操作所述进行配置。
在窗口底部,我们有以下复选框:
- 名称解析:如果在视图菜单下的名称解析中配置了名称解析,则提供名称解析。
- 限制显示过滤器:仅显示主窗口上配置的显示过滤器的统计信息。
- 复制:以 CSV 或 YAML 格式将列表值复制到剪贴板。
- 地图:在配置了 GeoIP 的情况下,在地理地图上显示地理信息。有关 GeoIP 配置,请参见第 10 章、网络层协议和操作、。
它是如何工作的…
很简单,它给出了 Wireshark 发现的所有端点的统计数据。它可以是任何情况,例如以下情况:
- 几个以太网(甚至上)端节点(即 MAC 地址),许多 IP 端节点(即 IP 地址),例如,我们有一个路由器,它从许多远程设备发送/接收数据包。
- 几个 IP 端节点和许多 TCP 端节点—每台主机上许多 TCP 连接都是这种情况。可能是具有许多连接的服务器的常规操作,也可能是一种来自网络的攻击(SYN 攻击)。
还有更多…
这里我们看到了一个从网络中心获取的捕获文件的示例,以及我们可以从中获得什么。
在下面的截图中,我们看到了一个内部网络,其中大多数数据包都被发送到一台思科设备(可能是一台路由器)和一台惠普设备( 1 )。然后我们看到几个设备有未解析的 MAC 地址( 2 )。接下来,我们看到广播( 3 )和生成树帧( 4 )、IPv4 和 IPv6 组播(我们将在第 10 章 、 网络层协议和操作 、 IPv6 组播从33:33:00
开始),在最后一行,这些帧的前六个数字可以是所显示的选项之一— 思科发现协议(
在下一个捕获文件示例中,从到互联网的连接中获取,我们看到大多数到互联网的数据包(13,031 个数据包)被发送到 IP 地址54.230.47.224
:
当我们试图找出这个网站,并试图在我们的浏览器中简单地写下它的 IP 地址时,我们会得到 HTTP 和 HTTPS 的错误。我们可以在下面的截图中看到这一点:
因此,为了看到这个网站,我们将使用名称解析按钮,然后:
- 如下图所示,我们看到了该地址的 DNS 转换。要查看转换后的地址,您需要首先标记查看|名称解析|解析网络地址,然后刷新主机表:
Some windows in Wireshark refresh automatically when the operation you make requires it, and some not. In our case, in version 2.0.3, it does not. In this case, you can simply check the Limit to display filter checkbox and the window will be refreshed. Then, if you don’t need the filter, uncheck it.
- 右键单击要检查的主机所在的行,选择“应用过滤器”|“选定的”,然后转到 Wireshark 主窗口。
- 在 Wireshark 主窗口中,转到数据包扣留窗格。单击带有您要复制的名称的地址。选择复制|描述。也可以用Ctrl+Shift+D:
- 将不带 IP 地址的值复制到您的 web 浏览器,您将获得所需的网站:
有了 DNS 名称,网站就会出现。
使用统计–HTTP 菜单
在这个菜谱中,我们将学习如何使用在网络上运行的数据的 HTTP 统计信息。
做好准备
启动 Wireshark,点击统计。
怎么做…
要查看 HTTP 统计信息,请单击统计信息菜单并选择 HTTP。将出现以下窗口:
在 HTTP 菜单中,我们有以下内容:
- 数据包计数器:为我们提供每个网站的数据包数量。这将帮助我们了解我们收到了多少请求和响应。
- 请求:查看向网站分发的请求。
- 负载分布:查看网站之间的负载分布。
查看数据包计数器统计信息:
- 选择统计| HTTP |数据包计数器。
- 将会打开以下窗口:
此窗口显示 HTTP 请求和响应的总数。
- 为了查看特定节点的 HTTP 统计信息,您可以使用显示过滤器格式为它配置一个过滤器。这可以在显示过滤器窗口中配置。
查看 HTTP 请求统计信息:
- 选择统计| HTTP |请求。将出现以下窗口:
- 要获得特定 HTTP 主机的统计信息,您可以设置一个过滤器
http.host contains <host_name>
或http.host==<host_name>
(取决于您是需要具有特定名称的主机名还是包含特定字符串的主机名),您将看到这个特定主机的统计信息。 - 例如,配置过滤器
http.host == www.ndi-com.com
,将统计到www.ndi-com.com
的网站(如下图所示):
要查看 web 或特定网站的负载分布:
- 选择统计| HTTP |数据包负载分布。
- 将出现以下窗口(为便于解释,缩小了范围):
- 打开表项时,您可以通过以下方式获得服务器列表:
- 国际电脑互联网地址
- 服务器地址
- HTTP 主机名
在第十二章、 FTP、HTTP/1 和 HTTP/2 中,您将看到如何使用这些工具进行 HTTP 分析。
它是如何工作的…
当我们打开一个网站时,它通常会向几个 URL 发送请求。在这个例子中,我们打开的一个网站是www.cnn.com
,它将我们转发到edition.cnn.com
。考虑到这一点,我们已经向根 URL 发送了几个请求来获取突发新闻,并向主页上的另外两个位置发送了请求。
还有更多…
对于更深入的 HTTP 分析,您可以使用特定用途的工具。其中最常见的是提琴手。你可以在:http://www.fiddler2.com/fiddler2/找到它。
Fiddler 是为 HTTP 故障排除开发的软件工具,因此它为 HTTP 提供了更多的数据和更好的用户界面。
配置用于查看 TCP 流的流图
在本食谱中,我们将学习如何使用流程图功能。
做好准备
打开 Wireshark,单击 statistics,然后选择 Statistics 菜单中间的 Flow Graph。
怎么做…
选择流图,将会打开以下窗口:
在窗口中,我们看到左边是数据包时间,数据包的起始地址和目的地址,以及流向箭头两侧的端口号。
单击其中一个会话箭头会将您带到 Wireshark 主窗口数据包列表窗格中的数据包。
您可以从“流程图”窗口的几个选项中进行选择:
- 显示所有捕获的数据包或只显示由显示过滤器过滤的数据包。
- 显示所有流或仅显示 TCP 流。这将只显示 TCP 操作,例如,在 HTTP 请求中,它将显示它是一个 TCP 推送(在第 12 章、 FTP、HTTP/1 和 HTTP/2 中解释),以及它是一个 HTTP
GET
命令的事实。 - 显示任何类型的地址,例如 MAC 地址,或者只显示网络地址(实际上,这将只显示 IP 地址)。
它是如何工作的…
只需从捕获的文件中创建简单的统计数据。
还有更多…
理解 TCP 问题有时相当复杂。最好的方法是,大多数时候,使用图形界面更好的图形软件,或者干脆拿一张纸和不同颜色的笔自己画。
能够完成这项工作的友好软件包括 Wireshark 的开发人员提供的 Cascade Pilot 包:http://www . riverbed . com/us/products/Cascade/Wireshark _ enhancements/Cascade _ Pilot _ personal _ edition . PHP。
下图是一个自制图表的例子:
您可以清楚地看到 TCP 连接是如何设置的(帧 2-4),客户端10.0.0.5
如何发送 HTTP POST
命令并从服务器77.234.41.58
获得 200 (OK)(帧 5-7),以及连接是如何有序关闭的(帧 8-11)。
我们将在后面的第 12 章、 FTP、HTTP/1 和 HTTP/2 以及其他应用章节中看到更多这些自制的图表。几个图下来,你就对这个了如指掌了。
创建基于 IP 的统计数据
在这个菜谱中,我们将学习如何创建一些基于 IP 的统计数据。IP 统计实际上是基于相同数据的几种工具,即源和目的 IP 地址,以及在它们之间发送的数据包。
做好准备
打开 Wireshark 并单击统计菜单。在统计菜单的底部,我们看到以下统计工具:
- IPv4 统计
- IPv6 统计
下面显示了 IPv4/IPv6 统计信息部分下的选项:
- 所有地址
- 目的地和港口
- IP 协议类型
- 源地址和目的地址:
怎么做…
要获得统计数据,请按照下列步骤操作:
要获取所有 IP 地址:
- 转到统计| IPv4 统计|所有地址。
- 或者,转到统计| IPv6 统计|所有地址。将打开以下窗口:
- 到目前为止,很明显。有趣的是,您可以配置一个过滤器,例如(在本例中),过滤器
tcp.analysis.retransmission
向我们显示大多数重传都是针对地址10.10.10.30
的,有 1,262 次重传是针对该地址的:
- 还有其他工具可以向我们显示相同的信息,例如,我们在本章前面讨论过的 Statistics | Conversations,或者简单地使用 Wireshark 主窗口上的显示过滤器。
要获取 IP 和 TCP/UDP 目标统计信息:
- 转到统计| IPv4 统计|目标和端口。
- 或者,转到统计| IPv6 统计|目标和端口。在以下窗口中,您可以选择想要使用的过滤器,例如
tcp.analysis.zero_window
,如下图所示:
要获取 IP 协议类型:
- 转到统计| IPv4 统计|协议类型
- 或者,转到统计| IPv6 统计|协议类型
从这里没什么可得到的。
要获取 IP 源地址和目的地址:
- 转到统计| IPv4 统计|源地址和目标地址
- 或者,转到统计| IPv6 统计|源地址和目标地址
从这里也没得到什么。
这里作为例子给出的文件是CAP_05_08
。
它是如何工作的…
它的工作原理很简单,就是在捕获的文件上创建统计数据。
还有更多…
Wireshark 中有各种选项可以提供非常相似的统计数据;这些是本章开始时讨论的对话、协议层次和端点。您可以将它们与前面的结合使用。