Wireshark2-网络分析秘籍-一-
Wireshark2 网络分析秘籍(一)
零、前言
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-2500udp 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 80ip 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]时,一些位被设置为1proto[x:y] & z = z:将屏蔽z应用到proto[x:y]时,所有位都设置为zproto[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:xxwhere x is 0 to f | eth.addr == 00:50:7f:cd:d5:38 |
| eth.addr == xx-xx-xx-xx-xx-xxwhere x is 0 to f | eth.addr == 00-50-7f-cd-d5-38 |
| eth.addr == xxxx.xxxx.xxxxwhere x is 0 to f | eth.addr == 0050.7fcd.d538 |
| 广播 MAC 地址 | Eth.addr == ffff.ffff.ffff | |
| IPv4 主机地址 | ip.addr == x.x.x.xwhere 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::/ywhere 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:18eth.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 == ::1ipv6.addr == 2008:0:130F:0:0:09d0:666A:13abipv6.addr == 2006:0:130f::9c2:876a:130bipv6.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 queriesdns.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或变量):ftpftp-data
它是如何工作的...
用于显示过滤器的 Wireshark 正则表达式语法与 Perl 中的正则表达式使用相同的语法。
一些常见的修饰符如下:
^:匹配行首$:匹配行尾|:交替():分组*:匹配零次或多次+:匹配一次或多次?:匹配一次或零次{n}:精确匹配n次{n,}:至少匹配 n 次{n,m}:匹配至少 n 次,但不超过 m 次
您可以使用这些修饰符来配置更复杂的过滤器。例如,查找包含 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 中有各种选项可以提供非常相似的统计数据;这些是本章开始时讨论的对话、协议层次和端点。您可以将它们与前面的结合使用。
六、使用高级统计工具
在本章中,我们将学习以下主题:
- 使用过滤器配置 I/O 图形以测量网络性能问题
- 使用 I/O 图测量吞吐量
- 具有高级 y 轴参数的高级 I/O 图形配置
- 通过 TCP 流图获取信息–时间/顺序(Steven 的)窗口
- 通过 TCP 流图获取信息–时间/序列(TCP-trace)窗口
- 通过 TCP 流图获取信息–吞吐量窗口
- 通过 TCP 流图获取信息–往返时间窗口
- 通过 TCP 流图获取信息–窗口缩放窗口
介绍
在第 5 章、使用基本统计工具、中,我们讨论了基本统计工具,即终端用户列表、对话列表、捕获摘要等。在本章中,我们将了解高级统计工具——I/O 图、TCP 流图,简而言之,还有 UDP 组播流。
我们将在这里讨论的工具使我们能够更好地了解网络。这里,我们有两个主要工具:
- I/O 图形,使我们能够查看任何预定义过滤器的统计图形,例如,单个 IP 地址上的吞吐量、两台或多台主机之间的负载、应用吞吐量、TCP 现象分布、帧之间的时间、TCP 序列号和确认之间的时间等。
- TCP 流图。在检查这些问题时,我们将更深入地研究单个 TCP 连接,并了解如何隔离 TCP 问题以及导致这些问题的原因。
Wireshark v2 显著改进了 I/O 图和 TCP 流图。在本章中,我们将学习如何使用这些工具;在处理协议的章节中,我们将需要它们来进行更深入的协议分析。
使用过滤器配置 I/O 图形以测量网络性能问题
在本菜谱中,我们将学习如何使用 I/O 图形工具,以及如何配置它来进行网络故障排除。
做好准备
在统计菜单下,打开 I/O 图。您可以在联机文件捕获过程中或在之前捕获的文件上执行此操作。在实时捕获中使用 I/O 图时,您将获得捕获数据的实时统计信息。
怎么做...
运行 I/O 图,您将得到以下窗口:

在窗口的上部,您可以看到图形区域。在左下方,您可以看到 filters 区域,该区域允许您配置将启用特定图形的显示过滤器。正如您在前面的截图中看到的,默认值是在 y 轴上的每秒包数和在 x 轴上的以秒为单位的时间。
您可以为窗口显示配置以下参数:
- 窗口左下角的+/-和复制按钮用于添加/删除和复制图表。
- 使用“鼠标用法”复选框来拖动或缩放。您可以将图形拖过窗口,并使用缩放功能来放大或缩小。使用窗口右下角的重置按钮返回到初始窗口状态。
在 x 轴上,可以通过以下方式配置参数:
- 选择间隔。范围可以在 1 毫秒到 10 分钟之间
例如,如果当 x 轴被配置为 1 秒的间隔时,我们获得每秒 1000 个包的峰值,这意味着在最后一秒,我们已经接收了 1000 个包。当我们将 x 轴更改为 0.1 秒间隔时,峰值会有所不同,因为现在我们可以看到在过去的 0.1 秒内捕获了多少个数据包。
- 选中“一天中的时间”复选框,以选择“一天中的时间”格式,而不是从捕获开始的时间
在 y 轴配置上,可以进行如下更改:
- 选中对数标度复选框,以对数标度查看图表
图形配置:
- 在图形窗口中,您可以添加/删除/复制和更改图形。只需完成以下步骤:
- 当您启动 I/O 图形时,默认情况下会显示所有数据包图形。
- 要添加带有过滤器的附加图形,请单击 I/O 图形窗口左下角的+号。将添加一个新行。
- 在“名称”列中为图表命名。
- 在显示过滤器列中配置所需的过滤器。顾名思义,该过滤器采用带有自动完成功能的显示过滤器语法。
- 配置(或保留默认值)颜色和样式列。
- 在样式栏中,您可以配置线条、脉冲、条形图、堆积条形图、点、正方形和菱形参数。例如,Line 适用于流量图,而 Dot 适用于 TCP 分析、重新传输、重复 ACK 等事件图。
- 如果您想要查看运行平均值,即在每个分笔成交点间隔中查看过去分笔成交点的平均值,请选取平滑。您可以选择 4 到 1024 之间的值来平滑图形。
在下面的示例中,CAP_1674_06_02,您会看到一个包含所有数据包、tcp.analysis.duplicate_ack和tcp.analysis.fast_retransmission过滤器的流量图:

在示例中,您可以看到 x 轴刻度以 10 ms(毫秒)为单位, y 轴刻度以数据包/10 ms 为单位。在第一个图表中,所有数据包是没有任何过滤器的总流量,以线条样式呈现;使用过滤器tcp.analysis. duplicate_ack的第二个图形使用点样式呈现,使用过滤器tcp.analysis. fast_retransmission的第三个图形使用正方形样式呈现。该图以放大的焦点呈现在从捕获开始起 52.5 到 52.86 秒之间的时间上。
流量从 52.53 到 52.54 的每 10 毫秒 6 个包( 1 )的峰值开始,接下来的两个峰值是每 10 毫秒 12 个包( 4 和 9 )。
对于重复确认,我们在 52.61 秒看到一个事件( 2 ,在 52.62 秒看到六个事件( 3 ,在 52.68 秒看到两个事件( 5 ,在 52.69 秒看到两个事件( 6 ,在 52.60 秒,我们看到五个重复确认( 8 事件)和一个快速重传事件( 7 )。
正如我们从下面的截图中看到的,特定时间的事件意味着在指定时间发生的事件—例如,在时间 52.62 发生的六个事件意味着在时间 52.62 发生了六个事件:

稍后,在处理协议的章节中,我们将看到我们在这里谈到的准确性的重要性,以及何时何地使用它。
它是如何工作的...
I/O 图形功能是重要的 Wireshark 工具之一,使我们能够监控在线性能以及离线捕获文件分析。
当你使用这个工具时,重要的是要记住用正确的 x 轴和 y 轴参数配置正确的滤波器。
我们可以在 y 轴上测量两种类型的参数。第一种类型是数字参数——数据包、字节和位,相对于 x 轴中的时间刻度进行测量。如下面的屏幕截图所示,第二种类型的参数是 SUM、COUNT FRAMES、COUNT FIELDS、MAX、MIN、AVG 和 LOAD,它们用于 y 轴不一定显示数字的计数,如本章后面的“使用高级 y 轴参数的高级 I/O 图形配置”一节所述:

另一个需要记住的重要特性是窗口左侧的平滑栏,如下图所示。术语平滑意味着它不会绘制每个样本的值,但会累积最近的 10、20、50、100 和 200 个样本,构建这些读数的平均值,并绘制该平均值(10、20、50、100 等等):

正如我们将在后面看到的,这可以用于带宽/吞吐量测量。
还有更多...
要查看 I/O 图形窗口的快捷方式列表,请将鼠标放在图形窗口和过滤器窗口之间的空间:

在这个窗口中,你可以以任何你认为合适的方式改变这个显示——例如,你可以放大/缩小 x 或 y 刻度,移动光标,在选项之间切换,等等。
使用 I/O 图测量吞吐量
I/O 图形功能是一种测量网络吞吐量的便捷工具。我们可以用它来测量任何预定义过滤器的流量和吞吐量。在这个配方中,我们将看到一些如何使用它来测量网络吞吐量的例子。
做好准备
使用 Wireshark 将您的笔记本电脑连接到网络,将端口镜像到您想要测量的链路,正如您在第 1 章、Wireshark v2中所学。启动新的捕获或打开现有文件,然后从统计菜单中打开 I/O 图形。
测量吞吐量时,我们可以在终端设备(PC 到服务器、电话到电话、PC 到互联网)或特定应用之间的通信线路上进行测量:

隔离网络问题的过程始于测量链路上、终端设备之间或单个连接上的流量,以了解流量的来源。
一些典型的测量是主机到主机的流量、到特定服务器的所有流量、到特定服务器上的特定应用的所有流量、特定服务器上的所有 TCP 性能现象等等。
怎么做...
在本菜谱中,我们将提供一些基本的过滤器来测量整个网络的流量。
测量下载/上传流量
让我们来看看接下来的两幅图,其中一台 IP 地址为10.0.0.10的电脑正在浏览互联网,在 http://www.youtube.com 的上看电影。图表在文件CAP_1674_06_03中配置。
在这两个 I/O 图中,我们配置了两个过滤器:
- 第一张图显示了所有流向 IP 地址
10.0.0.10的流量——这是ip.dst==10.0.0.10过滤器,以红色显示(上面一行)。这是下载(下行)流量的图表。 - 第二张图显示了来自 IP 地址
10.0.0.10的所有流量——这是ip.src==10.0.0.10过滤器,用绿色表示(下面一行)。这是上传(上行)流量的图表。

在第一张图中,我们可以看到,当 x 轴被配置为 1 秒的时间间隔,并且 y 轴刻度被配置为包/秒时,我们已经测量了流量。我们得到的结果显示,当用户观看电影时,上传的内容约占总下载量的一半:

在第二张图中,我们可以看到以比特/秒为单位观看质量合理的电影的流量。在这个例子中,正在通过http://www.youtube.com观看电影。正如你所看到的,最初下载的流量是 10 兆比特/秒(这是当你打开电影窗口时看到的小圆箭头),从那时起连续观看电影的流量是 6 兆比特/秒。
我们还可以看到,流量是强烈不对称的,大部分流量来自下载。在下面的截图中,你可以看到为什么:

在这里,我们可以看到从googlevideo.com到10.0.0.10的每两个下行分组有一个上行确认,这就是为什么我们看到 1:2 的比率。另一方面,当我们查看数据包长度时,我们可以看到下载流量中的两个数据包的长度为 1,506 字节,而上行确认数据包是一个短的 54 字节长的数据包。
测量两个终端设备之间的几个流
要测量端点设备之间的吞吐量,只需在它们的 IP 地址之间配置一个显示过滤器。
让我们看看统计|对话中的CAP_1674_06_04文件。在该文件中,我们可以看到三个最繁忙的连接如下:
- 从终端服务器客户端
192.168.1.192到终端服务器172.30.0.10的一个连接 - 从终端服务器
172.30.0.10到数据库服务器172.30.0.22的两个连接
在下面的屏幕截图中,我们可以看到对话窗口:

过滤器字段中设置的参数如下:
ip.addr==172.30.0.22 && tcp.port==57604 && ip.addr==172.30.0.10 && tcp.port==445ip.addr==172.30.0.22 && tcp.port==58479 && ip.addr==172.30.0.10 && tcp.port==445ip.addr==192.168.1.192 && tcp.port==45214 && ip.addr==172.30.0.10 && tcp.port==3389
正如我们在下面的截图中看到的,当我们查看 I/O 图时,我们可以看到从终端服务器172.30.0.10到数据库服务器172.30.0.22的两个峰值。棕色的客户端-服务器流量 1 出现在右侧,绿色的客户端-服务器流量 2 出现在左侧:

由于从终端服务器到数据库服务器的两个比特流的带宽远高于终端服务器流的带宽,因此我们在此窗口中看不到最后一个比特流(屏幕截图中添加了虚线)。为了查看它,我们禁用了两个较高的位流复选框,我们得到的结果如下:

在这里,我们可以看到终端服务器流量的最高峰值大约是每秒 400,000 位(在前面的屏幕截图中添加了一条虚线)。
测量应用吞吐量
为了配置特定应用的性能测量,您可以配置包含特定端口号或特定连接的过滤器。
有几种方法可以隔离应用图:
- 在捕获的数据中,单击属于通信流的任何数据包。在 TCP 中,会是特定的连接;在 UDP 中,它只是一个 IP/端口对之间的流。
- 右键单击它并选择跟随 TCP 流或跟随 UDP 流。
- 你会得到
tcp.stream eq <number>or udp.stream eq <number>。<number>只是捕获文件中的流的编号。 - 将字符串复制到 I/O 图形中的过滤器窗口,您将获得特定流的图形:

使用 TCP 事件分析测量 TCP 流
要测量特定的流以找到干扰该流的事件,请使用如下 I/O 图:
-
打开捕获文件(或开始新的捕获)并启动 I/O 图形。在这个例子中,我们使用了
CAP_1674_06_06文件。 -
在第一个过滤器中,配置流编号—在本例中,我们看到的是
tcp.stream eq 0。这会给你这个流的流量。 -
在第一个过滤器中,配置流编号和
tcp.analysis.retransmissions: tcp.stream eq 0,和tcp.analysis.retransmissions。这将显示特定流上的所有 TCP 重新传输现象(指示慢速终端设备)。
在下面的屏幕截图中,我们在第一个线形图中看到 0 号流,在第二个点状图中看到该流的重新传输:

在第十章、网络层协议和操作中,我们将看到如何使用这些特性对 TCP 流量进行深入分析。
它是如何工作的...
I/O graph 工具的强大之处在于,您可以配置任何显示过滤器,并以各种形状和配置将其视为图形。数据包中的任何参数都可以通过这种方式进行过滤和监控。
还有更多...
您可以在任何可以通过显示过滤器字符串过滤的参数上配置 I/O 图形,这使它成为一个非常强大的工具。让我们看一些例子。
我们可以使用图表来查找特定用户发送的 SMS 消息(CAP_1674_06_07):
- 要配置过滤器,使用
Submit_SM命令选择短消息点对点 (SMPP)协议数据包。这是发送 SMS 的 SMPP 命令。 - 键入
smpp.source_addr == phone number过滤器。在示例中应用了smpp.source_addr == 0529992525过滤器:

我们还可以使用一个图表来显示一些 HTTP 请求(CAP_1674_06_08):
- 打开 I/O 图。您可以在捕获期间执行此操作以查看在线统计数据,也可以打开保存的捕获文件。
- 在输入/输出图形窗口中配置
http.request过滤器。 - 您将得到下图:

该图显示了每秒包含 HTTP 请求的数据包数量。
本配方的目的是展示 I/O 图形工具的功能。稍后,在处理协议的章节中,我们将使用它们进行更深入的协议分析。
具有 y 轴参数的高级 I/O 图形配置
在使用 I/O 图的标准测量中,当 y 轴以包/秒、字节/秒或比特/秒为单位显示时,我们测量网络的性能。有些类型的数据不能用这些参数来度量,例如,我们度量查询和响应之间的秒数、以太网帧之间的秒数、延迟,以及我们将在这个配方中看到的其他类似情况。下一节将介绍这些参数。这些功能在 Wireshark 版本 1 的 y 轴选项中被称为高级。
做好准备
打开 y 轴下的下拉菜单,如下截图所示:

您将获得以下 y 轴选项:
- SUM (Y 字段):绘制一个图表,其中包含刻度间隔内的参数摘要
- 计算帧数(Y 字段):绘制一个图形,计算时间间隔内过滤帧的出现次数
- 计数字段(Y 字段):绘制一个图表,对时间间隔内筛选字段的出现次数进行计数
- MAX (Y 字段):用时间间隔内参数的平均值绘制图形
- MIN (Y 字段):用时间间隔中参数的最小值绘制图形
- AVG (Y 字段):用时间间隔内参数的平均值绘制图形
- 负载(Y 字段):用于响应时间图表
在 Y 字段中,您可以设置想要查看的参数。
怎么做...
要开始使用带有 y 轴配置选项功能的 I/O 图形,请完成以下步骤:
- 从统计菜单启动 I/O 图
- 在 Y 轴下拉菜单中,选择您希望出现在 y 轴上的参数
- 您将看到一个带有字符串 SUM (Y 字段)的新下拉菜单
- 选择以下字段:总和(Y 字段)/计数帧(Y 字段)/计数字段(Y 字段)/最大值(Y 字段)/最小值(Y 字段)/ AVG (Y 字段)/负载(Y 字段)
- 在 Y 字段列中配置适当的过滤器
让我们看一些有用的例子。
监控帧间时间增量统计
帧之间的时间增量会影响 TCP 性能,并严重影响语音和视频等交互式应用。因此,您可以使用各种选项。其中之一是将frame.time_delta用于所有帧之间的时间增量,或者将frame.time_delta用于显示的分组之间的时间增量。
让我们看看下面的捕获文件(文件CAP_06_09):

正如我们在前面的屏幕截图中看到的,配置了以下参数:
- 在显示过滤器栏中,过滤器 ip.src==212.143.195.13 。这是用来查看从这个网站传到我们电脑的帧。
- 在 Y 轴字段中,AVG (Y 轴)用于显示平均帧间时间。
- 在 Y 字段列中,
frame.time_delta_displayed过滤器用于显示帧间时间。
本例中的时间间隔被配置为 1 毫秒,放大视图的中心是从捕获开始起的 176 秒。
y 轴中的时间值以微秒表示,例如第 9391 帧和前一帧之间的帧间时间显示为 6349 微秒。
要查看最小值、平均值和最大值,我们可以使用三个图表,如下图所示。
我们可以查看frame.time_delta过滤器的最大值、平均值和最小值,正如我们在下一个截图中看到的。请记住以下几点:
- 对于第一个图表:
- 在显示过滤器栏中,
ip.src==212.143.195.13过滤器描述了从该网站传到我们电脑的帧 - 在 Y 轴字段中,AVG (Y 轴)用于显示平均帧间时间
- 在显示过滤器栏中,
- 对于第二个图表:
- 在显示过滤器栏中,
ip.src==212.143.195.13过滤器描述了从该网站传到我们电脑的帧 - 在 Y 轴字段中,MIN (Y 轴)用于显示平均帧间时间
- 在显示过滤器栏中,
- 对于第三个图表:
- 在显示过滤器栏中,
ip.src==212.143.195.13过滤器描述了从该网站传到我们电脑的帧 - 在 Y 轴字段中,MAX (Y 轴)用于显示平均帧间时间
- 在显示过滤器栏中,

正如 Style 列中所配置的,我们可以看到最小值为正方形,最大值为菱形,平均值为直线。我们应该如何处理这些图,以及如何使用它们进行网络调试?这一点我们将在第 10 章、网络层协议和操作到第 19 章、安全和网络取证中学习,这些章节处理协议。
监控流中 TCP 事件的数量
TCP 事件可以有多种类型—重新传输、滑动窗口事件、ack 等等。要查看一段时间内 TCP 事件的数量,我们可以使用带有高级功能和计数(Y 轴)参数的 I/O 图。
在下面的示例CAP_1674_06_10中,我们有两个 TCP 流:

要配置 I/O 图形,请执行以下步骤:
- 从统计菜单中打开 IO 图。
- 配置显示筛选器列;在本例中,这些内容如下:
- 第一图:
ip.addr==10.0.0.1 && tcp.port==57449 && ip.addr==92.122.12.174 && tcp.port==80 - 第二张图表:
ip.addr==10.0.0.1 && tcp.port==57627 && ip.addr==88.221.159.148 && tcp.port==80
- 第一图:
要配置过滤器,您可以右键单击对话窗口中的流行,准备一个将出现在显示过滤器窗口中的过滤器,并将其复制到 I/O 图形窗口。您也可以右键单击流中的一个数据包,并选择跟随 TCP 流。
- 配置 Y 轴参数:
- 配置帧数(Y 场)。
- 在 Y 字段上,配置过滤器——在本例中,这是所有 TCP 事件的
tcp.analysis,但它可以是任何特定的过滤器,如tcp.analysis.retransmissions、tcp.analysis.zero_window或任何其他过滤器。

在最后一张截图中,我们可以看到两个时期的事件。我们可以放大其中的一个——例如,放大第一组事件——我们将获得下一个屏幕截图。
监控现场出现的次数
可变计数字段(Y 字段)对捕获文件中特定字段的出现次数进行计数,或对由“显示过滤器”列中配置的过滤器过滤的信息进行计数。
其原理如下:
- 在显示过滤器列中,您可以为应该检查的流量配置过滤器
- 在 Y 轴列中,您可以配置计数字段(Y 字段)
- 在 Y 字段列中,指定要对其外观进行计数的字段
在下面的截图(文件CAP_1674_06_11)中,您可以看到一个如何使用它的示例:

在这里,我们可以看到我们检查了 A 记录和 AAAA 记录的出现次数:上图是 IPv4 A 记录,下图是 IPv6 AAAA 记录。
它是如何工作的...
I/O 图是 Wireshark 最强大、最有效的工具之一。虽然标准 I/O 图形统计可用于基本统计,但 y 轴配置可用于深入监控响应时间、单个流或多个流的 TCP 分析等。
当我们在左侧配置过滤器时,我们将过滤主机之间的流量、连接上的流量、服务器上的流量等等。 y 轴配置功能为我们提供了更多关于流量的详细信息。例如:
- 左边—TCP 流。右边—流中帧之间的时间增量
- 左侧—视频/RTP 流。右侧—出现一个标记位
还有更多...
您可以随时单击 I/O 图,它会将您带到数据包窗格中的参考数据包。
通过 TCP 流图获取信息–时间/顺序(Steven 的)窗口
Wireshark 中的一个工具是 TCP 流图,它使我们能够更深入地研究应用的行为。正如我们将在接下来的几个食谱中看到的,这些图表使我们能够获得应用行为的细节,这样做,为我们提供了定位问题的可能性。
做好准备
打开现有的捕获或开始新的捕获。单击捕获文件中的特定数据包。尽管您可以在正在运行的捕获上使用此功能,但它并不意味着用于在线统计,因此建议您启动一个捕获,停止它,然后使用此工具。
怎么做...
要查看 TCP 流图统计信息,请执行以下操作:
- 单击您想要监控的数据流上的数据包。
TCP 流显示了一个方向图,所以当你点击一个数据包时,它应该在你想要查看统计数据的方向。例如,如果您下载了一个文件,并且想要查看下载统计数据,请单击下载方向上的数据包。
- 从统计菜单中,选择 TCP 流图|时序图(Stevens)。
将会打开以下窗口:

该图显示了字节传输量随时间的变化过程。在本例中,我们可以看到一条连续的对角线,在传输中有一些平稳段。
图中的 Y 轴是序列号,而在图中我写的是数据包/秒图。实际上意思是一样的——图中的每个点指的是一个数据包,当它的值是 TCP 数据包中的第一个序列号时(参见它是如何工作的...本食谱后面的章节)。
在第 10 章、网络层协议和操作中,我们将了解该图表示什么,以及它有助于解决的一些案例。
- 对于文件传输,要测量其吞吐量,只需计算单位时间内传输的字节数,如下图所示:

-
我们可以看到,6 秒钟的传输速率为 350,000 字节,也就是大约 58,000 字节/秒,即 58 千位/秒。
-
默认情况下,“流图”菜单左下角的“拖动”复选框处于选中状态。在这种情况下,您可以上下拖动图形或者左右拉伸 x 轴- y 轴。例如,我们可以使用该功能将图表移动到更靠近 y 轴的位置,以查看特定的值。
当鼠标复选框设置为拖动时,您可以使用 Ctrl +鼠标滚轮来放大和缩小 TCP 流图。
- 当我们选中鼠标复选框右侧的缩放复选框时,我们会将设置更改为缩放。在下一个屏幕截图中,我们可以看到如何将图表放大两次,以获得特定时间段的更多详细信息,在本例中,我们看到的时间点大约在捕获开始后的 16 到 19 秒之间:

- 其他图形配置按钮如下:
- 图表类型(左下角,拖动/缩放复选框的正上方)。您可以在各种类型的 TCP 图之间进行选择(如下图所示):时间/序列(Stevens)、往返时间、吞吐量、时间/序列(tcptrace)、窗口缩放。

它是如何工作的...
时序图(Stevens)是一个简单的图表,它计算一段时间内的 TCP 序列号。由于 TCP 序列号计算 TCP 发送的字节数,所以这些实际上是从一端发送到另一端的应用字节(包括应用头)。
在图中,我们实际上看到了每个数据包的一个点,当该点位于 y 轴上时,在数据包的第一个字节的序列值上,如下图所示:

这个图表(我们将在 TCP 和应用的章节中学习)可以很好地显示应用的行为。例如,斜线表示文件传输良好,而有中断的斜线表示传输有问题。具有高梯度的对角线表示快速数据传输,而低梯度表示低传输速率(当然取决于规模)。
还有更多...
当鼠标被设置到窗口左下角的 drags 选项时,点击一个点会将您带到 capture 窗口中的匹配数据包。正如您在下面的屏幕截图中所看到的,在开始捕获后大约 15.24 秒,在数据包 8119 中传输了一个略高于 872,000 的序列号,然后在开始捕获后 15.35 秒,在数据包 8191 中再次传输:

在下面的截图中,我们可以看到在时序图中点击这两个点的结果。第一个数据包(数据包 8119)在捕获开始后的 15.248 秒时具有序列号 872674:

在下面的屏幕截图中,您可以看到第二个数据包,在开始捕获后的 15.25 秒,具有相同的序列号。当一个序列号自我重复时,这被称为 TCP 重传,将在第 10 章、网络层协议和操作中涉及。

查看图表时,重要的是了解应用是什么。指示一个应用中的问题的图可以是另一个应用的完美网络行为。
通过 TCP 流图-时间/序列(TCP-trace)窗口获取信息
基于 UNIX 的tcpdump命令的 TCP 时间/序列图为我们提供了更多关于我们监控的连接的数据。除了时间序列(Stevens)中的标准序列/秒之外,通过 TCP 时间/序列图,我们还可以获得有关发送的 ack、重新传输、窗口大小和更多细节的信息,这些信息使我们能够分析连接问题。
做好准备
打开现有的捕获,或开始新的捕获。单击捕获文件中的特定数据包。尽管您可以在正在运行的捕获上使用此功能,但它并不意味着用于在线统计,因此建议您启动一个捕获,停止它,然后使用此工具。在这个菜谱中,我们使用示例文件CAP_1674_06_05和CAP_1674_06_14。
怎么做...
要查看 TCP 流图统计信息,请执行以下步骤:
- 单击您想要监控的数据流上的数据包。在本例中,我点击了捕获文件
CAP_1674_06_05上的数据包 100。这就把我们带到了 0 号 TCP 流。
TCP 流显示一个方向图,所以当您单击一个数据包时,它应该在您想要查看统计数据的方向。例如,如果您下载了一个文件,并且想要查看下载统计数据,请单击下载方向上的一个数据包。
-
从“统计”菜单中,选择 TCP 流图时间序列(tcptrace)。
-
将会打开以下窗口。采集文件名称作为副标题列在图表顶部:

- 放大图表,我们会看到以下内容:

-
该图显示了字节传输随时间的进展。我们看到的是以下内容:
- 垂直的蓝色短线表示通过连接发送的数据包。
- 下方的棕色图表显示了为收到的数据包发送的确认。
- 上面的绿线显示了窗口大小。两条线之间的空间——即上面的绿色线和下面的棕色线——表示剩余的 TCP 缓冲区的大小,这使得 TCP 能够继续发送字节。当两条线越来越近并相互接触时,这是一种满窗现象,无法实现更大的数据传输。
-
当我们进一步放大图表时,我们会看到下面的屏幕截图:

在这里,我们可以看到:
- 自捕获开始 75 秒后,发送了几个数据包
- 这些数据包在 75.08 到 75.09 之间得到确认,这大约是它们发送后的 80-90 毫秒
- 我们还看到,空闲接收器窗口大约为 7000 字节,这是在 y 轴上的 271000-264000 个序列
要在数据包捕获窗格中查看这些信息,请单击鼠标|拖动,然后用鼠标单击其中一个点,相关的数据包将在数据包窗格中标记出来:

正如您在数据包窗格中看到的,我们有六个数据包从10.0.0.10发送到172.217.22.80。这些都是同一个 TCP 数据包的数据段,因此它们在很短的时间内被发送,从捕获开始不到 75 秒。紧接着,我们可以看到六个致谢。我们还可以在确认数据包中看到,接收方显示的窗口大小约为 7,000 字节,这是图中上方绿线和下方棕色线之间的距离。
它是如何工作的...
时序(tcptrace)取自 UNIX 的tcpdump命令,它也指接收方发布的窗口大小(这是接收方分配给进程的缓冲区大小),以及重新传输的数据包和 ack。
使用此图为我们提供了大量信息,我们将在以后的网络调试中使用这些信息。该图将使窗口比预期更快变满、过多的重新传输等现象变得明显,这将帮助我们解决这些问题。
还有更多...
在某些情况下,尤其是在高速数据传输中,图表可能看起来像一条完美的直线,但当你放大时,你会发现问题。
在下面的截图中,我们可以看到捕获文件CAP_1674_06_14:

放大显示我们有时间间隙,重新传输和其他问题:

您还可以看到,在一秒钟内,大约传输了 14,000 个序列(字节)——与连接的其余部分相比,这是相当慢的。
bar 是对数据包的指示(它携带初始和最终序列号之间的数据)。不在常规图形中并且看起来好像已经逃离的条是重传,灰色条是重复的 ACK。我们将在下一章的 TCP 分析中了解这些现象。
通过 TCP 流图获取信息–吞吐量窗口
TCP 流图的吞吐量窗口使我们能够查看连接的吞吐量。根据该图,我们还可以根据应用检查不稳定性。
做好准备
打开现有的捕获,或开始新的捕获。单击捕获文件中的特定数据包。尽管您可以在正在运行的捕获上使用此功能,但它并不意味着用于在线统计,因此建议您启动一个捕获,停止它,然后使用此工具。
怎么做...
要查看 TCP 流图统计信息,请执行以下步骤:
-
单击您想要监控的数据流上的数据包。
-
从统计菜单中,选择 TCP 流图|吞吐量图。
-
将会打开以下窗口:

在这里,我们可以看到示例CAP_1674_06_14,流 0。在图表中,我们可以看到以下内容:
- TCP 连接吞吐量。我们在这里看到它大约是 700-800 千比特/秒。
- TCP 数据段长度。这是 TCP 大小。
数据网络中数据单元的正式定义因其所属的 OSI 层而异——帧到第 2 层,例如以太网帧;包到第 3 层,例如 IP 包;段到第 4 层 TCP 数据报到第 4 层 UDP。协议数据单元(PDU)是所有此类单元的统称。在大多数情况下,这些术语是在适当的位置使用的,我在本书中已经尝试这样做了,但是在许多其他情况下,它们之间存在混淆。无论如何,重要的是理解我们正在谈论的是哪一层,不管正式的定义是什么。
这个图似乎没有 TRP 时间/序列图那么有用,但是它仍然可以向我们显示吞吐量的任何突然下降,这可以表明一个问题。
它是如何工作的...
吞吐量图简单地统计了一段时间内的 TCP 序列号,由于序列号实际上是应用数据,因此它给出了以每秒字节数为单位的应用吞吐量。
还有更多...
稳定的文件传输应该类似于中心值,如下图左侧所示。不稳定的文件传输可能看起来像右图,其中吞吐量图上下跳动:

您还可以在 I/O 图中看到吞吐量。需要注意的主要一点是,I/O 图显示了跟踪文件中所有流量在两个方向上的吞吐量,而 TCP 流吞吐量图只显示了一个 TCP 流在一个方向上的吞吐量(基于所选的数据包)。如果您过滤 I/O 图,使其与吞吐量图查看相同的流量,您将看到相同的字节/秒值。
通过 TCP 流图获取信息–往返时间窗口
TCP 流图的往返时间窗口使我们能够查看序列号和它们被确认的时间之间的往返时间。与其他图表一起,它让我们看到了连接的性能。
做好准备
打开现有的捕获,或开始新的捕获。单击捕获文件中的特定数据包。尽管您可以在正在运行的捕获上使用此功能,但它并不意味着用于在线统计,因此建议您启动一个捕获,停止它,然后使用此工具。
在下面的例子中,我们将CAP_1674_06_13文件用于 TCP 流编号 8,它是从数据包 85 开始的 TCP 连接。
怎么做...
要查看 TCP 流图统计信息,请执行以下步骤:
-
单击您想要监控的数据流上的数据包。
-
从统计菜单中,选择 TCP 流图|往返时间图。
-
将会打开以下窗口:

- 在图中,我们可以看到大多数序列号在短时间内被确认,但有一些不稳定性,这将影响 TCP 性能。
- 如果您想在 I/O 图形中看到这个图形,请使用
tcp.analysis.ack_rtt过滤器。 - 要查看序列,以便您可以看到确认较小时间单位的图形进度,请使用鼠标缩放功能。
它是如何工作的...
我们在图中看到的是 TCP 序列号和确认它们所用的时间。这是发送数据包和收到该数据包的 ACK 之间的时间。
还有更多...
您可以在 TCP 数据包下方的“数据包详细信息”窗格中看到tcp.analysis, ack_rtt过滤器的值,如下图所示:

当你看到显示不稳定性的图表时,这不一定是个问题。这很可能就是应用的工作方式。可能需要时间来确认数据包,因为存在问题,或者因为服务器正在等待响应,或者因为客户端只是浏览 web 服务器,而用户正在单击几个新链接。
在 Wireshark v2 中,您可以在窗口左下角的下拉菜单中选择图形类型。
通过 TCP 流图获取信息–窗口缩放窗口
TCP 流图的窗口缩放图使我们能够查看接收方公布的窗口大小,这是接收方处理数据能力的指示。与其他图表一起,它让我们看到了连接的性能。
做好准备
打开现有的捕获,或开始新的捕获。单击捕获文件中的特定数据包。尽管您可以在正在运行的捕获上使用此功能,但它并不意味着用于在线统计,因此建议您启动一个捕获,停止它,然后使用此工具。
怎么做...
要查看 TCP 流图统计信息,请执行以下步骤:
- 单击您想要监控的数据流上的数据包。
- 从统计菜单中,选择 TCP 流图|窗口缩放图。
- 将会打开以下窗口:

在这个图中,我们可以看到不稳定性,是由一边引起的。这可能表示服务器或客户端速度较慢,无法处理收到的所有数据,因此,通过减小接收的窗口大小,它会告诉另一端发送较少的数据。
它是如何工作的...
这里的软件简单地观察连接上的窗口大小并画出它。在第 10 章、网络层协议和操作中,我们将更详细地探讨这一点。
还有更多...
当窗口大小减小时,应用吞吐量也应该减小。窗口大小完全由连接的两端控制,例如客户端和服务器,窗口大小的变化与网络性能没有任何关系。
七、使用专家系统
在这一章中,我们将学习专家系统,这是一个为我们提供更深入的网络现象分析的工具,包括事件和问题。我们将讨论:
- 专家系统窗口以及如何使用它进行网络故障排除
- 错误事件以及我们可以从中了解到什么
- 警告事件以及我们能从中了解到什么
- 记录事件以及我们能从中了解到什么
介绍
Wireshark 最强大的功能之一是能够分析网络现象并提出可能的原因。与其他工具一起,它为我们提供了关于网络性能和问题的详细信息。在本章中,我们将学习如何使用这个工具。在本书的后面,我们将提供使用专家系统和其他工具来查找和解决网络问题的详细方法。
当我们第一次检查网络、通信链路、主机服务器等时,可以使用专家信息选项,我们希望得到网络的第一次填充。在我们进行更深入的分析之前,我们将能够看到是否有可以表明问题的事件。我们应该寻找可以抓住的事件:像 TCP 重传、以太网校验和错误、DNS 问题、重复 IP 等等。
在第一个食谱中,我们将学习如何使用专家信息窗口。在下一个菜谱中,我们将了解您可能会想到的大多数事件的可能原因。
专家系统窗口以及如何使用它进行网络故障排除
专家窗口提供了 Wireshark 发现的事件和网络问题列表。在本食谱中,我们将学习如何启动专家系统,以及如何参考各种事件。
做好准备
启动 Wireshark,开始实时捕获或打开现有文件。
怎么做...
要启动专家窗口,请单击分析菜单;选择专家信息:

将会打开以下窗口:

所有有效的事件都按这个顺序显示(如果有的话):错误、警告、注释等等...
条形右侧的数字显示了该类别中事件的数量。
上方的条形图提供了以下信息:
- 错误:严重的问题可能是以太网校验和错误、格式错误的数据包或协议报头中缺少字段。这些可能是各种类型的格式错误的数据包,如格式错误的 SPOOLSS、GTP 等。它们也可能是错误的校验和错误,例如 IPv4 错误的校验和。在下面的屏幕截图中,您可以看到以太网校验和错误:

单击错误组左侧的小箭头,打开该类别下的错误列表。要在数据包窗格中查看特定数据包,请单击数据包行。
- 警告:警告表示应用或通信中的问题:如 TCP 零窗口、TCP 窗口满、前一个数据段未被捕获、无序数据段以及任何不符合协议行为的问题。你可以在下面的截图中看到这样的例子:

- 注意事项:当 Wireshark 指出某个事件可能会导致问题,但仍在协议的正常行为范围内时,就会出现注意事项。例如,TCP 重新传输将显示在这里,因为即使它是一个使网络变慢的关键问题,它仍然在 TCP 的正常行为下。这里的其他事件有重复 ACK、快速重传等等。在下面的截图中,您可以看到重新传输和重复确认;它们可能表示通信缓慢,但仍然是 TCP 协议的正常行为:

- 聊天:提供通常工作流程的信息,例如 TCP 连接建立请求(SYN)、TCP 连接建立确认(SYN + ACK)、连接重置(RST)、HTTP GET 和 HTTP POST:

- 数据包注释:您可以手动为每个数据包添加注释。这将出现在专家信息窗口的聊天中。
要给数据包添加注释,右键单击它并选择数据包注释....将打开一个窗口,您可以在其中添加或更改您的评论。你可以在下一张截图中看到这一点。

一般操作注意事项:
- 在“专家信息”窗口的底部,您可以选择限制显示过滤器和按摘要分组(默认情况下标记),您还可以搜索事件中的特定单词。
- 要转到 packet capture 窗格中的事件,只需在 expert 窗口中单击事件下的数据包,它就会引导您找到该事件。
值得注意的是,警告事件可能不重要,而记录事件可能会严重影响网络。总是深入问题的细节,看看它是从哪里来的,它的意义是什么。
- 表格右侧的三列表示事件的分组。在下面的截图中,可以看到第一行属于协议 TCP 中的组序列( 1 )。下一行属于组协议。协议是 RPC 浏览器( 2 )。最后标记的事件属于一个序列组;协议是 IPv4 ( 3 )。该组保存来自同一类别的事件,例如,涉及序列参数的序列事件,并且它指示事件发生在哪个协议上。

它是如何工作的...
专家信息窗口是一个专家系统,它为我们提供有关网络问题的信息,在某些情况下还提供可能的原因建议。虽然它给出了合理的结果,但总是要验证它的发现。
在有些情况下,Wireshark 发现的问题并不是真实的问题,反之亦然,在有些情况下,Wireshark 不会显示存在的真实问题。
不要忘记,最好的故障排除工具是你的大脑(和你的网络知识!).Wireshark 是一个非常智能的工具,但它仍然只是一个工具。
可能是您在数据传输期间开始了捕获,因此您会看到以前的数据段丢失消息或更复杂的问题。),您只捕获了部分数据。Wireshark 称它为完整的数据流,并向您显示许多错误。我们将在本书的后面看到这些问题的许多例子。
还有更多...
专家严重性也可以通过显示过滤器过滤并显示在数据包窗格中。要根据显示过滤器查看事件:
- 选择显示过滤器窗口右侧的表达式。
- 向下滚动以获得专家消息(您只需输入工作专家即可到达)。
- 如下图所示,您将获得以下过滤器—
expert.message、expert.group和expert.severity:

前面的过滤器解释如下:
expert.group指的是专家消息组,例如校验和错误组、序列组、格式错误组等。expert.message是指特定的消息。例如,在这里,您可以配置一个过滤器来显示包含或匹配特定字符串的消息。expert.severity是指具有特定严重性的消息,即错误、警告、注意等。
您也可以右键单击特定事件,如下图所示,您将看到以下菜单:

在这里,您可以:
- 选择引用此事件的显示过滤器并应用它
- 选择一个引用此事件的显示过滤器,并只准备它
- 在数据包窗格中找到特定的数据包
- 为事件配置着色规则
- 在互联网上查找事件信息
- 复制事件文本
请参见
- 第八章、以太网和局域网交换和协议章节
错误事件以及我们可以从中了解到什么
在这个菜谱中,我们将深入研究错误和事件类型、校验和错误、格式错误的数据包以及其他类型的错误。
做好准备
开始捕获,或打开现有文件并启动专家系统。
怎么做...
- 从分析菜单中,打开专家信息。窗口顶部列出了错误:

在前面作为示例提供的窗口中,您可以看到校验和错误;在这种情况下,可能是因为真正的错误或卸载。
- 单击特定错误会将我们带到数据包窗格,以查看数据包本身的错误。这在下面的截图中有所呈现:

您在此事件中看到的是校验和错误,并且校验和不正确。在这种情况下(文件CAP_07_05),我们看到所有错误都来自单个器件,这是一个很好的起点,可以开始查看问题来自哪里。关于以太网和以太网错误的更多信息,请参见第 8 章、以太网和局域网交换。
它是如何工作的...
校验和是一种错误检查机制,它使用数据包中插入的一个字节或一系列字节来实现帧验证算法。错误检查算法的原理是计算整个消息(第 4 层)、数据包(第 3 层)或帧(第 2 层)的公式。他们将结果插入包内的字节中,当包到达目的地时,他们再次计算它。如果我们得到相同的结果,这是一个好的数据包,如果不是,有一个错误。可以在整个分组上或者仅仅在报头上计算误差校验机制;这取决于协议。
卸载机制是在将 IP、TCP 和 UDP 校验和传输到网络之前,在 NIC 上对其进行计算的机制。在 Wireshark 中,这些会显示为错误数据包,因为 Wireshark 会在数据包发送到网络适配器之前将其捕获;因此,它将看不到正确的校验和,因为它还没有被计算。
因此,尽管看起来像是严重的错误,但在许多情况下,校验和错误是 Wireshark 的错误配置。如果您在从您的 PC 发送的数据包上看到许多校验和错误,这可能是因为卸载。
要取消校验和验证:
- 对于 IPv4,当您看到许多校验和错误,并且您确定它们是由于卸载造成的,请转到编辑|首选项,然后在协议| IPv4 下,取消选中单选按钮:如果可能,验证 IPv4 校验和
- 对于 TCP,当您看到许多校验和错误,并且您确定它们是由于卸载造成的,请转到编辑|首选项,然后在协议| TCP 下,取消选中单选按钮:如果可能,验证 TCP 校验和
还有更多...
对于格式错误的数据包,这可能是 Wireshark 错误或真正的格式错误数据包。使用其他工具来隔离问题。可以在 Wireshark 网站上报告可疑的错误。
当您看到许多校验和错误的格式错误的数据包时,可能是因为卸载或解析器错误。任何种类的超过 1%-2%的错误的网络将导致许多其他事件(例如,重新传输),并且将变得比预期慢得多;因此,一个正常运行的网络不可能有高错误率!
请参见
- 第八章、以太网和局域网交换和协议章节
警告事件以及我们能从中了解到什么
如前所述,警告事件表明应用或通信中存在问题。在本食谱中,我们将描述这一类别中的主要事件。
做好准备
开始捕获,或打开现有文件并启动专家系统。
怎么做...
-
从分析菜单中,打开专家信息。
-
警告事件将从顶部第二个显示。如果没有错误事件,那么警告将排在第一位。你可以在下一张截图中看到一个例子(文件
CAP_07_04):

您将在这里看到几个事件类别:
- 有关特定事件的详细信息,请右键单击该事件,然后选择查找。这将把你带到互联网上的相关页面。
它是如何工作的...
Wireshark 监视被监控数据包的参数:
- 它监视 TCP 窗口大小,并检查窗口大小是否减小到零
- 它会查找乱序的 TCP 数据包(数据段),即它们是在预期时间之前还是之后发送的
- 它查找未发送的 TCP 数据包的 ack
这些参数以及许多其他参数为您提供了查找网络问题的良好起点。我们将在第十一章、传输层协议分析中了解它的细节。
还有更多...
不要忘记,警告事件是 Wireshark 指的非关键事件,但不是协议的正常行为。在这里,你有这样的事件:
- TCP 重置:它们是 TCP 协议的一部分,但是连接应该以 TCP FIN 而不是 TCP 重置结束。因此,在这种情况下,这可能是由于一个问题,或者只是因为 TCP 开发人员选择了以这种方式关闭连接。
- TCP 零窗口:对连接上的慢端设备的指示;这里我们看到了协议的另一种行为,这可能是由于连接的一端出现了问题,但这仍然是 TCP 的工作方式。
像未知标题、BER 错误:标记类型中的错误标记等消息。这些消息表明数据包结构中存在问题。就像各种错误和事件一样,重要的是理解它,而不是类别或颜色。
请参见
- 第八章、以太网和局域网交换和协议章节
记录事件以及我们能从中了解到什么
如前所述,当 Wireshark 指出某个事件可能会导致问题,但仍在协议的正常行为范围内时,该事件将属于注释类别。例如,TCP 重新传输将显示在注释栏下,因为即使它是一个使网络变慢的关键问题,但它仍在 TCP 的正常行为下。
做好准备
开始捕获,或打开现有文件并启动专家系统。
怎么做...
- 从分析菜单中,打开专家信息。
- “注释”事件在“专家信息”窗口中从顶部数第三个出现:

您将在这里看到几个事件类别:
其他事件将在相关的 TCP 和应用章节中讨论。
发现广播和错误风暴
通信网络中最常见和最麻烦的问题之一是广播/多播和错误风暴。发生这些问题的原因可能是第 2 层环路、基于第 2 层的攻击、有问题的网络适配器或向网络发送数据包的应用或服务。在这一章中,我们将提供一些基本的方法来发现、隔离和解决这些类型的问题。
广播/组播风暴是指你每秒钟收到几千甚至几万个这样的数据包。在大多数情况下,它会耗尽带宽并完全锁定网络。
它是如何工作的...
Wireshark 监视被监控数据包的参数:
- 它监视 TCP 序列号和确认号。它检查重新传输以及其他排序问题。
- 它寻找来自远程网络的值为 1 的 IP 生存时间,并告诉你这是一个问题。
- 它寻找保活;这可能是正常情况,但也可能表示有问题。
这些参数以及许多其他参数为您提供了一个寻找网络性能问题的良好起点。
还有更多...
这里看到的许多症状可能是几种问题的征兆。例如,由于错误导致数据包丢失,或者由于恶劣的网络条件(低带宽或高延迟)导致数据包不能按时到达,数据包可能会被重新传输。也可能是因为服务器或客户端没有响应。专家信息系统会给你症状。怎么解决问题?我们将在本书的后面学习。
请参见
- 第八章、以太网和局域网交换和协议章节
八、以太网和局域网交换
在本章中,我们将讨论以下主题:
- 发现广播和错误风暴
- 分析生成树协议
- 分析 VLAN 和 VLAN 标记问题
介绍
在本章中,我们将重点讨论如何发现和解决基于第 2 层的问题,重点是基于以太网的问题,如广播/组播事件、错误以及如何找到问题的根源。我们还将关注 LAN 协议,如生成树和 VLAN。
这些问题需要在我们进入第 3 层、第 4 层和应用层之前解决,因为第 2 层的问题会反映在上层协议中。例如,第 2 层中的数据包丢失将导致 TCP(第 4 层协议)中的重新传输,并导致应用变慢。
做好准备
当出现这些问题时,您通常用来解决问题的网络会非常慢,或者已经停止工作。?
需要记住的一些重要事实:
- 路由器不会转发广播。
- 广播不在 VLAN 之间转发(这就是 VLAN 被称为广播域的原因),所以每个 VLAN 本身就是一个广播域。
- LAN 交换机不会转发错误数据包,例如 CRC 错误的数据包、小于最小 64 字节的数据包等等。
- 除非另行配置,否则组播通过交换机转发。
- 仅当路由器被配置为这样做时,组播才通过路由器转发。
- 每个网络都传输合理数量的广播。这就是网络的工作方式,但是高比率的广播/组播可能是一个问题。
- 广播/组播被转发到交换机或路由器的控制平面/CPU,如果它被配置为这样做或启用了第 3 层功能。这可能导致操纵面不稳定(例如,OSPF 邻接襟翼)。
广播太多和广播风暴是有区别的。太多的广播(例如,每秒几百次)会使网络负载过重,但在大多数情况下,用户不会注意到。广播风暴会完全封锁网络。确定网络中广播数据包百分比的基线非常重要,以便在故障排除过程中用作数据点。
怎么做...
要找出问题的来源,请执行以下步骤:
- 由于网速慢是用户感觉到的一个问题,所以先问以下问题:
- 这个问题是在总部还是在某个分支机构?
- 这是通过网络还是在特定的 VLAN?
- 这是在大楼上方还是在特定楼层?
当然,不要问用户关于 VLANs 的问题;用户不是网络专家。询问他们在他们的小组、部门等中运行的应用,以了解问题的范围。
在一个组织网络中,VLAN 通常将按部门(或几个部门)和按地理区域(或几个区域)甚至按组织功能来配置;例如,人力资源 VLAN、财务 VLAN、特定软件的用户 VLAN 等等。通过询问问题是否与这些角色之一有关,你将能够缩小到你需要寻找问题的区域。
- 下一个问题应该是一个微不足道的问题:网络还在工作吗?在广播/组播风暴中,网络会变得非常慢;在大多数情况下,应用将停止运行。在这种情况下,您会遇到以下典型问题:
- 生成树问题
- 产生广播的装置
- 路由环路(在第 10 章、网络层协议和操作中讨论)
我经常被问到的问题是:多少次广播才算多?
这个问题当然有几种答案。这取决于网络设备在做什么,以及在这些设备上运行的协议。
合理的广播次数应该是每分钟每台设备 1-2 次到 4-5 次。例如,如果您的网络是由一台 VLAN 上的 100 台设备构建而成,则每秒钟的广播次数不应超过 5-10 次(5 次广播 x 100 台设备每分钟可广播 500 次,即每秒大约 9-10 次)。只要它们不是成千上万、来源不明,超过这个数字也是合理的。
生成树问题
在生成树问题中,你会得到每秒数千甚至数万次广播(参考它是如何工作的...本食谱中的一节知道为什么)。在这种情况下,您的 Wireshark,可能还有您的笔记本电脑,将会冻结。关闭 Wireshark,开始断开冗余电缆以隔离问题(几乎使网络层 2 环路空闲),并检查交换机中的 STP 配置。
产生广播的装置
特定设备产生的典型广播风暴具有以下特征:
- 每秒大量的广播(数千甚至更多)
- 在大多数情况下,广播将来自单一来源;但是在攻击的情况下,它们可能来自多个来源
- 通常以恒定的包/秒速率,即帧之间的间隔几乎相等
让我们看看如何根据前面列表中提到的参数在接下来的三个截图中找到广播风暴。
在下面的屏幕截图中,我们看到大量广播数据包从源 MAC(惠普网络适配器)发送到ff:ff:ff:ff:ff:ff:

图 8.1:广播泛滥
如前面的屏幕截图所示,time 列以秒为单位进行配置(这意味着两个连续数据包的时间戳之间的差值将以秒为单位进行报告)。您可以通过导航至视图|时间显示格式进行配置。
可以通过导航到统计| IO 图来查看数据包的速率。下面的屏幕截图显示广播数据包的速率为每秒 5,000 个数据包:

图 8.2:广播泛洪:I/O 图
通过导航到统计|对话选项,我们可以从以太网、IPv4、TCP/UDP 的角度查看设备之间的对话。在以下屏幕截图的上半部分,我们可以看到两个 MAC 地址之间的大量广播,而屏幕截图的下半部分报告了相同的转换,但从 IPv4 地址的角度来看。总之,在 18 秒的持续时间内捕获了 87,142 个广播数据包。

图 8.3:广播泛滥:对话
在前一个案例中,问题是由一个叫做 SMB 邮件槽协议的服务引起的。简单的试错法找出这项服务是什么,并在电台上禁用它,解决了广播风暴问题。
注意这一点很重要:当您禁用一个服务(尤其是属于操作系统的服务)时,请确保系统继续运行并保持稳定。在核实之前不要离开现场!
此外,我建议您再次运行 Wireshark,以确认没有看到广播泛滥。
固定模式广播
您还可以按固定模式进行广播,例如,每隔固定时间进行一次广播,如下图所示:

图 8.4:固定模式广播
该图针对 1 分钟的刻度间隔(在 X 轴下)和以下过滤器进行了配置:
- 网络中所有广播的红色过滤器(
eth.addr ==ff:ff:ff:ff:ff:ff) - ARP 请求广播的绿色过滤器(
arp.opcode ==1)
我们在这里看到的是,大约每 5 分钟就有一次 ARP 请求的爆发(绿点)。如果我们单击图中的一个点,它会将我们带到捕获窗格中的数据包。
在下面的屏幕截图中,我们看到了每 5 分钟发生一次的扫描模式:

图 8.5: ARP 扫描
我们可以看到,扫描内部网络的是 d-link 路由器(基于源 MAC 地址)。这可能是好的也可能是坏的,但是检查我们的网络中正在运行什么是好的。
它是如何工作的...
IPv4 网络中的广播非常常见,这些第 3 层广播将通过第 2 层广播发送。每当第 3 层设备向网络发送广播(目的地是子网的广播地址;参见第 10 章、网络层协议和操作,了解更多信息),它将被转换为所有 fs 目的 MAC 地址。
您将在基于 IP 的网络中看到几类广播。其中一些如下:
- 基于 TCP/IP 的网络协议,如 ARP 请求、DHCP 请求等
- 网络协议,如 NetBIOS 名称服务 ( NBNS )查询、 NetBIOS 服务器消息块 ( SMB )公告、网络时间协议 ( NTP )等
- 发送广播的应用,如 Dropbox、Microsoft 网络负载平衡等
在 IPv6 中,我们没有广播,但是我们有单播、多播和任播。由于该协议与发现机制、公告和其他机制的多播一起工作,我们将会看到很多这样的机制。
还有更多...
我在许多情况下遇到的一个问题是如何在局域网交换机中使用广播和多播风暴控制定义(Cisco 设备中的风暴控制广播级别【高级】【低级】命令)。问题是,在许多情况下,我看到的配置将广播次数限制在每秒 50、100 或 200 次,而这还不够。在网络中,您可以安装一个软件,向网络发送跨越这些值的广播或组播。然后,根据您在交换机中的配置,它将开始向管理系统发送陷阱,生成系统日志消息,甚至断开端口(Cisco devices 中的风暴控制操作 {shutdown | trap} 命令)。
解决这个问题的方法是简单地配置高等级的广播作为阈值。当一场广播风暴发生时,你会得到成千上万的广播;因此,配置每秒 1,000 到 2,000 次广播或多播的阈值水平,可以为您提供相同的保护级别,而不会对正常的网络操作造成任何干扰。
如果您对风暴控制的高阈值水平不满意,那么您应该审核网络流量,以确定终端站在高峰工作时间发送广播的速率,并使用该数据来设置适当的阈值。
请参见
- 有关 IPv4 的更多信息,请参见第 10 章、网络层协议和操作
分析生成树问题
我们都用过,或者至少听说过生成树协议 ( STP )。我之所以称这个方法为分析生成树问题是因为它有三个主要版本,如下所示:
- STP:这是 1998 年的 IEEE 802.1D 标准,称为 802.1D-1998
- 快速生成树协议(RSTP) :这是 2001 年的 IEEE 802.1W 标准,后来添加到 802.1D 中,称为 802.1D-2004
- 多生成树(MST) :这最初是在 IEEE 802.1S 中定义的,后来合并到 IEEE 802.1Q 中
还有一些思科和其他厂商的专有版本。在本菜谱中,我们将重点介绍标准版本,并学习如何解决在 STP/RSTP/MST 作业中可能出现的问题。
做好准备
发现 STP 问题的最佳方法是登录到 LAN 交换机,使用供应商的命令(例如,Cisco IOS 或 Juniper JUNOS CLI)来发现并修复问题。如果您在网络设备上正确配置了 SNMP,您将在管理控制台上获得所有消息,除非 STP 问题以某种方式导致交换机与管理系统通信出现问题。
本指南的目的是展示如何使用 Wireshark 来实现这一目的,尽管我们仍然建议将其作为实现这一目的的二线工具。因此,只需打开您的笔记本电脑,启动 Wireshark,并开始捕获局域网上的数据。
怎么做...
关于 STP,网络中有几点需要注意:
- 网络上运行的是哪个 STP 版本?
- 拓扑结构有变化吗?
网络上运行的是哪个 STP 版本?
Wireshark 将通过查看网桥协议数据单元(bpdu)为您提供网络上运行的 STP 类型(STP、RSTP 或 MST)的版本。BPDUs 是在交换机之间组播的更新帧。
协议版本有:
- 对于 STP,协议版本 ID 等于 0
- 对于 RSTP/MST,协议版本 ID 等于 3
在标准中,你不会发现开关这个词;它将永远是网桥或多端口网桥。在本书中,我们将使用术语网桥和交换机。
拓扑变化太多了吗?
当您监控 STP 运行时,您可能会担心许多拓扑变化。拓扑变化在 STP 中是正常的,但是过多的拓扑变化会对网络性能产生影响,因为它可能会导致 MAC 地址老化,从而导致未知的单播泛洪。
当新设备连接到网络或从网络断开时,就会发生拓扑变化。您可以在下面的屏幕截图中看到拓扑变化:

图 8.6: STP:拓扑变化
当您看到过多的拓扑变化时,连接到不支持 STP 的主机(通常是用户频繁开关电源的终端站)的 LAN 交换机端口应配置端口快速功能(适用于 Cisco 交换机;对于其他供应商,请查阅供应商手册)。
在旧的 STP (IEEE 802.1d)中,将设备连接到交换机端口后,交换机大约需要一分钟来启动和转发数据包。当客户端试图在这段时间内登录到网络服务器,或者通过 DHCP 请求 IP 地址时,这可能是一个问题。端口快速功能强制端口在几秒钟内(通常是 8 到 10 秒)开始转发,以防止这类问题。
如果拓扑结构继续变化,请检查问题可能是什么以及是谁造成的。请注意,尽管大多数拓扑变化源自连接到终端站的端口,但也可能是由于两台交换机之间的链路抖动造成的。
它是如何工作的...
STP 可以防止局域网中出现环路。如果您使用多种连接方式连接两台或更多交换机,可能会发生环路,如下图所示:

图 8.7:生成树:环路是如何形成的
让我们看看循环是如何创建的:
- 站 A 向网络发送广播。广播可以是 ARP、NetBIOS 或任何其它目的 MAC 地址中全是 fs 的数据包。
- 由于广播被转发到交换机的所有端口, SW1 从端口 1 接收广播,并将其转发到端口 2 和 3。
- SW2 和 SW3 将把数据包转发到它们的其他端口,这些端口将把它们送到 SW4 的端口 2 和 3 。
- SW4 将来自端口 2 的数据包转发到端口 3 ,来自端口 3 的数据包转发到端口 2 。
- 我们将得到两个无休止循环的数据包——一个已被转发到端口 3 (红色箭头)和一个已被转发到端口 2 (绿色箭头)的 SW1 。
- 根据交换机转发速度的不同,我们会得到多达数万个数据包,这些数据包会完全阻塞网络。
STP 通过简单地构建树形拓扑,即定义无环拓扑来防止这种情况发生。在出现故障的情况下,链路被断开并恢复服务。
在下图中,我们可以看到我们最初是如何通过多个连接来连接所有交换机的,以及 STP 是如何创建树的:

图 8.8:生成树:原始拓扑与树形拓扑
BPDUs 是使用第 2 层组播在 LAN 交换机之间交换的更新帧。首先,在以太网层,如下面的屏幕截图所示,数据包将从发送更新的交换机的源 MAC 进行组播:

图 8.9:生成树源和目的 MAC 地址
BPDU 由以太网 802.3 帧承载,其格式如下图所示:

图 8.10:生成树 BPDU 以太网帧格式
在下表中,您可以看到 STP 帧中的字段:
| 字段 | 字节 | 什么事? | 值 | 显示过滤器 |
| 协议 ID | Two | 协议标识符 | 总是 0 | stp.protocol |
| 版本 | one | 协议版本 | 对于 STP = 0 对于 RSTP = 2 对于 MST = 3 | stp.version |
| 消息类型 | one | BPDU 类型 | 对于 STP = 0 对于 RSTP = 2 对于 MST = 2 | stp.type |
| 旗帜 | one | 协议标志 | 在上图中 | stp.flags |
| 根 ID | eight | 根标识符(根 ID),即与网桥硬件地址(MAC)连接的网桥优先级 | 根桥的 MAC 地址 | stp.root.prio、stp.root.ext和stp.root.hw |
| 根路径开销 | four | 到根交换机的路径开销 | 由生成树计算的路径开销。如果这是根,路径开销将为零。 | stp.root.cost |
| 网桥 ID | eight | 网桥标识符(网桥 ID),即与网桥硬件地址(MAC)连接的网桥优先级 | 网桥 MAC 地址 | stp.bridge.prio、stp.bridge.ext和stp.bridge.hw |
| 端口 ID 2 | Two | 端口标识符 | 发送更新的端口的标识符 | stp.port |
| 信息时代 | Two | 消息年龄字段指示自从网桥发送当前配置消息所基于的配置消息以来已经过去的时间量 | 对于每个 BPDU,发送帧的网桥发送一个值 0,每个网桥增加 1 转发它 | stp.msg_age |
| 最大值时间 | Two | 最大年龄,即帧可以在网络中停留的最长时间(实际上是网桥的数量) | 通常 20 秒 | stp.max_age |
| 你好时间 | Two | BPDUs 之间的时间 | 通常是 2 秒 | stp.hello |
| 向前延迟 | Two | 转发延迟字段指示拓扑变化后,网桥在转换到新状态之前应该等待的时间长度 | 通常 15 秒 | stp.forward |
注意,在 MST 的情况下,将为 MST 参数添加一个额外的头。
港口国
在 STP 中,端口状态如下:
- Disabled :在这种状态下,没有帧被转发,也听不到 BPDUs
- 阻塞:在这种状态下,没有帧被转发,但是 BPDUs 被监听
- 监听:在这种状态下,没有帧被转发,但是端口监听帧
- 学习:在这种状态下,没有帧被转发,但是 MAC 地址被交换机学习
- 转发:在这种状态下,帧被转发,MAC 地址被交换机学习
当您将设备连接到 LAN 交换机时,端口会经历这些阶段,所需时间如下:
- 从屏蔽到监听需要 20 秒
- 从听到学需要 15 秒
- 从学习到转发需要 15 秒
在 RSTP 和 MST,港口州如下:
- 丢弃:在这种状态下,帧被丢弃
- 学习:在这个帧中,没有帧被转发,MAC 地址被捕获
- 转发:帧被转发,MAC 地址被捕获
根据网络拓扑和复杂性,从丢弃到转发的整个端口状态转换应该需要几秒钟。
还有更多...
对于生成树调试,最好的方法是从直接连接到 LAN 交换机的连接中获取数据。一个配置良好的管理系统 SNMP 陷阱也有助于完成这项任务。
STP 数据包的一些示例如下:
在下面的截图中,您可以看到一个 STP 帧。你可以看到源 MAC 地址是一个北电地址,在 BPDU 本身中,根和网桥标识符是相等的;这是因为发送数据包的网桥是根网桥。端口 ID 是8003,在北电交换机中表示端口号 3。

图 8.11:从根交换机生成 BPDU 树
在下面的截图中,你可以看到一个快速的 STP BPDU。您可以看到,协议标识符等于 2,端口状态为指定状态。

图 8.12:生成树 BPDU 参数
在前面的截图中,您可以看到 MST 的示例。在这里,我们看到 MST 扩展紧跟在标准 STP 帧之后。

图 8.13: MST BPDU 和扩展
分析 VLAN 和 VLAN 标记问题
VLAN,即虚拟局域网,是一种将局域网划分为独立局域网的机制,即使它们共存于同一物理基础设施中,它们之间也没有任何直接通信,这就是虚拟这个名称的由来。在本节中,我们将了解监控 VLAN 流量的方法。
本指南的目的是向读者简要介绍如何使用 Wireshark 解决 VLAN 问题。解决相关问题的一个更简单的方法是使用供应商的 CLI (Cisco IOS、Juniper JUNOS 等)来实现此目的。
做好准备
在本食谱中,我们将讨论两个问题:
- 如何监控 VLAN 内的流量?
- 如何查看通过 VLAN 标记端口的标记帧?
在第一种情况下,需要简单的配置。在第二种情况下,有一些要点需要注意。
在 VLAN 上捕获时,您不一定会看到数据包中的 VLAN 标签。您是否会看到 VLAN 标签的问题实际上取决于您正在运行的操作系统,以及您的网络接口卡 ( NIC )和 NIC 驱动程序是否支持该功能。
您的操作系统和网卡是否支持 VLAN 标记完全取决于操作系统和网卡供应商。去供应商的手册或谷歌上找答案。
在下图中,您可以看到带有 VLANs 的典型拓扑。上层交换机通过两条中继(标记以太网帧的端口)连接到下层交换机。在此网络中,您有 VLANs 10、20 和 30,而连接到每个 VLAN 的 PC 将无法看到来自其它 VLAN 的 PC。

图 8.14: VLAN 标签
怎么做...
将 Wireshark 连接到您要监控的交换机。让我们看看前面的配置(如上图所示)。
监控 VLAN 内的流量
为了监控整个 VLAN 的流量:
- 将您的笔记本电脑连接到中央交换机和其中一个端口。
- 配置从受监控的 VLAN 到您所连接的端口的端口镜像。例如,如果您将笔记本电脑连接到 SW1 端口 4 ,并且您想要监控来自 VLAN10 的流量,命令将会是(在 Cisco 中):
Switch(config)#monitor session 1 source vlan 10Switch(config)#monitor session 1 destination interface fastethernet0/4
这将显示从 VLAN10 通过中央交换机 SW1 转发的流量。
有关如何在各种供应商网站上配置端口镜像的更多信息,请搜索 SPAN(在 Cisco 中)、port mirror 或 mirroring (HP、Dell、Juniper 等)。在监控刀片中心的流量时,通常只能监控物理端口上的流量;但是,有些应用使您能够监控刀片式服务器上特定服务器的流量(例如,Cisco Nexus 1000V)。
查看通过 VLAN 标记端口的标记帧
监控标记的流量不是一项简单的任务。使用 Wireshark 捕获数据时是否会看到 VLAN 标签取决于您的网络适配器、运行该适配器的驱动程序以及它们对 VLAN 标签的处理。
验证您的笔记本电脑能否捕获标记帧的最简单方法如下:
- 开始用端口镜像捕获标记的端口。如果您看到标签,请继续工作。
- 如果您没有看到任何标签,请转到适配器配置。在 Windows 7 中,您可以通过单击开始,然后导航到控制面板|网络和互联网|查看网络状态和任务|更改适配器设置|本地连接。接下来,执行以下屏幕截图中所示的步骤:

图 8.15:启用优先级和 VLAN
配置适配器的优先级并禁用 VLAN。这将移动 WinPcap 驱动程序和 Wireshark 的标记
在前面的截图中,我们看到了一个带有 Realtek 网卡的联想笔记本电脑示例。该图给出了一个流行设备上的示例,但在其他笔记本电脑或服务器上可能会有所不同。原理应该是一样的:通过提取 VLAN 标签禁用适配器,以便它将被转发到 WinPcap 驱动程序并呈现在 Wireshark 上。
它是如何工作的...
标签是添加到数据包中的小段数据,目的是向数据包中添加 VLAN 信息。标签是一个 4 字节长的字符串(32 位),如下图所示。大多数网络适配器及其驱动程序会简单地将 VLAN 标签传递给上层来处理它们。在这些情况下,Wireshark 会看到 VLAN 标签并显示出来。在更复杂的适配器和驱动程序中,VLAN 标签将由适配器本身处理。这包括一些最常见的英特尔和 Broadcom 千兆位芯片组适配器。在这些情况下,您必须禁用 VLAN 功能。

图 8.16: VLAN 标记和网络适配器
在配置网卡驱动程序时,为了确保它不会处理 VLAN 标签,数据包将被简单地转发到 WinPcap 驱动程序并由 Wireshark 显示。

图 8.17: VLAN 标签
在下面的屏幕截图中,您可以看到一个标记帧的示例;该帧标有 VLAN ID = 20:

图 8.18:带有 VLAN 标签的数据包
还有更多...
Wireshark 也将捕获双标签,就像 802.1ad 标准一样。这些标签被称为服务标签,添加在服务提供商边缘,以便区分提供商和客户标签。提供商标签称为 S 标签(802.1ad),客户标签称为 C 标签(802.1Q)。它也被称为 QinQ 机制。
请参见
- 有关 WinPcap 的更多信息,请访问 WinPcap 主页,网址为http://www.winpcap.org/
- 有关 UNIX/Linux 库的更多信息,请参考位于http://www.tcpdump.org/的 tcpdump 主页
九、无线局域网
在本章中,我们将了解:
- 无线网络和标准简介
- 无线电问题、分析和故障排除
- 捕获无线局域网流量
学到的技能
本章结束时,读者将能够分析无线局域网流量,并诊断用户报告的连接和性能问题。
无线网络和标准简介
无线网络在过去十年中变得非常流行,现在它是我们的小工具保持连接所需的最重要的连接之一。概括地说,无线网络可以有以下几种类型:
- 无线个人区域网(WPAN) :无线设备之间的距离在 5-10 米之内,可以临时搭建
- 无线局域网(WLAN) :无线设备之间的距离不超过 100 米
- 无线城域网(WMAN) :无线设备之间的距离不超过 100 米,距离不超过 5 公里(3.1 英里),通常覆盖郊区或城镇

图 9.1:无线网络的类型
让我们快速浏览一下各种 WLAN 标准。自 20 世纪 90 年代中期以来,IEEE 802.11 委员会一直在开发无线局域网标准,并已发布了从 802.11b 到 802.11ac 的若干标准,如下所示:
| 标准 | 802.11b | 802.11a | 802.11g | 802.11n | 802.11ac |
| 年 | One thousand nine hundred and ninety-nine | One thousand nine hundred and ninety-nine | Two thousand and three | Two thousand and nine | Two thousand and thirteen |
| 频率 | 2.4ghz | 5 千兆赫 | 2.4ghz | 2.4 / 5 千兆赫 | 5 千兆赫 |
| 通道数量 | three | <=24 | three | 动态的 | 动态的 |
| 传输技术 | DSSS | 正交频分多路复用技术(Orthogonal Frequency Division Multiplexing 的缩写) | DSSS /正交频分复用 | 正交频分多路复用技术(Orthogonal Frequency Division Multiplexing 的缩写) | 正交频分多路复用技术(Orthogonal Frequency Division Multiplexing 的缩写) |
| 数据速率(Mbps) | 1, 2, 5.5, 11 | 6, 9, 12, 18, 24, 36, 48, 54 | 6,9,12,18,24,36,48,54 - OFDM | <= 450 | 1300(第一波),6930(第二波) |
了解 WLAN 设备、协议和术语
了解无线电基础知识和各种 WLAN 设备非常重要,这样有助于了解用户报告的问题并排除故障。
接入点
无线 LAN 网络基于接入点(AP)——允许无线站/设备(称为 STA)连接到它并进而连接到有线网络的硬件。AP 通常连接到上游交换机/路由器。
无线局域网控制器(WLC)
一个无线局域网控制器 ( WLC )是一个硬件,它使用 IEEE CAPWAP(无线接入点的控制和供应)协议与大量轻量级接入点进行通信和管理,该协议基于思科的轻量级接入点协议 ( LWAPP )。CAPWAP 在接入点和控制器之间传输控制流量(DTLS 加密)和数据流量(DTLS 加密可选)。
AP 可以以独立模式或集中模式部署。
- 单机:顾名思义,这种模式下,AP 是单独部署和维护的。这是中小型企业中最常见的部署类型,只需要几个接入点。

图 9.3:独立模式下的无线接入点
- 集中式:在这种模式下,大量接入点由无线局域网控制器管理其设备配置、安全/策略设置、软件/固件更新等。AP 和控制器之间的连接可以通过第 2/3 层网络。如前所述,接入点由使用 CAPWAP 协议的无线控制器管理,该协议处理数据和控制流量。

图 9.4:集中模式下的无线接入点
对无线局域网设备有了基本的了解后,让我们再来看几个无线领域中使用的术语:
- STA: 使用服务的无线站或客户端
- AP :为客户端提供无线服务的设备
- DS:分布,连接接入点的局域网
- BSS : 基本服务集 ( BSS ),或者具有相同媒体特性(例如,射频和调制方案)的无线设备单元
- ESS : 扩展服务集 ( ESS ),或同一逻辑网段内基本服务集的逻辑单元(如 IP 子网和 VLAN)
为了更好地理解这些术语,请参考下图:

图 9.5:无线局域网分布和服务集
无线电问题、分析和故障排除
做好准备
当用户抱怨 Wi-Fi 网络没有连接或连接很差时,请带着您的笔记本电脑尽可能靠近用户的位置,并验证您是否有 Wi-Fi 网络。
怎么做...
要找出问题的来源,请执行以下步骤:
- 用户的无线连接很差还是完全没有连接?
- 无线连接性差的问题是出现在楼层/建筑的不同部分,还是只出现在楼层/建筑的特定部分?
零无线连接
如果用户的连接为零,则访问并检查覆盖受影响区域的接入点(以独立模式运行)的状态和运行状况。
如果 AP 由控制器集中管理,那么它们的用户界面(GUI)应该提供检查 AP 的状态、它们的健康状况,特别是它们提供服务的 SSIDs 的方法。从下面的屏幕截图中,我们可以看到 Cisco 无线控制器报告了 AP 的数量、它们的正常运行时间等等。

图 9.6:思科无线控制器接入点列表和状态
请注意,接入点发现控制器、加入无线域和下载配置/策略有一个过程。我建议参考特定供应商的故障排除文档来诊断和解决问题。
如果控制器的用户界面中缺少 AP,则它们之间可能存在连接问题。通过数据包捕获排除接入点和控制器之间的连接问题与排除网络中两台电脑之间的连接问题是一样的。
请注意,并非所有 SSIDs 都由 AP 广播。因此,如果用户抱怨看不到特定的 SSID,这可能是由于 AP 没有广播它们。如果是这样,那么尝试使用用户名/密码凭证手动加入特定的 SSID。
无线连接不良或断断续续
如果用户报告间歇性连接和性能不佳,请执行以下步骤。
基本工具就在笔记本电脑中(正如我们在下面的屏幕截图中所看到的),在那里您有第一个指示:
- 信号强度,也称为接收信号强度指标()
*** 接入点 ID,即服务集标识 ( SSID )* 使用的安全协议* 无线电类型(802.11n,如截图所示)**
**
图 9.7:电脑中的 Wi-Fi 网络和细节
一旦确认用户所在位置有合适的 Wi-Fi 网络,请使用专用软件(例如,免费版的 Acrylic Wi-Fi、Windows 版的 Homedale、Apple Mac 版的 NetSpot 或 macOS 无线诊断工具)。因此,您会发现可用的网络、信号强度、信道、链路质量以及更多细节。这将提供当地可用 Wi-Fi 网络的概况,以及可能的频率干扰、干扰和无线电问题。一些软件还提供了在特定时间内监控信号质量的选项。
RSSI 等级表明数字越高,强度越低:
- -60 dBm 及更好的:这表示良好的信号水平
- -80 dBm 到-60 dBm :表示合理的信号电平
- -80 dBm 到-90 dBm :这表示信号电平很弱
- -90 dBm 及以下:表示信号非常微弱

图 9.8:丙烯酸的 Wi-Fi 网络、RSSI 水平和速度
如果你有 RSSI 在合理的范围和以上,接收水平通常是足够的,你应该寻找频率干扰和其他无线电问题。信噪比 ( SNR )是重要参数之一;它提供了环境中信号功率和噪声功率之间的比率。
我通常应用于无线网络设计的一个经验法则是,对于标准的企业应用,我需要 75 dBm 或更好;对于也应该用于 VoIP 的无线网络,我要求-65 dBm 或更好。
如果你想检查是否有任何干扰,你可以使用软件,将发现 RSSI 随着时间的推移,它会给你一个更准确的图片你的网络。在下面的截图中,你可以看到一个叫做的软件。它让您更准确地了解哪些接入点正在工作及其详细信息。

图 9.9:来自 inSSIDer 的 RSSI 随时间的变化
试着找出以下问题:
- 不同的接入点在同一区域的同一信道上工作
- 低信噪比,出现在 RSSI 较低(通常低于-90 dBm)和/或噪声较高时
802.11 网络运行在 2.4 GHz ISM(工业、科学和医疗)频段,无需许可。因此,由于来自各种设备(如无线摄像机、微波炉、无绳电话/耳机、无线游戏控制台/控制器、运动检测器甚至荧光灯)的传输,它非常拥挤。

图 9.10: 802.11 干扰
机场、海港和军事区等区域可能会出现频率干扰。下一步是使用频谱分析仪来检查哪些频率在您的地区使用。频谱分析仪可从各种供应商处获得,如 Fluke Networks、Agilent 和 Anritsu。
Wireshark 可用于分析 Wi-Fi 控制帧。首先要寻找的是 AP 是否正在发送信标帧,并且它们也在无线站被接收。在下面的截图中,您可以看到这些帧:

图 9.11:接入点发送的信标帧
AP 周期性地发送信标帧来宣告其存在、SSID、使用的安全方法等等,以及时间戳。
无线站/设备持续扫描所有 802.11 无线电信号并监听信标,以确定要关联的最佳接入点和无线网络。这些站确认信标,以便注册到 AP 和特定的 SSID。
无线站还可以发送探测请求帧来发现附近的接入点,这些接入点将使用探测响应帧进行响应,以提供进一步的信息。
在识别出首选无线网络并确认信标帧后,将启动一个标准的 DHCP 过程,如第 10 章、网络层协议和操作中所述。** **# 捕获无线局域网流量
捕获选项
如果您试图捕获运行 Wireshark 的无线站与网络中其他有线/无线机器之间的流量,并且只对常规网络数据感兴趣,而对 802.11 控制数据包或无线电/链路层信息不感兴趣,那么您不必做任何特殊的事情。只需打开 Wireshark,选择您感兴趣的特定无线接口,应用必要的过滤器,并以混杂模式运行它。
使用 Wireshark,如果您想要捕获无线站内运行的不同进程之间的流量,则应该在环回接口上进行捕获。
如果您试图捕获不仅发送到运行 Wireshark 的无线站或从运行 Wireshark 的无线站发送的流量,而且还捕获网络中不同无线设备之间的流量,并且如果您对 802.11 控制数据包或无线电/链路层信息感兴趣,那么您必须通过启用监控模式来实现,如下所示(Wireshark 版本 10.6,运行在 Apple macOS Sierra 10.12.6 上)。这种类型的捕获通常被称为空中 ( OTA )数据包捕获。

图 9.12: Wireshark 接口捕获选项
请注意,Wireshark 提供有限的功能来执行 OTA 数据包捕获;一些商业工具和应用可用于提供更全面的监控和故障排除功能和特性。
在基于 Unix 的操作系统和 Apple macOS (10.6 或更高版本)中,有一些内置工具,如airportd、airport 实用工具、无线诊断和 tcpdump,可以用来捕获和分析无线数据包。
做好准备
对捕获流量的可用选项有了基本的了解后,让我们来讨论基站成功关联到无线网络以及访问网络服务/数据的步骤:
- 无线站从 AP 接收信标帧和/或与 AP 交换探测请求和响应以获得关联。
- 关联成功后,工作站将通过身份验证过程并获得许可。
- 基于网络策略为无线客户端提供 IPv4/v6 地址。
- 在 web 身份验证过程中,用户同意无线服务提供商的条款和条件。根据提供商的不同,此步骤可能是可选的。
通过上述步骤,网络中会出现许多问题;它们可能会阻止站点成功地与无线网络关联并访问数据。在这里,我们将研究一些非常常见的问题:
- 没有加入特定 SSID 的无线站
- 成功关联到 SSID 后,用户将无法进行身份验证
怎么做...
请回顾上一节—无线电问题、分析和故障排除—并确保没有无线电/链路层问题。
没有加入特定 SSID 的无线站
在监控模式下运行 Wireshark,使用适用的过滤器过滤无线站(正在进行故障排除的设备)发送和接收的流量。
如前几章所述,在给定的框架中找到感兴趣的字段,右键单击它,并选择 Apply as Column 以将该字段添加为列。例如,您可以添加数据速率、强度等,这将在故障排除过程中非常有帮助。
考虑一个场景,一个苹果无线设备刚刚被激活,加入是一个 SSID。正如您接下来看到的,无线设备发送一个探测请求,并从 AP 获得探测响应。使用的过滤器:(wlan.fc == 0x4000) or (wlan.fc == 0x5008):

图 9.13:探测请求和响应
请注意,探测请求是一个广播,目的地是所有 Fs mac 地址。

图 9.14:探测响应报头详细信息:无线电、AP 和 BSS
正如您在这里看到的,有效的探测响应将在 802.11 无线电信息报头中包含无线电/链路层信息,如频率、信道、SNR 等,在 802.11 探测响应报头中包含发射机和 BSS 信息。
下图显示了 SSID、支持的 Mbps 速率以及 802.11 无线 LAN 报头中的其他功能。确保所有信息看起来有效,并且与无线适配器兼容。

图 9.15:探测响应标头详细信息:SSID 和速率
得到响应后,无线客户端与 AP 服务的特定 SSID 相关联。如下所示,在探测请求和响应之后,客户端和 AP 交换一些消息来完成关联过程。

图 9.16:无线客户端和 AP 关联过程
如果您查看 AP 发送的最终关联响应帧中的 802.11 无线 LAN 报头,您应该会看到状态代码字段为成功。这表明客户端与特定的 AP 和 SSID 成功关联。

图 9.17:无线客户端和 AP 关联:状态代码
成功关联后用户无法进行身份验证
成功关联后,如果您看到客户端和 AP 之间交换了用户数据,则很可能没有实施安全策略。这在百货商店或酒店中很常见,在这些地方,客人可以在没有设备级认证的情况下访问无线网络。请记住,当用户打开浏览器时,可能会发生应用级别的身份验证,此时会要求用户提供用户名/密码凭据和/或接受条款和条件,以便继续使用无线服务。
在排除身份验证问题之前,让我们了解一下身份验证框架和各种方法。
可扩展认证协议 ( EAP )是当今部署中最流行的认证框架之一,并得到了各种厂商和无线客户端的广泛支持。该框架本身不是一种身份验证机制,它提供了常见的身份验证功能和协商,称为 EAP 方法。目前有 40 多种方法用于保护设备之间的通信,例如 LEAP、EAP-TLS、EAP-MD5、EAP-FAST、EAP-IKEv2 等等。
注:
- RFC5274 中定义了 EAP。早先它在 RFC3748 中被定义。
- RFC4017 中描述了专用于无线局域网的方法要求。
- 有关 EAP 数据包中使用的类型和代码,请参考 IANA EAP 注册表,链接如下:https://www . iana . org/assignments/EAP-numbers/EAP-numbers . XHTML。
- IEEE 802.1X 定义了 EAP over LAN 的封装,也称为 EAPoL。
请参考下面的截图,跟踪关联成功后发生的事件。
使用的过滤器:(wlan.da == 78:88:6d:43:90:ad or wlan.sa == 78:88:6d:43:90:ad) && (eapol.type == 0)。这里,78:88:6d:43:90:ad是无线客户端的 MAC 地址:
- 帧#9: AP 向无线客户端发送请求以识别自身。
- 第 10 帧:苹果无线客户端识别自己。
- 帧# 12:AP 想要使用 e AP-TLS 方法建立一个安全隧道来保护所有的 EAP 通信(称为受保护的 EAP-PEAP)。
- 帧#13:客户端开始向 AP 发送 TLS ver1.2 帧。
- 帧# 15-46:AP 和无线设备再交换几个数据包,以完成身份验证过程和封装方法。

图 9.18: EAP 流程
- 第 48 帧:EAP 进程完成,在 EAP 报头中有代码 成功 。详情如下:

图 9.19:–EAP 流程-最终状态代码
在成功的 EAP 过程之后,无线客户端和 AP 必须完成四次握手,这是为 AP 和无线客户端设计的,以在不泄露先前共享的密钥的情况下独立地向彼此证明它们的合法性。这对于保护网络免受各种恶意接入点的攻击至关重要。确保四次握手完成,以便无线客户端可以访问数据。

图 9.20:四次握手
还有更多...
河床上的空气帽
在前面讨论的场景中,考虑了一种非常特殊的身份验证和封装方法,并在 Apple Mac 笔记本电脑上执行。您可以使用市场上提供的各种商业工具,如 Riverbed 的 AirPcap 无线适配器,它与 Wireshark 和 SteelCentral packet analyzer 完全集成。该产品包提供了全面的报告和可视化。详情请参考以下链接:https://www . riverbed . com/products/steel central/steel central-riverbed-aircap . html。
获取无线客户端、接入点和控制器之间流量的更多方式
在前面的章节中,我们只讨论了无线客户端和 AP 之间的交互,以及相关的数据包捕获。思科系统公司和阿鲁巴/HPE 公司等供应商提供了以嗅探模式运行 AP 和/或无线控制器的方法。在这种模式下,AP/WLC 向特定的 UDP 端口(例如,5555)发送流量;它可以在无线客户端中使用带有 UDP 端口5555过滤器的 Wireshark 捕获,并解码为 peekremote(在旧版本中为 airopeek)。此选项有助于确认从 AP 到客户端的流量没有丢失,也有助于验证各种无线电/链路层参数。
在正常情况下,无线客户端和接入点之间的所有控制/数据负载都是加密的,无法使用 Wireshark 解密。我建议您与特定的供应商联系,看看是否有可能在 AP/WLC 解密这些数据包。
此外,在集中式部署模式下,接入点和 WLC 之间的数据/控制流量采用 CAPWAP 隧道。可以使用 Wireshark 捕获 CAPWAP 流量(就像我们捕获网络中两台电脑之间的流量一样)并解码。
确保您检查了 Wireshark | Preferences | Protocols | CAPWAP 控制下的 Cisco 无线控制器支持选项,以便解码 CAPWAP 控制数据包。如果未选中,数据包可能会在 Wireshark 显示中被标记为格式错误的数据包。**
十、网络层协议和操作
在本章中,您将了解以下内容:
- IPv4 操作原则
- IPv4 地址解析协议操作和故障排除
- ICMP–协议操作、分析和故障排除
- 分析 IPv4 单播路由操作
- 分析 IP 碎片故障
- IPv4 多播路由操作
- IPv6 操作原则
- IPv6 扩展标头
- icmp V6–协议操作、分析和故障排除
- IPv6 自动配置
- 基于 DHCPv6 的地址配置
- IPv6 邻居发现协议的运行与分析
介绍
在本章中,我们将主要关注 OSI 参考模型的第 3 层,并学习如何分析第 3 层协议(IPv4/IPv6)的运行,以及单播和组播流量分析。我们还将了解地址解析协议 ( ARP )/ND、动态和无状态 IPv6 地址配置等等。我们将讨论您在排除这些协议故障时可能面临的基本问题。
我们将学习如何使用 Wireshark 分析单播和组播流量的端到端 IPv4 和 IPv6 连接故障。
虽然有各种结构化的故障排除方法,但自下而上的故障排除方法是最有效的方法。它从 OSI 参考模型的底层(物理层)开始。当端点之间出现端到端连接故障时,这种方法会从底层开始检查元素,然后向顶层移动,直到确定故障原因。方法如下:

ISO 自下而上故障排除模型
IPv4 操作原则
在 OSI 参考模型中,网络层负责使用网络层寻址来提供全球唯一的设备标识,并为不同网络中的终端系统之间的数据传输提供连接。网络层的基本功能是从上层(传输层)接收数据段,用携带源和目的标识符的网络层报头封装数据段,然后将数据包转发到远程终端系统。
IP 是网络层协议,并且是互联网和其他网络最常用的网络层协议。IPv4 报头的格式如下:

IPv4 数据包报头
以下是 Wireshark 捕获 IP 数据包的示例:

样本 IP 数据包
IP 寻址
IPv4 地址是分配给 IP 网络上每台设备的唯一逻辑网络层标识符。它是一个 32 位标识符,由网络部分和主机部分组成。地址格式如下:

IPv4 地址格式
网络 ID 用于识别主机所在的网络。同一网络中的所有节点将共享相同的网络 ID。主机 ID 用于识别网络中的主机。网络中的每个节点都有一个唯一的主机 ID。IP 地址总是分配有子网掩码,用于标识地址的网络 ID 部分。例如,子网掩码为255.255.255.0的 IP 地址10.0.0.1表示前三个二进制八位数是网络 ID,最后一个二进制八位数是主机 ID。
虽然 IPv4 地址的大小是 32 位,但用于表示地址的语法是基于点分十进制的。32 位分为四个二进制八位数,每个二进制八位数表示为一个十进制值,以点作为分界。
有三种类型的 IPv4 地址,概述如下:
- 单播地址:用于点对点通信,数据从一个节点发送到相同或不同网络中的一个接收方。单播的地址范围是从
1.0.0.0到223.255.255.255。 - 组播地址:用于点对多点通信,数据从一个节点发送到相同或不同网络中的多个接收者。组播的地址范围是从
224.0.0.0到239.255.255.255。 - 广播地址:用于点对多点通信,数据从一个节点发送到同一网络中的所有接收器。每个子网中的最后一个 IP 地址是广播地址。地址
255.255.255.255被称为受限广播地址。
IPv4 地址解析协议操作和故障排除
以太网是流行且主要部署的局域网 ( LAN )技术,传输速率从 10 Mbps 到 400 Gbps。该数据链路层协议使用 48 位 MAC 地址作为数据链路层标识符。在本菜谱中,我们将讨论 IPv4 ARP 及其相关问题。
做好准备
在自下而上的故障排除方法中,任何连通性问题的第一步都是确保 ARP 解析对于相应的 IP 地址是成功的。
怎么做...
考虑以下 LAN 拓扑的屏幕截图:

局域网拓扑
在前面的场景中,假设 PC1 正试图联系 PC2 :
- 从 PC1 (
10.1.1.101)到 PC2 (10.1.1.102)触发 ping 探针。这将触发从 PC1 到 PC2 的 ARP 请求。 - 使用
arp-a检查 PC1 上的 ARP 表,查看本地表中是否填充了10.1.1.102的 MAC 地址。 - 如果你在 PC1 本地表中看到了
10.1.1.102的 MAC 地址,那就证实了 PC1 发送了 ARP 请求并收到了来自 PC2 的 ARP 响应。 - 如果在 PC1 中没有看到
10.1.1.102的 MAC 地址,将 Wireshark 连接到交换机上的一个空闲端口并捕获数据包(使用端口镜像)。在连接 PC1 和 PC2: 的端口的入口和出口方向上执行捕获将是有用的

ARP 数据包捕获
- 检查来自 PC1 的 ARP 请求是否出现在捕获中。前面的截图显示了来自 PC1 的 ARP 请求。您可能已经注意到,ARP 数据包的目的地是广播 MAC 地址
ff.ff.ff.ff.ff.ff:- 如果在连接 PC1 (入口方向)的端口的捕获中发现 ARP 请求包,但在连接 PC2 (出口方向)的端口的捕获中没有发现,则交换机可能已经丢弃了 ARP 包。
- 如果在连接 PC1 的端口(入口方向)的捕获中没有看到 ARP 请求数据包,请检查连接 PC1 到交换机的物理电缆。
- 如果在连接 PC1 和 PC2 的两个端口上捕获到 ARP 请求包,但是没有 ARP 响应,检查 PC2:

ARP 回复捕获
- 检查 ARP 回复数据包是否出现在捕获中。前面的截图显示了从 PC2 到 PC1 的 ARP 回复。可以看出,ARP 回复是单播给 PC1 MAC 地址的:
- 如果在连接 PC2 的端口(入口方向)的捕获中发现 ARP 回复数据包,但在连接 PC1 的端口(出口方向)的捕获中没有发现,则交换机可能已经丢弃了 ARP 回复数据包。
- 如果在连接 PC2 (入口方向)的端口上的捕获中没有看到 ARP 应答包,检查连接 PC2 到交换机的物理电缆。
- 如果在连接 PC1 和 PC2 的两个端口的捕获中看到 ARP 应答包,但是在 PC1 ARP 表中没有条目,检查 PC1 。
以下是一些有用的显示过滤器:

Wireshark ARP 显示过滤器
ARP 攻击和缓解措施
ARP 是一个非常简单的协议,没有任何认证或其他内置的安全机制,因此很容易受到攻击。网络中的恶意用户可以使用 ARP 作为 ARP 中毒的手段进行窃听,或者可以使用 ARP 扫描进行拒绝服务 ( DoS )攻击。在本节中,我们将讨论不同的基于 ARP 的攻击,以及如何使用 Wireshark 来检测它们。
ARP 中毒和中间人攻击
中间人攻击的一种类型是,攻击者利用以太网网卡的 MAC 地址毒害他们想要监听的设备的 ARP 缓存。一旦 ARP 缓存中毒成功,每台受害设备在与另一台设备通信时,都会将其所有数据包发送给攻击者。当然,攻击者在读取数据后会重新发送给他们。
这被称为中间人攻击,因为它将攻击者置于受害设备之间的通信路径中间。它也被称为 ARP 中毒,因为攻击者实际上是用错误的信息毒害受害者的 ARP 缓存。
在下图中,我们看到了一个中间人攻击的示例:

ARP 中毒攻击
以下是 Wireshark 的截图:

ARP 欺骗捕获
应该注意的是,攻击者使用 MAC 地址f0:de:f1:ae:77:69来响应对10.0.0.100和10.0.0.101的 ARP 请求。在生产网络中,您可能会在几秒钟内看到成千上万的数据包被捕获。Wireshark 显示过滤器将有助于缩小我们感兴趣的数据包的范围。
无偿 ARP
任何节点都可以使用免费的 ARP ( GARP )来通告自己的 MAC 地址,并以相应的 IP 地址作为 ARP 回复,即使没有 ARP 请求。这种提前通知的主要目的是确保邻居的 ARP 缓存随着本地 MAC 地址的任何变化而更新。GARP 总是注定要广播 MAC 地址:

GARP 包
虽然预计它会在生产环境中看到 GARP,但它也可能被任何恶意攻击者利用,通过向 GARP 发送其自己的 MAC 地址来窃听任何 IP 地址:

GARP 滤波器
arp.isgratuitous是一个 Wireshark 显示过滤器,有助于从大量捕获的数据包中列出 GARP 数据包。
基于 ARP 扫描的 DoS 攻击
对于网络库存,通常的做法是使用管理系统,并向子网内的所有 IP 地址发送 ARP 请求扫描。在这种方法中,目标 IP 地址将不断变化,但发送方 IP 地址和发送方 MAC 地址将保持不变,并被设置为管理系统地址。为了实现高效通信,终端主机的默认行为是从 ARP 请求中获取发送方 IP 和 MAC 地址,并填充本地 ARP 缓存。任何恶意攻击者也可以利用 ARP 扫描和这种行为,通过更改发送者的 IP 和 MAC 地址来耗尽 LAN 网络中所有终端主机的 ARP 缓存。
ARP 请求和回复是常规网络操作的一部分。这里有一些经验法则来确保它们确实如此:
- 对于来自不同来源的 ARP 请求:
- 如果来源合法,这是一个正常的操作
- 如果来源是恶意的,这可能是一种攻击
- 对于来自单一来源的 ARP 请求:
- 如果源是管理系统,则是正常操作
- 如果来源是路由器,则可能是网络扫描
- 如果来源不合法,则可能是攻击

IP 统计
Wireshark 统计数据可用于识别是否有 ARP 扫描。这可以通过 Wireshark 报头字段中的统计信息|协议层次结构来查看。如前例所示,通过该选项可以查看 ARP 数据包的数量,这将有助于我们了解网络中是否存在 ARP 数据包的扫荡。
它是如何工作的...
对于端到端通信,任何节点都需要解析与第 3 层 IPv4 或 IPv6 网络地址相关联的 48 位以太网 MAC 地址。
当第 3 层网络为 IPv4 时,ARP 用于解析与 IPv4 地址相关的 MAC 地址。ARP 数据包格式如下:

ARP 数据包格式
解析节点将发送 ARP 请求(OpCode = 1),该请求广播 MAC 地址(ff.ff.ff.ff.ff.ff)。发送方硬件地址将被设置为发起节点的 MAC 地址,发送方协议地址将被设置为发起节点的 IP 地址。目标硬件地址将被设置为零值,并且目标协议地址将被设置为正在执行 MAC 解析的地址。
响应节点将用单播给解析节点的 ARP 回复(Opcode = 2)进行回复。
ARP 操作只是本地的,这意味着 ARP 请求是一种广播,只在局域网上发送。当源地址 S 和目的地址 D 属于同一个局域网(相同的 IP 网络和掩码)时,ARP 会通过发送携带目标协议地址为 D 的 ARP 请求,尝试解析出 D 的 MAC 地址。但是当源地址 S 和目的地址 D 在不同的局域网(不同的 IP 网络和掩码)时,将对默认网关地址进行解析。
ICMP–协议操作、分析和故障排除
互联网控制消息协议 ( ICMP )是一种网络层协议,用于错误报告和网络路径诊断功能。Ping 和 Traceroute 实用工具利用 ICMP 消息进行故障检测和隔离。ICMP 消息使用基本 IP 报头发送。IP 报头中的协议字段将被设置为 ICMP,后跟 ICMP 有效负载。ICMP 数据包具有以下格式:

ICMP 报头格式
用于网络连接性验证的 ICMP 消息类型有回应请求(Type = 8)和回应回复(Type = 0)。
做好准备
当 web 服务或邮件服务等终端应用出现问题时,使用自下而上方法的第一个故障排除步骤是检验数据链路层。使用上一节中定义的步骤检验完数据链路层后,下一步是检验端点之间的网络连通性。端点之间的网络连通性可以通过常用的故障检测和隔离实用工具来验证,例如 Ping 和 Traceroute。
怎么做...
考虑以下 IPv4 拓扑的屏幕截图,并仔细观察 Ping 探针:

IPv4 拓扑
在上图中,当从 PC1 到 PC2 触发 Ping 探测时,从 PC1 到 PC2 的 IP 或以太网报头不会有任何变化,因为它们都在同一个局域网中:
- 触发 PC1 (
10.1.100.101)到 PC2 (10.1.100.102)的 Ping 探针。这将产生一个从 PC1 到 PC2 的 ICMP 回应请求消息。 - 如果没有来自 PC2 的回应回复,确保在本地 ARP 缓存表中填充了 PC2 的 MAC 地址。
- 将 Wireshark 连接到 SW1 上的一个空闲端口,并捕获数据包(端口镜像):

ICMP 数据包
- 检查在捕获中是否看到来自 PC1 的 ICMP 回应请求。前面的截图显示了从 PC1 到 PC2 的 ICMP 回应消息:
- 如果在连接 PC1 和 PC2 的端口看到 echo 消息,但是还没有响应,检查 PC2 上的防火墙和其他设置。
- 如果在连接 PC1 的端口看到回应消息,但在连接 PC2 的端口没有看到回应消息,请检查交换机是否正在丢弃数据包。
- 如果在连接 PC1 的端口没有看到 echo 消息,检查连接 PC1 到 SW1 的物理电缆:

- 检查在捕获中是否看到来自 PC2 的 ICMP 回复。上图显示了从 PC2 到 PC1 的 ICMP 回复:
- 如果在连接 PC1 和 PC2 的端口中看到回应回复,那么一切都工作正常。
- 如果在连接 PC2 的端口中看到回应应答,但在连接 PC1 的端口中没有看到回应应答,请检查交换机是否正在丢弃数据包。
- 如果连接 PC2 的端口看不到回应应答,检查连接 PC2 到 SW1 的物理线缆。
以下是一些有用的 ICMP 显示过滤器:

ICMP 攻击和缓解
虽然 ICMP 是一个极好的错误报告和诊断实用工具,但它也在许多网络中被用作 DoS 攻击的来源。
ICMP 洪水攻击
ICMP flood 攻击是常见的 DoS 攻击之一,网络中的恶意用户会向目标主机(如服务器)发送大量 ICMP 数据包:

Wireshark 统计数据可用于识别是否存在 ICMP 攻击。可以通过 Wireshark 头字段中的统计信息|协议层次结构来查看统计信息。如前面的截图所示,几秒钟内有 60,000 个 ICMP 数据包。
ICMP smurf 攻击
ICMP smurf 攻击是另一种分布式 DoS 攻击,在这种攻击中,恶意攻击者会向一个或多个目标发送大量 ICMP 回送消息,并将目标(受害者)主机的欺骗地址作为 ICMP 回送消息的源 IP 地址。这将导致受害主机收到大量回应回复消息,导致其缓冲区溢出和耗尽:

单一网络拓扑
在上图中,攻击者生成了一条 ICMP 回应消息,其中包含假冒地址 PC1 。这种攻击导致 PC1 收到来自非预期响应者的 ICMP 回应回复,导致缓冲区耗尽问题。
当启用第 2 层安全功能时,源 MAC 地址不能被欺骗。因此,捕获数据包并使用源 MAC 地址可能有助于识别攻击者以阻止攻击。
它是如何工作的...
为了验证 PC1 和 PC3 之间的可达性,Ping 实用工具将用于触发从 PC1 到 PC3 的 ICMP 消息,如下图所示:

将生成一个 ICMP 回应请求(类型 8 ),源地址为10.1.100.101,目的地为10.1.200.101,并转发到默认网关。路径上的每台路由器都会根据转发表转发它。 PC3 收到 ICMP 回应请求消息后,会回复一个 ICMP 回应回复(类型 0)给 figure。Ping 失败将指示 PC1 和 PC3 之间的连接问题。
分析 IPv4 单播路由操作
IPv4 单播路由是将单播数据包从一个网络中的主机转发到同一网络或另一个网络中的接收器的过程。数据分组可以沿着路径穿过一个或多个路由器,这些路由器将在 IP 报头中执行查找以做出转发决定。
做好准备
只需打开 Wireshark,将其连接到网络,配置您想要测试的设备的端口镜像,然后启动它。碎片化将主要影响交互式应用,如数据库,这些是我们应该寻找问题的地方。
它是如何工作的...
如果10.1.100.0/24网络中的 PC1 想要与10.1.200.0/24网络中的 PC4 通信,则执行以下操作:
- PC1 生成数据并将其封装到 IP 报头中。源 IP 地址被设置为
10.1.100.101,目的 IP 地址被设置为10.1.200.102。 - PC1 用以太网报头封装数据包。源 MAC 地址设置为 PC1 MAC 地址,目的 MAC 地址设置为 R1(默认网关)MAC 地址。该帧将被转发给 SW1。
- SW1 是一个简单的第 2 层交换机,因此它对以太网报头执行查找,然后转发到目的 MAC(本例中为 R1)。
- R1 收到数据包并解封以太网报头,因为目的 MAC 地址与它自己的地址匹配。它在本地路由表中查找 IP 报头中的目的 IP 地址,发现 R2 是到达
10.1.200.0/24的下一跳。 - R1 递减 IP 报头中的 TTL,并将数据包封装到以太网报头中。源 MAC 地址设置为 R1,目的 MAC 地址设置为 R2。该帧将被转发到 R2。
- R2 执行相同的转发行为。它会解封以太网报头,减少 IP 报头的 TTL,并将其与封装的新以太网报头一起转发给 R3。
- R3 收到帧后,会解封以太网报头,递减 IP 报头的 TTL,并将其与以太网报头封装在一起。源 MAC 设置为 R3,目的 MAC 地址将设置为 PC4 的 MAC 地址。
- PC4 将接收帧,解封装以太网和 IP 报头,并将其用于适当的应用。
可以看到,沿着路径的路由器修改 IP 报头中的一些字段(例如 TTL ),并且以太网封装沿着路径改变。 PC1 和 PC4 之间的任何连接故障都可能是由于各种原因造成的,包括错误的以太网封装、TTL 处理以及数据包太大而无法处理。我们将看到如何使用 Wireshark 来分析此类数据包路由问题。
TCP 路径 MTU 发现
虽然与 IP 报头相关联的转发语义允许任何中转节点对分组进行分段,但是这可能会产生性能问题(如前一节所述),因为在处理之前要求接收方重新组装分组。我们可以强制传输节点不分割分组,而是发信号通知路径中较低 MTU 的存在,并让发起者调整 MSS。此过程称为路径 MTU 发现(PMTUD) ,是检测路径上最低 MTU 并使用该值调整 MSS 以实现高效数据传输的有效方式。
IP TTL 故障和攻击
正如我们在前面几节中看到的,每当中转路由器在 IP 报头中执行查找时,它都会将 IP TTL 减 1,然后再将数据包转发到下一跳路由器。如果路由器收到 TTL 为 1 的数据包,并且目的 IP 地址不是它自己的地址,则默认行为是丢弃该数据包并生成类型为 11(超过生存时间)的 ICMP 错误消息。此行为可确保路由环路中的数据包不会永远在节点之间跳跃,而是会在 255 次迭代后被丢弃(TTL 的最大值可设置为 255):

Wireshark 的专家信息选项提供了一个警告,提示收到了 TTL 小于 5 的数据包,并突出显示这些数据包,如前面的屏幕截图所示。这可以通过执行以下操作来查看:
- 转到分析并单击专家信息选项
- 单击警告或注释部分以查看更多详细信息
恶意攻击者可以利用 IP TTL 发送大量低 TTL 值(小于 5)的数据包来触发 DoS 攻击。传输节点将继续将数据包发送到 CPU,以生成 ICMP 错误消息,这可能会导致占用 CPU。有各种选项可用,如 CPU 保护机制或限制 CPU 的流量速率,可以帮助减轻此类攻击。
重复的 IP 地址
我们将从现象开始,例如对服务器或另一个设备的缓慢访问,对互联网的缓慢访问,以及所有没有得到回复的 pings。
- 当您缓慢访问网络设备时,其中一个问题可能是您的设备的 IP 地址与另一个地址冲突。要验证这一点,请 ping IP 地址。
在一些设备中,当它们的地址与相同的地址冲突时,驱动程序将被关闭(Windows 操作系统中屏幕左下角的小符号)。在其他设备中,您将不会收到任何冲突通知,而这正是会出现问题的地方。
- 在命令行界面 ( CLI )中输入
arp -a。在 Windows 中使用命令cmd(或者在 Linux 中使用任何 shell)。如果您使用不同的 MAC 地址 pinged 了两行 IP 地址,则存在重复。 - 谷歌一下这两款设备的 MAC 地址,地址的第一部分会告诉你厂商是谁。这会让你找到麻烦制造者。
- 如果您需要设备的位置,请登录到您的 LAN 交换机(当然,当您有被管理的交换机时),从交换机 MAC 地址表中,您将看到您所连接的交换机端口。有一个软件可以显示连接到每台交换机的设备列表,以及它们的 MAC 地址、IP 地址、DNS 名称等等。谷歌交换机端口映射或交换机端口映射工具,你会发现很多。
- 如果 Ping 和 ARP 没有任何效果,只需启动 Wireshark 并对网络 VLANs 进行端口镜像。Wireshark 将向您显示重复地址错误以及相关详细信息。
- 您将得到的错误消息如下面的屏幕截图所示:

当您 ping 一个在您的本地网络中出现两次的 IP 地址时,具有相同 IP 地址的两台(或更多)设备将响应您发送的 ARP 请求,并且您的 ARP 缓存将有两个相同 IP 地址的条目。
在许多情况下,您的设备会通过关闭其 IP 驱动程序来指示它,并通过弹出窗口或您知道的任何其他类型的通知来通知您。
在其他情况下,冲突的设备不会通知您冲突,然后您会发现只有 Ping 和 ARP 有问题,如前所述。
无论如何,当您将 Wireshark 连接到网络并看到重复的 IP 消息时,不要忽略它们。
分析 IP 碎片故障
分段是 IP 中的一种常见机制,它将一个大的 IP 数据包分成适合第 2 层以太网帧的较小数据包。当任何路由器接收到大于出接口最大传输单位 ( MTU )的数据包时,该数据包就会被分段。在大多数情况下,这种机制不应该有任何问题,但是这种机制可能会导致性能问题。IP 碎片也可能被用作 DoS 攻击的来源。
怎么做...
发生碎片化时,您会看到 UDP 或 TCP 数据包以及碎片化的 IP 协议数据包,如以下屏幕截图所示:

如果怀疑存在性能问题,例如,数据库客户机与服务器的连接速度很慢,请按照以下步骤查看问题是否是由碎片引起的:
- 测试客户端和服务器之间的连接,验证没有其他问题。
- 寻找客户端和服务器之间的碎片。片段将如之前的截图所示(IPv4 片段)。
- 如果您怀疑碎片是问题的原因,可以通过修复传输路径的 MTU 或调整应用发送不会导致网络碎片的较小数据包来解决问题。
- 以太网中推荐的数据包大小不超过 1460 字节减去 TCP 报头大小。因此,从接口出来的数据段应该有 1420-1440 字节的大小。
在我们需要更多字节作为报头的情况下,例如,当我们使用隧道机制和 TCP 选项时,DBA 将不得不进一步减小这个大小。最好的方法就是把它缩小到你看不到任何碎片的大小。
基于碎片的攻击
虽然在网络中看到 IP 碎片是正常的,但是恶意攻击者也可以利用碎片进行 DoS 攻击。这种攻击称为微小碎片攻击,攻击者将向目标主机发送大量微小碎片数据包。这种微小的碎片需要由目标主机重新组装,从而导致性能问题或其他缓冲区溢出问题:

在前面的截图中,可以看到捕获片段的大小为 100 字节;攻击者可以使用更小的规模在目标主机上触发 DoS 攻击。
默认情况下,Wireshark 会重组捕获中的任何碎片数据包,并将其显示为一个重组的数据包。这可能会给人一种网络不存在碎片化的印象。通过更改首选项设置,我们将能够在 Wireshark 中显示真正的碎片数据包。
这可以通过以下步骤完成:
- 转到编辑并单击首选项
- 单击协议,然后选择 IPv4
- 取消设置重组碎片 IPv4 数据报字段
它是如何工作的...
理解定义通过网络发送的数据单元大小的两个术语非常重要,如下图所示:
- 最大传输单位(MTU) :这是 IP 数据包的大小,包括报头和数据
- 最大数据段大小(MSS): 这是 TCP 数据段的最大大小:

IPv4 中使用的分段机制如下图所示:

一个原始的大数据包进入网卡或路由器,其数据包大小需要进行分段。根据原始大小,数据包被分成几个部分。
对于碎片,我们有以下字段:
ID:与原始 IP 包的 ID 相同Bit 0:始终0Bit 1 (DF bit):0=五月断片,1=不断片Bit 2 (MF bit):0=最后一个片段,1=更多片段Fragment Offset:表示从原始数据包开始的字节数
在 IPv4 中,网卡本身可以在数据包到达目的地的途中与每台路由器一起将数据包分段。
PMTUD 利用 IP 报头中的不分段 ( DF)标志。当任何中转路由器接收到大于输出接口 IP MTU 大小的 IP 数据包时,如果数据包报头中的DF标志设置为1,路由器将丢弃该数据包并生成类型 3 ( Destination unreachable)的 ICMP 错误消息,代码为 4(需要分段并设置 DF)。此消息将被发送给数据包的发起者,并将携带传出接口的 MTU 大小:

路径 MTU 发现拓扑
在上图中, R2 上出接口到达 R3 的 MTU 值为 100 。当 R2 接收到任何大小超过 100 的 IP 数据包时,它会丢弃该数据包并生成 ICMP 错误消息:

R2 丢弃数据包并生成 ICMP 错误消息,如前面的屏幕截图所示。发起主机将使用接收到的消息中的 MTU 值来调整会话的 MSS,以实现高效的数据传输。

以下是一些有用的 IP 碎片过滤器:

IPv4 多播路由操作
IPv4 多播路由是将数据包从源转发到位于相同或不同网络中的一个或多个接收者的过程。组播包的源地址将是单播地址,而目的地址将是组播地址(224.0.0.0到239.255.255.255)。使用组播接收流量的终端应用将使用带外机制解析组播地址,并使用 IGMP 等组播组成员协议加入相应的组播组。主机将向连接的路由器发送 IGMP 加入。
连接接收器的支持多播的路由器被称为最后一跳路由器(LHR) ,连接源的支持多播的路由器被称为第一跳路由器(FHR) 。LHR 将使用诸如 PIM 之类的多播路由协议,使用最短路径来建立到 FHR 的多播树。FHR 将通过多播树转发多播数据流量。多播可以部署在不同的模式中。下面是两种最常用的多播模式:
- 稀疏模式:在这种模式下,一个普通节点将被定位为集合点(RP) ,每个 LHR 将向 RP 建立组播树。这种树被称为共享树。FHR 在接收到来自连接源的多播流量时,会将数据包单播给 RP,RP 又会将其转发给共享树上的接收器。
- 特定于源的组播:在这种模式下,每个 LHR 将建立一个组播树,指向连接到源本身的 FHR。这种模式下不需要 RP。
它是如何工作的...
在下图中,假设接收方使用239.1.1.1作为组播地址加入来自连接到 R1: 的源的流

在我们的例子中,10.1.8.8作为 RP ,这个 RP 连接到 R2 :
- 接收者将向连接的多播路由器发送
239.1.1.1的 IGMP 加入请求。LHR 路由器( R3 和 R4 )在接收到来自接收者的 IGMP 加入后,将建立一棵朝向 RP 的共享树。在我们的例子中, R3 和 R4 将使用 R2 作为上游路由器来构建朝向 RP 的树。 - 连接到源的 FHR 在接收到第一个多播流量时,将使用 PIM register 消息对其进行封装,并向 RP 单播该数据包:

- 如前面截图所示, R1 将组播数据包(源为
10.1.17.7,目的为239.1.1.1)封装成 PIM 注册封装头。它进一步使用 IP 单播报头对其进行封装,其中源作为 FHR 路由器(10.1.12.1),目的地作为 RP (10.1.8.8)。 - RP 将解封装报头,并将多播流量转发到共享树。
- 默认情况下,LHR 路由器在收到组播流量后,会建立另一个指向源的树。这棵树叫做最短路径树。
虽然多播流量的转发行为不同于单播流量,但是 IP 报头在路径上的处理方式并没有太大的区别。例如,任何路由器都会减少单播和组播流量的 TTL。因此,我们为 IPv4 单播定义的所有故障排除分析程序也适用于 IPv4 多播捕获。
还有更多...
使用多播流量的终端应用主要是音频或视频应用,接收多播流的流量速率是故障排除时要考虑的标准之一。Wireshark 允许我们列出所有 UDP 多播流,并根据 PPS、使用的平均带宽等进行简单分析。在排除多播流量故障时,此统计信息非常有用。可以按照以下步骤查看统计数据:
- 转到统计,然后单击 UDP 多播流
- 检查多播信息的可用字段
IPv6 工作原理
随着 20 世纪 90 年代初互联网泡沫的出现,更多的企业开始依赖 IP 网络,这意味着 IPv4 地址空间的急剧枯竭。很快,业界意识到需要一种新的网络层协议来适应和满足不断增长的网络需求。这使得该行业开始致力于下一代知识产权(IPng)。
虽然最初的努力是扩展流协议(ST2)作为网络地址耗尽的快速解决方案,但诸如网络地址转换 ( NAT )和动态地址分配(如 DHCP)等功能在一定程度上解决了耗尽问题,使业界有足够的时间来研究 IPng。开发 IPng 不仅是为了应对地址空间挑战,也是为了考虑 IPv4 面临的其他限制和挑战。ST2 被正式指定为 IPv5,IPng 被正式指定为 IPv6。
IPv6 的大小为 128 位,因此提供了非常大的地址空间。虽然 IPv6 地址的大小是 IPv4 的四倍,但为了高效处理数据包,报头的大小得到了简化。IPv6 报头的格式如下:

以下是 Wireshark 捕获 IPv6 数据包的示例:

IPv6 寻址
与 IPv4 一样,IPv6 地址是分配给连接到网络的每台设备的唯一逻辑网络层标识符。IPv6 地址的大小为 128 位,包括网络前缀和接口 ID。IPv4 表示为四个十进制八位数,而 IPv6 地址表示为八个 16 位十六进制值块,以冒号作为分界。IPv6 地址的格式如下:

网络前缀用于标识主机所在的网络,而接口 ID 用于标识网络中的主机。虽然 128 位表示通过以十六进制值引用地址而变得高效,但这里有一些进一步简化表示的良好实践:
- IPv6 地址中的所有前导零都可以省略
- 连续的零可以表示为::
- *在地址中只能出现一次
有许多不同类型的 IPv6 地址;以下是其中一些的细节:
- 链路本地地址:这是一个不可路由的单播地址,具有特定于链路的范围,用于链路本地通信,其中数据包不会被发送超过一跳。所有控制平面通信(如 OSPF hello 消息)都属于这一类。任何启用 IPv6 的接口都将被分配一个链路本地地址。地址范围是 fe80::/10。
- 全局单播地址:这是具有全局范围的公共可路由单播地址。大多数互联网设备将从此范围内分配。地址范围是 2000::/3。
- 唯一本地地址:这是一个私有范围单播地址,在公共互联网中不可路由。地址范围为 fc00::/8 和 fd00::/8。
- 组播地址:和 IPv4 一样,这个地址用于点到多点的通信。地址范围是 ff00::/8。
还有一些其他类型的地址,如 IPv4 嵌入式地址和请求节点组播地址,为简洁起见,此处不做解释。
可以注意到,IPv6 没有任何广播地址,因为所有类型的广播通信都可以通过 IPv6 多播地址来寻址。如前所述,多播的地址范围是 ff00::/8,第一个块的最后 4 位定义了多播地址的范围。例如,1 具有节点本地范围,2 具有链接本地范围,5 具有站点本地范围,而 E 具有全局范围。下表给出了不同地址和范围的明确信息:

IPv6 扩展标头
为 IPv4 报头定义的 IP 选项主要用于携带额外的网络层信息。但是 IPv4 中 IP 选项的存在将最终将数据包发送到 CPU,从而由于慢路径数据包转发而引入性能问题。在 IPv6 中,提出了扩展报头来将这种控制平面信息编码为单独的灵活报头,而不增加 IPv6 报头的大小。IPv6 扩展报头位于分组中的 IPv6 报头和传输层报头之间,并且通过将下一个报头设置为相关值来识别 IPv6 扩展报头的存在。
以下是一些常用的 IPv6 扩展头:
| 协议号****(IPv6 NH 值) | 扩展头名称 | 描述 | 参考 |
| 0 | IPv6 逐跳选项 | 可选的扩展报头,用于携带路径上每个节点可能处理的附加信息。这可能需要将数据包发送到所有节点上的 CPU。 | RFC 8200 |
| 44 | IPv6 的片段头 | 由源用来发送大于路径 MTU 的数据包。 | RFC 8200 |
| 50 | 封装安全负载 | 用于携带安全信息,以提供机密性、身份验证、完整性等。 | RFC 4303 |
| 60 | 目标标题 | 源使用它来携带只给最终目的地的信息。 | RFC 8200 |
以下是带有扩展报头的 IPv6 数据包格式:

以下是一个示例捕获:

IPv6 扩展标头和攻击
尽管 IPv6 在设计时考虑到了安全性,但扩展报头仍可能被用作 DoS 攻击的来源。如前所述,逐跳扩展报头的存在将需要路径上的所有中转节点来处理报头,从而消耗大量 CPU。类似地,当大量具有 IPv6 目的地扩展报头的数据包被转发到特定主机或服务器时,它可能会消耗服务器上的大量资源。
做好准备
只需打开 Wireshark,将其连接到网络,配置设备的端口镜像,然后开始捕获。可以通过 Wireshark 捕获来验证 IPv6 扩展标头的存在。
怎么做...
下面的屏幕截图显示了带有 IPv6 扩展标头的 IPv6 数据包:

在前面的屏幕截图中,使用ipv6.dst_opt过滤数据包将列出所有带有 IPv6 目的地选项扩展头的 IPv6 数据包。或者,我们可以使用一个ipv6.hop_opt过滤器列出所有带有 IPv6 逐跳选项的 IPv6 数据包。
虽然上述任务有助于缩小收到的带有扩展报头的数据包或数据包数量,但可能需要额外的手动分析,以了解这是预期行为还是攻击。
IPv6 分段
如前所述,分段是指将数据包分成更小的片段,以适应路径上最低的 MTU 的过程。IPv6 处理数据包碎片的方式与 IPv4 完全不同。以下是 IPv6 在处理碎片方面的一些主要差异:
- 在 IPv4 中,允许任何路由器对数据包进行分段(假设未设置
DF bit),而 IPv6 仅允许 IPv6 数据包的源进行分段,任何中转节点都不能对 IPv6 数据包进行分段。 - 在 IPv4 中,分段细节作为 IPv4 报头的一部分被携带,但是在 IPv6 中,定义了新的扩展报头,并且该报头将仅被包括在分段的分组中。
它是如何工作的...
下图中, R2 上出接口的 MTU 值设置为 1280 ,这是 IPv6 报文转发所需的最小 MTU :

如果路由器收到大于传出接口的 MTU 的 IPv6 数据包,默认行为是丢弃该数据包并生成 ICMPv6 错误消息:

在前面的屏幕截图中, R2 丢弃数据包并生成一个 ICMPv6 错误消息,其中传出的 MTU 接口指向数据包的实际来源(在我们的示例中为 R1 )。

R1 将缓存此信息,并根据收到的 MTU 大小对数据包进行分段,如前面的截图所示。

如前面的屏幕截图所示,IPv6 片段扩展标头将包含所有与碎片相关的详细信息。在 IPv4 中,所有这些信息都作为 IPv4 报头本身的一部分携带。但是在 IPv6 中,它被包含在扩展报头中。
恶意攻击者也可以利用 IPv6 碎片进行 DoS 攻击。攻击者可能会发送大量带有 IPv6 片段扩展标头的数据包,导致目标主机消耗资源来重组片段数据包。
以下是一些有用的过滤器:

icmp V6–协议操作、分析和故障排除
ICMPv6 是针对 IPv6 的 ICMP 的增强版本,它不仅执行错误报告和路径诊断功能,还进一步扩展了其他网络层功能。ICMPv6 在以下方面起着关键作用:
- IPv6 路由器和邻居发现
- IPv6 无状态自动配置
- 路径 MTU 发现
- 故障检测和隔离
ICMPv6 是 IPv6 的一个组成部分,IPv6 的下一个头字段将被设置为58。ICMPv6 数据包具有以下格式:

有不同类型的 ICMPv6 消息可用于错误报告、信息或发现目的。在本节中,我们将了解如何使用 ICMPv6 进行故障检测和隔离,在接下来的几节中,我们将看到 ICMPv6 的更多应用。
做好准备
当使用 IPv6 的终端应用面临连接问题时,可以使用 Ping 和 Traceroute 等故障检测和隔离实用工具来检测或隔离故障。当 Ping 工具用于 IPv6 地址时,它使用 ICMPv6 消息进行路径诊断。沿途一台或多台设备上的 Wireshark 可用于捕获不同点的数据包进行分析。
IPv6 邻居发现协议的运行与分析
当第 3 层网络是 IPv6 寻址时,IPv6 邻居发现(ND) 协议用于解析与 IPv6 地址相关联的 MAC 地址。与 ARP 不同,IPv6 ND 通过定义不同的 ICMPv6 数据包类型,使用 ICMPv6 进行地址解析。
ICMPv6 邻居请求是一种 ICMPv6 消息类型,解析节点使用它来查询 IPv6 地址的链路层地址。这类似于 IPv4 的 ARP 请求。此消息将被指定给 IPv6 请求节点多播地址,因为 IPv6 中没有广播地址。邻居请求消息格式如下:

ICMPv6 邻居公告是一种 ICMPv6 消息类型,响应节点使用它来回复相关 IPv6 地址的链路层地址。此消息类似于 IPv4 的 ARP 回复。该消息将被单播给解析节点。
邻居通告消息格式如下:

怎么做...
- 下图中, R1 正在对 R3 的地址 2001::3 进行路径诊断。当在 R1 上触发 ping 时,它产生一个 ICMPv6 回应消息,并将其转发给 R2 :

- 如下截图所示, R1 向 R3 发送 ICMPv6 回应请求消息(ICMPv6 type = 128)。

- R3 在收到 ICMPv6 回应请求后,将回复 ICMPv6 回应回复。

如前面截图所示, R3 回复 ICMPv6 回应回复给 R1 。
在一些故障场景中,我们可能会注意到一些间歇性的数据包丢失。在一个大的pcap文件中,可能很难缩小我们没有得到响应的 ICMPv6 消息的列表。专家信息选项在这里会很有帮助:
- 转到分析并点击专家信息
- 检查警告:

这将列出在捕获中没有 ICMPv6 响应的所有 ICMPv6 回显消息。
IPv6 自动配置
IPv6 的主要优势之一是能够自动配置接口地址。这种能力允许支持 IPv6 的设备以即插即用模式工作。
做好准备
当使用 IPv6 自动配置的终端主机无法正常工作时,首先要做的是确保正确自动配置链路本地地址。这可以通过检查接口地址配置来验证。在 Unix/Linux 设备中,ifconfig -a将列出接口上配置的 IPv6 地址。如果您看不到任何东西,主机上的 IPv6 堆栈可能有问题。如果您看到 IPv6 链路本地地址,下一步是使用 Wireshark 捕获数据包,并查看路由器请求和广告消息是否交换。
怎么做...
- 当在终端主机上启用 IPv6 自动配置时,预计会向所有路由器多播地址发送路由器请求消息。

- 在 Wireshark 捕获中检查消息是否由主机发送:

- 如前面的屏幕截图所示,IPv6 主机发送一条 ICMPv6 路由器请求消息。可以观察到,ICMPv6 选项在路由器请求消息中携带终端主机的 MAC 地址。任何收到此消息的路由器都会缓存 MAC 地址以进行地址解析。
- 下一步是检查路由器是否正在发送路由器通告消息,其中包含终端主机可用于自动配置的相关详细信息:

- 如前面的屏幕截图所示,路由器向所有节点的组播地址
ff02::1发送路由器广告消息。局域网中的所有节点都将监听这个多播,因此将处理消息中的信息。 - ICMPv6 路由器广告消息携带最小 64 位的 IPv6 前缀细节。在前面的截图中,前缀
2001:db8:1000::/64被广告。这个前缀将用一个双定时器变量来通告。有效寿命是该前缀在链路上作为有效地址使用的时间长度。优选寿命是从接收到的前缀生成的地址优选的时间长度。
如果在捕获中没有看到前面的路由器通告,则需要验证路由器配置,以确保启用了相关的 IPv6 自动配置来通告前缀。
它是如何工作的...
自动配置 IPv6 地址的过程被称为无状态地址自动配置 ( SLAAC )。正如我们前面看到的,当 IPv6 在任何设备上启用时,默认情况下会分配一个来自fe80::/10范围的链路本地地址。根据 IPv6 地址格式的要求,IPv6 地址的接口 ID(最后 64 位)对于网络中的每个主机来说必须是唯一的。那么,我们如何确保自动配置的 IPv6 地址对于网络中的每台主机都是唯一的呢?在 LAN 中,MAC 地址是分配给每台主机的数据链路层标识符,在网络中应该是唯一的。这是为了确保帧被传送到正确的主机。IPv6 自动配置利用了 IPv6 自动配置的 MAC 地址的唯一性。但是有一个挑战 MAC 地址是 48 位大小,而接口 ID 是 64 位大小。MAC 地址由 24 位组织唯一标识符(OUI)和 24 位供应商分配的标识符组成。使用以下步骤将此 MAC 地址转换为 64 位 EUI-64 寻址格式:
- 16 位十六进制值
FFFE插入 OUI 和供应商分配的标识符之间 - OUI 中的 U/L 标志(位 7)被设置为
1
以下是前面步骤的说明:

产生的 64 位值连接到 64 位网络前缀{fe80::/10 + 54 bits all-zero value},以自动配置一个 128 位的唯一 IPv6 链路本地地址。顾名思义,该地址是本地链路范围的,因此不能用于与 LAN 网络外部的节点通信。
IPv6 SLAAC 从路由器发出全球唯一前缀信号,并利用终端主机生成 EUI-64 地址的能力来自动配置全球唯一的 IPv6 地址。ICMPv6 充当路由器向 LAN 网络中的终端主机通告全局唯一前缀的信令协议角色。以下是用于此目的的两种 ICMPv6 消息类型:
- 路由器请求消息
- 路由器广告消息
任何启用了 IPv6 自动配置的终端主机都将发送 ICMPv6 路由器请求消息。该 ICMPv6 消息的源地址通常设置为接口的本地链路地址,目的地址设置为所有路由器的本地链路组播地址(ff02::2)。该消息具有以下格式:

连接到 LAN 网络的路由器会定期发送 ICMPv6 路由器广告消息,其中包含前缀和其它相关详细信息,终端主机可以使用这些信息来自动配置地址。此 ICMPv6 消息的源地址将被设置为路由器接口的本地链路地址,目的地址将被设置为所有节点的本地链路多播地址(ff02::1)。该消息具有以下格式:

基于 DHCPv6 的地址分配
虽然 IPv6 SLAAC 更简单、更容易,因为它即插即用,但它不是自动配置 IPv6 地址的唯一选项。DHCPv6 是另一个集中式地址分配选项,可用于地址分配和管理。在这个菜谱中,我们将看到如何分析一些最常见的 DHCPv6 问题。
做好准备
确保您配置了 DHCPv6 服务器来为请求客户端分配 IPv6 地址。在 Unix/Linux 设备中,ifconfig -a将列出接口上配置的 IPv6 地址。如果您没有看到 DHCPv6 分配的地址,请在局域网中使用 Wireshark 捕获数据包。
怎么做...
- 检查终端主机是否发送了 DHCPv6 请求消息。这是客户端发送的第一条消息,用于标识提供 IPv6 地址的可用 DHCPv6 服务器列表。该消息将以源地址作为链路本地地址发送,而目的地址将是链路本地范围的多播地址,称为全 DHCP 中继地址(
ff02::1:2)。 - 如果您在捕获中没有看到请求消息,则终端主机可能没有正确配置或运行不正常:
- 检查相关接口是否启用了 IPv6。
- 检查是否为接口分配了链路本地地址。
- 检查接口是否能够从 DHCPv6 接收 IPv6 地址:

- 如果看到请求消息,请确保消息中包含客户端标识符。这是 DHCPv6 服务器用来唯一标识客户端的 ID,有助于客户端管理和为客户端重新分配相同的地址。任何没有客户端 ID 的请求消息都将被服务器忽略。因此,如果您看到此消息,但没有客户端 ID,则预计服务器不会为客户端分配 IPv6 地址。
- 接下来,检查在捕获中是否可以看到广告消息。如果服务器成功接收到带有客户端 ID 的请求消息,它将使用 DHCPv6 广告消息进行单播。如果网络中有多个服务器,所有的服务器都会回复一个广告消息。
- 如果您没有看到 DHCPv6 广告消息,可能是服务器配置不正确或运行不正常:
- 检查是否有服务器在监听
ff02::1:2。这可以通过简单地触发从客户端到ff02::1:2的 ICMPv6 ping 来验证。如果我们得到一个响应,它验证有一个服务器在监听请求消息。 - 检查服务器是否配置了 DHCPv6 池。
- 检查服务器端的 IPv6 或 DHCPv6 堆栈是否有任何问题。这可能因用于此目的的服务器类型而异:
- 检查是否有服务器在监听

- 前面的屏幕截图显示了来自服务器的 DHCPv6 广告消息。可以注意到,该消息将被单播给请求地址的客户端。广告消息携带服务器标识符,该标识符从网络中的其他可用服务器中唯一地标识该服务器..
- 下一步是检查客户端是否正在发送 DHCPv6 请求消息。如果广告消息没有携带客户端标识符(来自请求消息),客户端将忽略该消息:

-
如果您看到请求消息,请检查该消息是否携带相关的客户端和服务器标识符。该消息将被发送到全 DHCP 中继地址,因此它将被传送到网络中的所有服务器。
-
要检查的最后一条消息是 DHCPv6 回复消息。服务器从客户端收到 DHCPv6 请求消息后,将从本地地址池中分配一个 IPv6 地址。如果网络中有多台服务器,服务器标识符将用于标识哪个服务器将分配地址:

- 如前面的屏幕截图所示,DHCPv6 回复消息是携带 IPv6 地址的实际消息。此消息将从服务器单播到客户端。
它是如何工作的...
考虑下图,其中启用了从 DHCPv6 服务器接收 IPv6 地址的 DHCPv6 客户端将发送 DHCPv6 请求消息:

该消息是一个 UDP 数据包,目的端口为547。DHCPv6 请求消息将被泛洪到 all-DHCPv6 组播地址ff02::1:2。源地址将被设置为客户端的链路本地 IPv6 地址。
DHCPv6 服务器在收到请求消息后,将发送 DHCPv6 广告消息。此消息将被单播回 DHCPv6 客户端的链路本地地址。网络中可能存在一个或多个 DHCPv6 服务器,并且所有服务器都将发送 DHCPv6 广告消息。每个服务器都会在广告消息中包含自己的服务器 ID。
DHCPv6 客户端在接收到广告消息后将发送 DHCPv6 请求消息。该消息将携带一个服务器 ID,以识别请求地址分配的服务器。
DHCPv6 服务器将从本地地址池中分配一个 IPv6 地址,并发送带有前缀和相关详细信息(如前缀的生命周期)的 DHCPv6 回复消息。
以下是一些有用的过滤器:

怎么做...
- 在下图中,假设 PC1 (
2001:DB8::1)正试图联系 PC2 (2001:DB8::2):

IPv6 拓扑
-
从 PC1 到 PC2 触发 IPv6 ping 探针。这将触发从 PC1 到 PC2 的 IPv6 ND 邻居请求。
-
检查 PC1 上的本地 IPv6 邻居表,查看本地表中是否填充了
2001:DB8::2的 MAC 地址。不同的供应商使用不同的 show 命令来查询本地表:- 在 macOS 中,使用
ndp -na列出 IPv6 邻居的详细信息。 - 在 Windows 中,使用
netsh interface ipv6 show neighbor。
- 在 macOS 中,使用
-
如果在 PC1 中看到
2001:DB8::2的 MAC 地址,它确保 PC2 接收到来自 PC1 的 IPv6 邻居请求,并回复邻居广告

- 如果在 PC1 中没有看到
2001:DB8::2的 MAC 地址,将 Wireshark 连接到交换机上的一个空闲端口并捕获数据包(使用端口镜像)。在连接 PC1 和 PC2: 的端口的入口和出口方向上执行捕获将是有用的

- 检查在捕获中是否看到来自 PC1 的 ICMPv6 邻居请求消息。前面的截图显示了来自 PC1 的消息。PC1 的 MAC 地址将包含在 IPv6 选项中:
- 如果在连接 PC1 (入口方向)的端口捕获中发现 ICMPv6 NS 数据包,但在连接 PC2 (出口方向)的端口捕获中没有发现,则交换机可能丢弃了该数据包。
- 如果在连接 PC1 的端口捕获上没有看到 ICMPv6 NS 数据包,检查连接 PC1 到交换机的物理电缆或者 PC1 的 NIC 端口。
- 如果在入口和出口捕获中都看到 ICMPv6 NS 数据包,但没有 ICMPv6 NA,请检查 PC2 。
- 同样,检查在从 PC2 的捕获中是否看到 ICMPv6 邻居广告数据包:
- 如果在连接 PC2 (入口方向)的端口捕获中发现 IPv6 NA 数据包,但在连接 PC1 (出口方向)的端口捕获中没有发现,则交换机可能丢弃了回复数据包。
- 如果在连接 PC2 (入口方向)的捕获端口上没有看到 IPv6 NA 数据包,请检查连接 PC2 到交换机的物理电缆。
- 如果在连接 PC1 和 PC2 的端口上的两个捕获中都看到 IPv6 NA 数据包,但是在 PC1 IPv6 邻居表中还没有条目,则检查 PC1 。
以下是一些有用的过滤器:

IPv6 重复地址检测
重复地址一直是 IPv4 网络中的一个难题。IPv4 没有内置的重复地址检测机制,这会导致生产网络出现问题。考虑到这些挑战,IPv6 设计了内置的重复地址检测(DAD) 机制。
它是如何工作的...
当主机使用静态或其他动态机制(如 SLAAC 或 DHCPv6)配置了 IPv6 地址时,主机会在将地址分配给接口之前向新的 IPv6 地址发送 ICMPv6 NS 消息。如果为 DAD 验证的地址是主机唯一可用的 IPv6 地址,则发送的 NS 消息将带有全零 IPv6 地址,如以下屏幕截图所示:

如 ND 部分所述,NS 消息将被发送到被请求的节点多播地址。如果它收到来自任何节点的响应,主机将检测到具有相同地址的另一台主机的存在,因此它不会分配这个重复的地址。如果它没有从任何主机收到任何 NA,则分配和使用 IPv6 地址是安全的。
十一、传输层协议分析
在本章中,您将了解:
- UDP 操作原理
- UDP 协议分析及故障排除
- TCP 操作原理
- TCP 连接问题故障排除
- TCP 重新传输问题疑难解答
- TCP 滑动窗口机制
- TCP 增强–选择性 ACK 和时间戳
- TCP 吞吐量故障排除
介绍
在本章中,我们将主要关注 OSI 参考模型的传输层,并学习如何分析各种第 4 层协议(TCP/UDP/SCTP)的运行。传输层协议是主机到主机的通信协议,负责不同主机上运行的终端应用之间的数据交换。用户数据报协议 ( UDP )是一种简单的无连接协议,它只是将数据报传递给预定的接收者,没有任何可靠性机制。另一方面,传输控制协议 ( TCP )是面向连接的协议,其主要目的是在终端应用之间提供可靠的、拥塞感知的数据传输。
超过 80%的互联网总流量利用 TCP 作为传输层协议。任何对丢包敏感的终端应用都需要可靠性,这类应用使用 TCP 作为传输层协议。例如,使用 HTTP 的 web 服务器使用 TCP 端口80。虽然 TCP 提供了可靠性,但它需要重新传输丢失的数据;这可能会引入抖动和延迟。一些终端应用,如 IP 语音/视频,对丢包不太敏感,但对抖动/延迟更敏感。此类应用使用 UDP 而不是 TCP 作为传输层协议。
在本章中,我们将讨论不同传输层协议的基本原理、常见问题以及如何使用 Wireshark 来分析协议并排除故障。
UDP 操作原理
UDP 是一种轻量级传输层协议,它基于最大努力工作。对于可以容忍数据包丢失的终端应用,或者如果可以在应用层考虑可靠性,UDP 是传输层协议的一个很好的选择。例如,小文件传输协议 ( TFTP ),这是一个简单的文件传输协议,利用 UDP 作为传输层协议。TFTP 会对应用层收到的每个数据报块发送确认。因此,即使 UDP 没有内置的可靠性机制,这样的应用仍然可以使用 UDP 作为传输层协议。
对于 UDP,IP 报头的协议字段将被设置为17。UDP 报头的格式如下:

图 11.1: UDP 报头格式
发起 UDP 流的主机将使用从范围1024到65535的任何本地未使用的端口。目的端口将用于识别目的主机中的终端应用。目的港通常是从众所周知的1到1023。
下表列出了一些众所周知的 UDP 应用端口:

表 11.2:众所周知的 UDP 应用
以下是 Wireshark 捕获 UDP 数据包的示例:

图 11.3: UDP 数据包 Wireshark 捕获
UDP 协议分析及故障排除
虽然大多数使用 UDP 的应用可以容忍数据包丢失,但是任何 UDP 流的大量数据包丢失都可能导致非常令人沮丧的最终用户体验。在本节中,我们将讨论 UDP 流故障的一些常见原因,以及如何使用 Wireshark 来分析和排除此类故障。
做好准备
当 UDP 流运行不正常时,第一步是确保到远程主机的网络连接工作正常。这可以通过使用实用工具(如 Ping 或 Traceroute)来验证。可以按照第 10 章、网络层协议和操作中的定义对网络连接中的任何故障进行故障排除。如果网络连接正常,我们执行以下步骤。
怎么做...

图 11.4: UDP 拓扑
在上图中,在 PC1 ( 10.1.100.101)和 PC3 ( 10.1.200.101)之间使用 UDP 流的终端应用运行不正常:
-
确保防火墙或其他安全设置允许 UDP 端口。传输路径中或端点上不允许 UDP 端口的防火墙可能会丢弃数据包。
-
获取 PC1 向其发送数据的 UDP 目的端口,并检查 PC3 上的相关 UDP 端口是否已打开以接收数据。这可以通过检查 PC3 上的进程或执行端口扫描来完成。
-
当可以访问 PC3 时,可以在主机上直接使用
netstat,可以检查目的端口是否打开。 -
当无法访问 PC3 时,可以使用端口扫描机制进行检查。有各种端口扫描工具可用于此目的。如果端口没有在 PC3 上打开,它将丢弃数据包并发送 ICMP 错误消息(目的端口不可达)。
-
如果端口打开,下一步是执行 Wireshark 捕获和数据包分析。由于 UDP 是无连接的,因此建议在尽可能靠近两个端点的地方同时捕获数据包。

图 11.5 UDP 校验和
在前面的屏幕截图中,检查 UDP 校验和是否正确。如果校验和未通过验证,目的主机将会丢弃该数据包。由于 UDP 是无连接的,因此不会发送任何关于校验和错误的错误消息或确认。默认情况下,Wireshark 可能不会验证捕获中的校验和。这需要在工具中启用,如下所示:
-
转到编辑并点击首选项。
-
单击协议,然后选择 UDP。
-
如果可能,设置验证 UDP 校验和。
-
如果 UDP 校验和正常,比较两次捕获的 UDP 流,确保数据包到达目的地:

图 11.6: UDP 流索引
- Wireshark 允许我们跟踪特定的 UDP 流,该流可用于在捕获之间进行比较。每个捕获都有一个 UDP 流索引号,如前面的屏幕截图所示。这可以用作过滤器来跟踪 UDP 流。它基本上按接收顺序列出了具有相同源/目的 IP 和源/目的 UDP 端口的所有数据包。
- 如果在比较的捕获中没有观察到问题,则可能是主机堆栈中的问题。
以下是一些有用的 UDP 过滤器:

TCP 操作原理
TCP 是一种高度可靠的传输层协议,用于面向连接的主机到主机通信。对数据丢失非常敏感的终端应用可以利用 TCP 作为传输层协议。大多数互联网流量由 TCP 控制。它被许多应用广泛使用,包括电子邮件、对等文件共享和著名的 WWW 应用。TCP 从应用层接收数据,并将其分割成数据单元,这些数据单元将与 TCP 报头封装在一起。封装了 TCP 报头的协议数据单元称为段。如前所述,TCP 是面向连接的,因此将使用三次握手在端点之间建立连接。可靠性是通过确认每个数据段的接收方来实现的,任何丢失的数据段都将被重新传输。
对于 TCP,IP 报头的协议字段将被设置为6。TCP 报头的格式如下:

图 11.7: TCP 报头格式
与固定 8 字节报头的 UDP 报头相比,TCP 的大小为 20 字节。根据 TCP 选项的存在,大小可能会有所不同。序列号和确认号在为终端应用数据传输提供可靠性方面起着关键作用。更多细节将在接下来的食谱章节中介绍。
下表列出了一些众所周知的 UDP 应用端口:

表 11.8:众所周知的 UDP 应用
以下是 Wireshark 捕获 TCP 数据包的示例:

图 11.9: TCP 数据包捕获
TCP 连接问题故障排除
当两个 TCP 进程希望通信时,它们打开连接,发送数据,然后关闭连接。当您打开浏览器连接到互联网,并从您的邮件客户端连接到邮件服务器,或者通过 Telnet 连接到您的路由器或任何其他通过 TCP 工作的应用时,就会发生这种情况。
当 TCP 打开连接时,它从源端口向目的端口发送一个打开连接的请求。在应用的建立或关闭过程中可能会出现一些问题。使用 Wireshark 来定位和解决这些问题是这个菜谱的目标。
做好准备
如果您遇到以下问题之一,请使用 Wireshark 找出原因。这些问题可能有多种类型,如下所示:
- 您尝试运行一个应用,但它不起作用。你试着浏览互联网,你没有得到任何回应。
- 您尝试使用您的邮件,但无法连接到邮件服务器。
- 问题可能是由简单的原因引起的,例如服务器关闭,应用没有在服务器上运行,或者网络在通往服务器的途中出现故障。
- 问题也可能是由更复杂的原因引起的,例如 DNS 问题、服务器上的内存不足使您无法连接(例如,由于应用的高内存消耗)、重复的 IP 以及许多其他原因。
在这个食谱中,我们关注这些去/不去的问题;它们通常很容易解决。
怎么做...
在这里,您将了解一些指标,以及使用 Wireshark 调试 TCP 连接问题时可以看到的情况。通常,这些问题会导致您尝试运行一个应用却没有任何结果。
当您尝试运行一个应用(例如,一个数据库客户端、一个邮件客户端、监视摄像机服务器等)而没有得到任何输出时,请按照下列步骤操作:
- 验证服务器和应用正在运行。
- 验证您的客户端正在运行,您已经配置了 IP 地址(手动或通过 DHCP),并且您已连接到网络。
- 对服务器执行 Ping 命令,并验证您已连接到该服务器。
- 在捕获文件中,查找以下模式之一:
- 没有响应的三次 SYN 消息
- 带有复位 ( RST )响应的 SYN 消息
在这两种情况下,可能是防火墙阻止了特定的应用,或者该应用没有运行。
在下面的截图中,我们看到了一个简单的例子,我们无法访问 web 服务器81.218.31.171(数据包61、62和63)。这可能是因为防火墙不允许,或者只是因为服务器有问题。我们也可以看到我们有一个到另一个网站的连接(108.160.163.43;数据包65、66、67),所以连接问题只出在81.218.31.171上。

在下图中,我们看到了相同情况的一个稍微复杂一点的例子。在这种情况下,我们有一个摄像机服务器,客户希望登录并在远程站点上观看摄像机。摄像机的服务器有 IP 地址135.82.12.1,问题是客户可以通过登录窗口获得服务器的主网页,但无法登录系统。在下面的截图中,我们可以看到我们打开了一个到 IP 地址135.82.12.1的连接。我们可以看到一个到 HTTP 服务器的 TCP 连接已经打开,起初看起来没有连接问题:

当我们将所有流量过滤到 IP 地址135.82.12.1,即摄像机服务器时,问题就出现了。
在这里,我们可以看到,当我们尝试连接到 TCP 端口6036时,我们得到一个 RST/ACK 响应,这可能是由于以下原因:
- 阻止端口
6036的防火墙(这里就是这种情况) - 当配置了端口地址转换 ( PAT )并且我们只转换端口
80而不转换6036时 - 用户名和密码的验证是在 TCP 端口
6036上完成的,防火墙只允许端口80,验证被阻止,应用无法工作

总而言之,当您无法连接到服务器时,请检查服务器和客户端,查看是否所有的 TCP/UDP 端口都在整个网络中转发,以及是否有您不知道的端口。
在某些情况下,当您在网络中安装新的应用时,最好连接客户端和服务器上的 Wireshark,并检查它们之间实际运行的内容。软件公司不会总是告诉你他们实际上在网络上传输什么(有时这是因为他们不知道!)和防火墙可以阻止你不知道的信息。
它是如何工作的...
启动 TCP 连接,如下图所示:

它分三步进行:
- 客户端的 TCP 进程发送一个 SYN 数据包。这是一个 SYN 标志设置为
1的数据包。在此数据包中,客户端:- 指定其初始序列号。这是客户端发送给服务器的第一个字节的编号。
- 指定其窗口大小。这是客户端分配给进程的缓冲区(在客户端 RAM 中的位置)。
- 设置它将使用的选项:MSS、选择性 ACK 等。
- 当服务器接收到建立连接的请求时,服务器:
- 向客户端发送 SYN/ACK 数据包,确认接受 SYN 请求。
- 指定服务器的初始序列号。这是服务器发送给客户端的第一个字节的编号。
- 指定服务器的窗口大小。这是服务器分配给进程的缓冲区大小(在服务器 RAM 中的位置)。
- 响应请求的选项,并在服务器端设置选项。
- 当接收到服务器的 SYN/ACK 时,客户端:
- 向服务器发送 ACK 数据包,确认接受来自服务器的 SYN/ACK 数据包。
- 指定客户端的窗口大小。这是客户端分配给进程的缓冲区大小。虽然这个参数是在第一个数据包(SYN 数据包)中定义的,但是服务器将引用这个参数,因为它是服务器接收到的最新窗口大小。
在 TCP 报头的选项字段中,我们有以下主要选项:
- 最大段尺寸 ( MSS ):这是 TCP 数据报的最大尺寸,也就是从 TCP 头开始到整个包结束的字节数。
- 窗口大小 ( WSopt ):该因子与 TCP 报头中的窗口大小字段相乘,以通知接收方有更大的缓冲区。由于标头中的最大窗口大小是 64 KB,因此因子 4 等于 64 KB 乘以 4,即 256 KB 的窗口大小。
- SACK :选择性确认(Selective ACK)是一个选项,使连接双方能够确认特定的数据包,所以当单个数据包丢失时,只会再次发送这个数据包。连接双方必须就连接建立中的 SACK 达成一致。
- 时间戳选项 ( TSopt ):这个参数在本章前面已经解释过了,指的是客户端和服务器之间的延迟测量。
到了这个阶段,双方:
- 同意建立联系
- 知道对方的初始序列号
- 知道对方的窗口大小
在建立连接时,除了完全的三次握手之外的任何事情都应该被认为是一个问题。这包括没有响应的 SYN、SYN 然后 SYN/ACK 和没有最后 ACK、用复位(RST 标志等于 1)应答的 SYN 等等。
Wireshark 允许用户以图形方式查看 TCP 数据段交换的完整流程。示例如下:

要查看上述格式的 TCP 流,请单击属于该 TCP 流的一个数据包,并执行以下操作:
- 转到统计
- 点击流程图
还有更多...
一些经验法则如下:
- 如果一个 SYN 数据包被 RST 应答,查找阻止端口号的防火墙。
- 没有任何响应的三重 SYN 的出现,要么是由于应用没有响应,要么是防火墙阻止了特定端口上的请求。
- 始终验证您是否拥有网络地址转换 ( NAT )、端口转发以及使用 TCP 或 UDP 端口的机制。这些机制会干扰 TCP 的标准操作。
当 TCP 端点建立新的 TCP 连接时,SYN 数据包中的序列号将以任意数字开始,并且每 1 个字节递增 1。为了便于分析,Wireshark 将序列号替换为相对序列号,使得 SYN 数据包从序列号 0 开始,并按顺序递增。

在前面的截图中,可以观察到序列号被设置为 0,并标记为(相对序列号)。这不是 TCP 端点交换的真实序列号。通过禁用协议首选项中的相对序列号选项,可以保留原始序列号。

请按照下列步骤禁用该选项:
- 前往偏好设置
- 点击协议,然后选择 TCP
- 禁用相对序列号
TCP 重新传输问题疑难解答
当 TCP 发送一个包或一组包时(参考它是如何工作的...在这个配方的末尾,它等待一个确认来确认这些包的接受。重传显然是由于没有到达的分组或者没有按时到达的确认而发生的。这可能有各种各样的原因,找到正确的原因是这个食谱的目标。
做好准备
当您发现网络变慢时,原因之一可能是重新传输。将端口镜像中的 Wireshark 连接到可疑的客户端或服务器,并观察结果。
在本菜谱中,我们将看到 Wireshark 可能会遇到的一些常见问题以及这些问题的含义。
怎么做...
让我们开始吧:
- 开始在相关接口上捕获数据。
- 转到分析|专家信息菜单。
- 在“注释”下,查找重新传输。
- 您可以单击(+)号,将会打开一个重新传输列表。在每一行上单击鼠标,就会在数据包捕获窗格中显示重新传输。
- 现在重要的问题来了:如何定位问题?
当您通过通信线路、服务器接口、互联网链接或任何其他线路捕获数据包时,您可能会收到来自多个 IP 地址、多个应用甚至每个应用上特定程序的流量。例如,在数据库应用中访问特定的表。这里重要的是定位发生重新传输的 TCP 连接。
您可以通过以下方式查看重新传输的来源:
- 在专家信息窗口中逐个移动数据包,并在数据包捕获窗格中找出哪些数据包(适合有经验的用户)
- 在 packet 窗格中,您可以配置显示过滤器
expert.message == "Retransmission (suspected)",您将在捕获文件中获得所有的重新传输 - 应用过滤器,然后在“Statistics à Conversations”窗口的右下角选中“Limit to display filter”部分
案例 1–向多个目的地重新传输
在下面的屏幕截图中,您可以看到我们已经在许多服务器之间进行了多次重新传输,目的端口为80 (HTTP)。从这里我们还可以看到的是10.0.0.5端口发送重传;因此,数据包在通往互联网的途中丢失了,或者网络服务器没有及时发回确认信息。

嗯,很明显网络线路出了问题。我们怎么知道它是什么?
- 从统计菜单中,打开 IO 图。
- 在这种情况下(情况 1),我们可以看到该行几乎是空的。这可能是一个错误或另一个加载到互联网上的线路。
- 您可以通过登录到通信设备或任何 SNMP 浏览器(当设备上配置了 SNMP 代理时)来检查丢包和导致丢包的错误。查看以下截图供参考:
![]()
情况 2–单个连接上的重新传输
如果所有的重新传输都在一个 IP 上,只有一个 TCP 端口号,这将是一个缓慢的应用。我们可以在下面的截图中看到这一点:

对于单个连接上的重新传输,请执行以下步骤:
- 我们也可以通过从“统计”菜单打开“对话”并选择“限制显示过滤器”复选框来验证这一点。我们将获得所有有重新传输的会话,在这种情况下,只有一个会话。
- 通过选择 IPv4:1 选项卡,如下面的屏幕截图所示,我们将看到我们从哪些 IP 地址获得重新传输:

- 通过选择 TCP:6 选项卡,如下图所示,我们将看到从哪个端口号(或应用)获得重新传输:

要找出问题,请执行以下步骤:
- 查看 IO 图,确保线路不忙。
繁忙通信线路的指示将是非常接近线路最大带宽的直线。例如,如果您有一条 10 Mbps 的通信线路,您可以对其进行端口镜像,并在 IO 图中看到一条接近 10 Mbps 的直线。这是负载线的良好指示。一条非繁忙的通信线路会有许多起伏、峰值和空白间隔。
- 如果线路不忙,这可能是 IP 地址
10.1.1.200的服务器上的问题(10.90.30.12正在发送大部分重新传输,因此可能是10.1.1.200响应缓慢)。 - 从数据包窗格中,我们可以看到该应用是 FTP-DATA。FTP 服务器可能在活动模式下工作。因此,我们在一个端口(
2350)上打开了一个连接,服务器将端口更改为1972,因此它可能是一个缓慢的无响应 FTP 软件(这最终是这里的问题)。
案例 3–重传模式
在 TCP 重传中需要注意的一件重要事情是,重传是否有你可以看到的任何模式。
在下面的屏幕截图中,我们可以看到所有的重新传输都来自单个客户端和服务器上的 NetBIOS 会话服务(TCP 端口139)之间的单个连接。

看起来像是一个简单的服务器/应用问题,但是当我们查看数据包捕获窗格时,我们可以看到一些有趣的东西(参考下面的截图):

有趣的是,当我们观察重新传输的模式时,我们可以看到它们每 30 毫秒循环发生一次。这里的时间格式是秒,因为之前显示的数据包和时间刻度都是以秒为单位的。
这个案例中的问题是,一个客户在软件中执行了一个财务程序,导致软件每 30-36 毫秒变慢一次。
案例 4–由于无响应的应用导致的重新传输
重新传输的另一个原因可能是客户端或服务器没有响应请求。在这种情况下,您将看到五次重新传输,时间差不断增加。在这五次连续的重新传输之后,发送方认为连接丢失(在某些情况下,将发送 reset 来关闭连接,这取决于软件实现)。断开连接后,可能会发生两件事:
- 客户端将发送一个 SYN 请求来打开一个新的连接。在这种情况下,用户将看到应用冻结,15-20 秒后,它将再次开始工作。
- 不会发送 SYN,用户将不得不再次运行应用(或它的特定部分)。
在下面的截图中,我们可以看到一个打开新连接的情况:

情况 5 -由于延迟变化导致的重传
TCP 是一种只要延迟不变就能容忍延迟的协议。当延迟发生变化时,您可以期待重新传输。确定这是否是问题所在的方法如下:
- 当然,首先要做的是 ping 目的地,并获得通信线路延迟的第一条信息。看看它是如何工作的...一节看看应该怎么做。
- 检查延迟变化,这可能是由于以下原因造成的:
- 不稳定或繁忙的通信线路。在这种情况下,您将使用
ping命令看到延迟变化。它通常发生在带宽较窄的线路上,有时也发生在蜂窝线路上。 - 负载过重或效率低下的应用。在这种情况下,您将只看到这个特定应用的许多重新传输。
- 加载的通信设备(CPU 负载、缓冲器负载等)。您可以通过直接访问通信设备来检查这一点。
- 不稳定或繁忙的通信线路。在这种情况下,您将使用
- 使用 Wireshark 工具,如第 18 章、中所述,排除带宽和延迟问题。
TCP 重新传输的底线是,只要我们没有太多的重新传输,重新传输是 TCP 的自然行为。当重新传输约为 0.5%时,性能将开始下降,而断开连接将在约为 5%时开始。它还取决于应用及其对重传的敏感性。
找出它是什么
当您在通信链路(到互联网、服务器、站点之间或任何其他链路)上看到重新传输时,请执行以下步骤:
- 找到问题所在。是特定的 IP 地址,特定的连接,特定的应用,还是其他什么问题?
- 检查问题是由于通信链路、数据包丢失还是服务器或 PC 速度慢。检查应用是否缓慢。
- 如果不是由于上述原因,请检查延迟变化。
它是如何工作的...
我们来看看 TCP 的常规操作,以及可能出现的问题的原因。
TCP 序列/确认机制的常规操作
TCP 内置的机制之一是重新传输机制。这种机制支持恢复损坏、丢失、重复或无序交付的数据。
这是通过给每个传输的字节分配一个序列号,并期待来自接收方的确认 ( ACK )来实现的。如果在超时间隔内没有收到 ACK,数据将被重新传输。
在接收端,序列号用于验证信息是否按照发送的顺序到达。如果没有,请将其重新排列到之前的状态。
该机制的工作原理如下:
-
在连接建立时,双方告诉对方他们的初始序列号是多少。
-
发送数据时,每个数据包都有一个序列号。序列号表示 TCP 有效负载中第一个字节的编号。发送的下一个包将具有前一个包的序列号加上前一个包中的字节数加 1(在下一个屏幕截图中)。
-
当一个包被发送时,重传超时 ( RTO )计数器开始从它被发送的时刻开始计数时间。
重传超时计时器基于 Van Jacobson 拥塞避免和控制算法,该算法基本上认为 TCP 可以容忍高延迟,但不能容忍快速延迟变化。
- 当接收方收到数据包时,它会用 ACK 数据包进行应答,告知发送方发送下一个数据包。在下面的截图中,您将看到它是如何工作的:
从这里可以看到10.0.0.7正在从62.219.24.171下载一个文件。该文件通过 HTTP 下载(Wireshark 窗口被配置为显示编辑|首选项列配置中的tcp.seq和tcp.ack,如第 1 章、Wireshark v2 简介中所述)。

从这里,62.219.24.171发送序列号以85101, 86557结尾的数据包,之后10.0.0.7发回一个 ACK,告诉发送者发送以88009结尾的数据包。然后发送者发送它。诸如此类。
你可以在这里看到一个例子:

什么是 TCP 重新传输,它们会导致什么?
当数据包确认丢失或 ACK 没有按时到达时,发送方将执行两项操作:
- 再次发送数据包,如本菜谱前面所述
- 降低吞吐量
在下一个屏幕截图中,我们看到了一个降低发送方吞吐量的重新传输示例(为清晰起见,添加了红色细线):

还有更多...
TCP 可以容忍高延迟,只要它们相当稳定。定义 TCP 在延迟变化下的行为的算法被称为 Van Jacobson 算法,以其发明者的名字命名。Van Jacobson 算法允许高达平均延迟 3-4 倍的容差;因此,例如,如果您有 100 毫秒的延迟,那么 TCP 将容忍高达 300-400 毫秒的延迟,只要它们不经常改变。
请参见
- 你可以在 http://ee.lbl.gov/papers/congavoid.pdf 查看范·雅各布森算法
TCP 滑动窗口机制
当端点建立 TCP 会话时,TCP 报头中的窗口大小字段将用于通知接收缓冲区容量,并控制可以接收和处理的数据量。每个端点将维护一个本地接收窗口 ( RWND )。这是接收器可以接收用于缓冲和处理的最大数据量。端点会将此 RWND 值包含在 TCP 报头中。发送方使用 RWND 作为输入来决定滑动窗口的大小。它可以在等待确认之前向窗口大小中定义的对等体发送 TCP 数据段。

发送方端点通过管理等待确认的未完成 TCP 数据段的数量来维护滑动窗口。当发送方收到已发送数据段的 ACK 并等待确认时,它会向右滑动窗口。
如果没有滑动窗口机制,TCP 发送方将会一次发送一个数据段,并在发送下一个数据段之前等待确认,从而对整个 TCP 吞吐量产生重大影响。
做好准备
连接服务器上的 Wireshark 并捕获数据包。通过过滤特定的 TCP 流来分析滑动窗口行为要容易得多。为了跟踪特定的流,选择要分析的流的第一个 TCP 包(SYN 包),并执行以下操作:
- 去分析
- 选择关注
- 选择 TCP 流
怎么做...
在以下拓扑中,PC1 正在与 PC3 建立 TCP 会话以传输数据。

检查 TCP 端点是否正在用大于 0 的值交换 TCP 窗口大小。如果窗口大小设置为 0,接收器将无法接收任何流量,数据传输将会失败。


前面是 TCP 零窗口的一个例子。接收节点(10.0.0.9)不能接受任何新的会话或数据,因此当它从任何对等方接收到新 TCP 会话的 SYN 段时,它用 SYN,ACK 段进行回复,并将窗口大小设置为 0。通常情况下,一旦接收器准备好接收额外数据,这种情况就会自行纠正。当接收方发送零窗口消息时,看到发送方发送 TCP 零窗口探测是正常的。这是发送方发送的消息,用于查看接收方的零窗口条件是否仍然为真。对于从 TCP 零窗口消息的接收器接收的每个响应,它在发送下一个探测消息之前指数地递增计时器。
如果数据包捕获持续显示接收方正在以窗口大小为 0 发送,则可能表明终端服务器运行不正常,或者传入端口缓冲区已满或被阻塞,可能需要在服务器端进行额外的分析来解决任何问题。

一旦服务器上的问题得到解决,它应该能够协商正确的窗口大小。在前面的示例中,10.0.0.1在 SYN,ACK 段中使用非零窗口大小进行回复。可以注意到,服务器还包括一个 TCP 选项,它携带值为9的窗口比例。TCP 对等体将使用窗口大小和窗口比例的组合来识别滑动窗口大小。关于窗口缩放的更多细节在中...一节。
在所有后续数据包中,每个对等体都将包括窗口大小,对等体将使用该窗口大小来放大或缩小滑动窗口大小。
它是如何工作的...
TCP 滑动窗口机制的工作原理如下:
- 连接建立后,发送方向接收方发送数据,填满接收方窗口。
- 几个数据包之后,接收方向发送方发送 ACK,确认接收到发送方发送的字节。发送 ACK 会清空接收器窗口。
- 当发送方填充窗口时,这个过程是连续的,接收方清空窗口并发送信息确认。
- 增大接收方窗口大小会告诉发送方增加吞吐量,而减小接收方窗口大小会告诉发送方减少吞吐量。它根据以下 WS/RTT 规则工作(根据 TCP 版本有一些变化):

TCP 报头中的窗口大小字段以字节表示,并且该字段是允许携带最大值 65,535 的 16 位字段。对于大多数硬件,可以处理超过 65,535 字节的 TCP 数据段。为了发出大于 65,535 的窗口大小的信号,在初始 TCP 三次握手期间包括 TCP 窗口比例。TCP 对等使用窗口大小值和比例值来导出窗口大小。

例如,当窗口大小设置为 457 并且比例值设置为 6 时,滑动窗口将被计算为 29,248 字节。

Wireshark 计算滑动窗口,并将其显示为前面示例中突出显示的内容。
TCP 增强–选择性 ACK 和时间戳
一段时间以来,已经引入了各种 TCP 增强来增强 TCP 性能。在本节中,我们将讨论这些重要的增强功能,并了解如何使用 Wireshark 进行分析。
做好准备
当您观察到 TCP 流性能下降并且不能按预期工作时,请连接 Wireshark 以捕获 TCP 流进行分析。
怎么做...
为了向后兼容,类似于选择性确认 ( SACK )或 TCP 时间戳的功能增强将在最初的三次握手期间进行协商。TCP 端点将在 SYN 和 SYN/ACK 数据包中包含相关的 TCP 选项。
TCP 选择性确认选项
TCP SACK 是一个 TCP 选项,将包含在 SYN 和 SYN/ACK 段中。当 TCP 端点启用了 TCP SACK 功能时,端点通过在 SYN 数据包中包含该功能来通知对等端的能力。

如前例所示,TCP SACK 选项将出现在 SYN 和 SYN/ACK 数据段中。如果在捕获中没有看到此 TCP 选项,请确保在 TCP 端点上启用了该功能。根据供应商和平台的不同,默认情况下可能会启用此功能。

当接收方想要选择性地确认某些数据段时,它会在 SACK 选项中包含相关的序列号。在前面的例子中,接收方确认它正在等待序列号为3321的数据段。但也包括同一段中序号为3845到4369的 SACK。关于 SACK 如何工作的更多细节,请查看它是如何工作的...一节。
TCP 时间戳选项
与 TCP SACK 一样,TCP timestamp 是一个 TCP 选项,将包含在 SYN 和 SYN/ACK 数据段中。当 TCP 端点启用了 RTT 测量功能时,端点会向对等方发出在 SYN 数据包中包含 TCP 时间戳的信号。当两个端点都支持此功能时,发送方将在转发给对等方的所有数据段中包含 TCP 时间戳选项。

如前例所示,TCP 时间戳选项将出现在 SYN 和 SYN/ACK 数据段中。如果在捕获中没有看到此 TCP 选项,请确保在 TCP 端点上启用了该功能。根据供应商和平台的不同,默认情况下可能会启用此功能。
如前面的屏幕截图所示,发送方在发送数据段时会在 TSval 字段中包含当地时间。发送方将在时间戳回应回复 ( TSecr )中包含一个零值。

接收方应仅在 Ack 包中包含 TSecr。如前面的示例所示,接收方在回复时包含了 TSecr 和 TSval。发送方将使用这两者的组合来导出 RTT 值。关于该功能的更多细节,请参见它是如何工作的...一节。
它是如何工作的...
TCP 选择性确认
在前面几节中,我们讨论了 TCP 序列号和确认号如何帮助为最终应用提供可靠性。但是默认确认和重传行为不是吞吐量有效的,这是由于 TCP 要求从滑动窗口内的丢失段重传所有段的性质。下面的插图有助于我们更好地理解默认行为。

举例来说,我们使用一个窗口大小为五段的 TCP 会话。根据窗口大小,发送方在等待确认之前可以发送五个数据段。因此,它发送五个段,其中 seq=2,3,4,5,6 。接收器已经接收到具有序列=2,4,5,6 的段,但是它没有接收到具有序列=3 的段。发送 ACK 时,接收器发送 ack=3 。如前所述,ender 不仅会重新传输带有 seq=3 的段,还会重新传输窗口中的剩余段。
这会导致重复数据段的重新传输,从而导致吞吐量问题。
选择性确认通过允许接收器选择性地确认不连续的数据段来解决这个问题。TCP SACK 是一个 TCP 选项,将在初始 TCP 三次握手期间进行协商。

在同一个示例中,发送方和接收方都启用了 TCP SACK。请注意,TCP SACK 将包含在 SYN 数据段中,以向对等方发送信号。使用相同的例子,当接收器没有接收到具有 seq=3 的段时,它发送具有 ack=3 的 ack 段,但是它还包括针对 4、5、6 的选择性 ACK。这将指示发送方只发送丢失的数据段,而不重新传输其他接收到的数据段。这避免了重复,并有助于提供高效的吞吐量。
TCP 时间戳
某些终端应用受益于连续的往返时间()测量。RTT 测量通过利用 TCP 时间戳选项来执行。TCP 时间戳选项将包含在所有数据段中。该选项带有两个字段,即 TSval 和 TSecr。发送方将在 TSval 字段中包含发送数据段的本地时间,TSecr 将被设置为 0。接收方在确认数据段后,会在 TSval 中包含本地时间,并包含来自发送方的最后一个接收数据段的 TSval。
发送方将在 ACK 段中使用 TSval 和 TSecr 的组合来计算 RTT。为了效率,大多数实现将在每个窗口中一个或两个段中执行 RTT 测量,而不是在每个段的基础上执行。 **# 还有更多...
虽然上一节讨论了几个 TCP 选项,但是还有更多这样的选项用于不同的目的。以下是几个选项:
- TCP 认证
- 最大段尺寸
- TCP 压缩过滤器
- 多路径 TCP
TCP 吞吐量故障排除
行业中有各种工具可用于执行网络吞吐量测量,这些工具本质上更多是带外的。此类工具建立测试 TCP 会话,并由监视器执行。虽然这些工具很有用,但性能计算是在生产流量上进行的。使用 TCP 作为传输协议的 SLA 受限的终端应用需要一种机制来确保 TCP 流达到期望的吞吐量。为了证实这一点,我们需要一种简单有效的机制来测量每个 TCP 流的吞吐量。这可以用于各种目的,包括性能基准测试、基于 SLA 的服务保证等等。
有许多原因可能会影响 TCP 吞吐量的性能,其中一些原因已在前面的章节中讨论过,如重新传输、会话重置。在本节中,我们将讨论如何使用 Wireshark 来执行 TCP 吞吐量测量和分析。
做好准备
为了执行吞吐量测量,您必须做的第一件事是捕获流。您可以在终端服务器(如果支持的话)或传输路径上执行捕获。如前所述,使用相关过滤器仅显示要测量的 TCP 流。
怎么做...
- 检查正在测量的 TCP 流的吞吐量。这是通过过滤相应的 TCP 流,然后检查 IO 图的吞吐量来实现的。以下是查看吞吐量图表的步骤。
- 转到统计并选择 IO 图形。
- 现在用
tcp.stream == <stream number>过滤器创建一个新图形。 - 示例如下所示:

-
如果输出中显示的吞吐量符合预期,我们可以得出结论,该流工作正常。如果吞吐量不如预期,我们需要如下的额外分析。
-
检查窗口大小是否协商为更大的大小。如果 RWND 较小,可能会导致吞吐量较低,因为发送方将在滑动窗口内等待数据段的确认。
-
获取 TCP 流的专家信息,并检查不同错误和警告的数量。这有助于理解吞吐量的可能原因。有关专家信息的更多详情,请阅读第 6 章、使用高级统计工具。

- 在上图中,可以注意到有 173 个缺失数据段的实例和多个重复数据段的实例。专家信息将帮助我们提供诸如无序段、连接重置、零窗口等错误。
- 如果有许多
[TCP Retransmission]丢失数据段的实例,网络中可能会有一些数据包丢失。使用ping等网络连接检查工具来验证底层网络的健康状况。或者,在网络中的多个捕获点上捕获流将有助于缩小丢弃节点的范围。

- 如果存在大量无序分组的情况,则属于同一流的分组可能采用具有不同延迟/抖动的不同路径。理想情况下,路径上的所有节点将在流级别执行负载平衡,以便属于同一流的所有数据包将始终遵循同一路径。在涉及链路抖动(间歇或连续)或任何传统节点的情况下,执行每分组负载平衡可能会导致这种无序分组。
- 如果有许多 TCP 窗口满错误的实例,接收节点就不能以发送方发送的速率处理数据包。如果问题持续存在,可能需要在接收端仔细调整 RWND。
- 可以在端点上启用一些 TCP 增强功能,如更高的 RWND 大小、选择性 ACK、快速重传,以提高整体吞吐量。
它是如何工作的...
TCP 吞吐量没有特定的工作机制。TCP 吞吐量是端点上启用的各种 TCP 功能的结果。这些不同的特性是如何工作的已经在不同的工作原理中介绍过了...TCP 主题下的部分。**
十二、FTP、HTTP/1 和 HTTP/2
在本章中,我们将讨论以下主题:
- 分析 FTP 问题
- 过滤 HTTP 流量
- 配置 HTTP 首选项
- 分析 HTTP 问题
- 导出 HTTP 对象
- HTTP 流量分析
- 分析 HTTPS 流量-SSL/TLS 基础知识
介绍
FTP 是为通过 TCP/IP 在网络上传输文件而创建的协议。它是一种协议,分别在数据和控制连接的 TCP 端口20和21上运行。
HTTP 和 HTTPS 都用于浏览互联网,或者连接到组织内部或云中托管的其他软件。当我们使用 SSL/TLS 保护 HTTP 时,使用 HTTPS 来保护明文数据交换免受入侵和黑客攻击。当连接到您的银行、邮件帐户(例如,Gmail)或任何其他安全应用时,会用到它。
从 1991 年开始,HTTP 经历了不同的版本,如 0.9、1.0、1.1 和 2015 年发布的最新 v2.0。
在本章中,我们将讨论这些协议,它们是如何工作的,以及如何使用 Wireshark 来查找网络中的常见错误和问题。
分析 FTP 问题
FTP 有两种操作模式:
- 主动模式(ACTV) :在这种模式下,客户端向服务器发起控制连接,服务器向客户端发起数据连接
- 被动模式(PASV) :在这种模式下,客户端向服务器发起控制和数据连接
这两种类型的连接都可以实现,它们将在本菜谱的工作原理中解释...一节。
做好准备
使用 FTP 时,如果您怀疑存在任何连接或响应缓慢的问题,请将端口镜像配置为以下选项之一:
- FTP 服务器端口
- 客户端端口
- 流量穿过的链路
如果需要,配置捕获或显示过滤器。
怎么做...
要检查 FTP 性能问题,请按照下列步骤操作:
-
首先,如前几章所述,检查任何以太网、IP 或 TCP 问题。在许多情况下,响应缓慢是由于网络问题,而不一定是由于应用问题。在客户端和服务器之间执行简单的 ICMP ping(数据包较大,比如 1,500 字节),因为它有助于发现路径上是否有任何延迟或故障。
-
检查 TCP 重新传输和重复的 ack。检查它们是在整个流量上还是仅在 FTP 连接上:
- 如果您在各种连接上收到它,这可能是由于影响整个流量的慢速网络造成的
- 如果您只在同一个服务器或客户端的 FTP 连接上得到它,这可能是由于服务器或客户端速度太慢
-
当您在 FTP 文件传输中复制单个文件时,您应该在 I/O 图中得到一条直线,在 TCP 流图(时间序列)中得到一个直线梯度。
-
在这个截图中,我们可以看到一个坏的 FTP 在 TCP 流图中的样子(时序):

图 12.1:失败的 FTP-TCP 流图
- 在下面的屏幕截图中,我们可以看到它在 I/O 图中的样子(配置了过滤器):

图 12.2:失败的 FTP-I/O 图形
- 在下面截图显示的捕获文件中,我们可以看到 TCP 窗口问题。这些因素如下:
- 服务器
15.216.111.13向客户端发送 TCP 窗口已满消息,表示服务器发送窗口已满(数据包5763)。 - 客户端
10.0.0.2向服务器发送 TCP 零窗口消息,告知服务器停止发送数据(数据包5778)。 - 服务器不断向客户端发送 TCP 零窗口探测消息,询问客户端条件是否仍然是零窗口(这告诉服务器不要再发送任何数据)。客户端用 TCP 零窗口探测 Ack 来回答这些消息,表明情况仍然如此(数据包
5793到5931)。 - 过了一会儿,客户端向服务器发送消息 TCP 窗口更新,告诉它开始增加 FTP 吞吐量(数据包
5939)。
- 服务器

图 12.3:失败的 FTP 慢速客户端
- 在前一种情况下,它只是一个慢速客户端。我们通过修改和删除一些不必要的程序解决了这个问题。
如果您遇到连接问题,可能是由于服务器无法正常工作,防火墙阻止了连接,或者服务器或客户端上安装的软件阻止了连接。在这种情况下,请执行以下步骤:
-
对于
SYN/SYN-ACK/ACK数据包,TCP 连接是否正确打开?如果没有,可能是由于以下原因:- 阻止通信的防火墙。请咨询系统管理员。
- 没有运行的服务器。在进程表、FTP 服务器管理等服务器上检查这一点。
- 服务器的一个软件阻塞了连接。它可以是具有阻止连接的附加防火墙的防病毒软件、VPN 客户端或任何其他安全或保护软件。
- 还要检查客户端的连接。它可能被 VPN 客户端、客户端上的防火墙等阻止。
-
在主动模式下,客户端打开与服务器的连接,服务器打开另一个连接。确保途中的防火墙支持它,或者使用被动模式。
它是如何工作的...
FTP 有两种模式:主动和被动。在主动模式下,服务器打开到客户端的另一个连接,而在被动模式下,是客户端打开到服务器的第二个连接。让我们看看它是如何工作的。
在被动模式下,操作如下图所示:

图 12.4: FTP 被动模式步骤
这些内容如下所述:
- 客户端打开从随机端口 P (示例中为
1024)到服务器端口21的控制连接 - 服务器从端口
21应答回客户端端口1024 - 现在,客户端打开从端口 P + 1 (在示例中为
1025)到服务器已经打开并通知客户端的数据端口(在示例中为端口2000)的数据连接 - 服务器从数据端口(本例中为
2000)应答发起连接的客户端端口,即数据端口 P + 1 (本例中为1025)
在主动模式下,操作略有不同:
- 客户端打开从随机端口 P (示例中为
1024)到服务器端口21的控制连接 - 服务器从端口
21应答到客户端端口1024 - 服务器打开从端口
20到客户端端口 P + 1 (示例中为1025)的数据连接 - 客户端从数据端口 P + 1 (例子中为
1025)到服务器端口20
应答
图 12.5: FTP 主动模式步骤
还有更多...
FTP 是一个非常简单的应用,在大多数情况下,FTP 问题都有非常简单的解决方案。一些例子如下:
- 问题 1 :我监测到一个国际连接,在网络的一端是 FTP 客户端,另一端是 FTP 服务器。客户抱怨运行缓慢,并指责国际服务提供商。当我向服务提供商询问时,他们说连接几乎没有负载(10 Mbps 线路的使用率只有 20%),当我检查线路时,我证实了这一事实。当我查看 TCP 问题(重新传输、窗口问题等等)时,没有任何问题。只是检查一下,我把 FTP 服务器拆了,装了另一个(有很多免费的),就开始工作了。这是一个低效率的 FTP 服务器的简单问题。
- 问题 2 :一位客户抱怨说,当连接到一个 FTP 服务器时,每尝试五六次后,连接都被拒绝。当我用 Wireshark 检查时,我看到 FTP 连接拒绝消息(我已经从客户的投诉中知道了这一点),所以它看起来像一个死胡同。只是为了检查,我开始停止服务器上运行的服务,问题就出来了。是一个反病毒软件干扰了这个特定的 FTP 服务器。
底线是:即使使用 Wireshark(和其他软件),有时常识会给你更多的帮助。
过滤 HTTP 流量
可以为 HTTP 配置许多过滤器。在这个菜谱中,让我们集中讨论在这个上下文中最常用的显示过滤器。
做好准备
按照前面的方法配置端口镜像,并快速浏览一下第 3 章,使用捕获过滤器。
怎么做...
要配置 HTTP 过滤器,可以直接在显示窗口栏写过滤器表达式;打开表达式窗口,通过右键单击数据包窗格中所需的参数来选择 HTTP 参数(如第 4 章、使用显示过滤器所述)。
可以在 HTTP 上配置各种过滤器。
基于名称的过滤器如下:
- 对特定网站的请求 :
http.host == "www.packtpub.com" - 对包含单词 PacktPub 的网站的请求:
http.host contains "packt.pub" - 从 PacktPub 转发的请求:
http.referer == http://www.packtpub.com/
请求方法过滤器如下:
- 所有获取请求 :
http.request.method == GET - 所有 HTTP 请求 :
http.request - 所有 HTTP 响应 :
http.response - 所有未获得的 HTTP 请求 :
http.request and not http.request.method == GET
错误代码过滤器:
- HTTP 错误响应(代码 4xx 表示客户端错误,代码 5xx 表示服务器错误) :
http.response.code >= 400 - HTTP 客户端错误响应 :
http.response.code >= 400和http.response.code <= 499 - HTTP 服务器错误响应 :
http.response.code >= 500和http.response.code <= 599 - HTTP 响应代码 404(未找到) :
http.response.code == 404
当您配置一个简单的过滤器如http.host == packtpub时,您不需要在""字符中关闭它。如果你需要一个更复杂的字符串,比如packtpubrn或者几个单词的字符串,那么你需要在""中关闭它,比如"http.host == packtpubrn"。
它是如何工作的...
我们来看看 HTTP 上的一些细节。
HTTP 方法
主要的 HTTP 请求方法发布在 RFCs 2616 中。这些年来,还有一些其他的 HTTP 方法被标准化了。后来,通过对 RFC 2616 (2817、5785、6266 和 6585)和附加标准(RFC 2518、3252、5789)的更新,增加了附加方法。
这些是 RFC 2616 中描述的基本方法:
OPTIONS:用于客户端请求确定 web 服务器的能力。- 当我们请求一个 URL 时使用。
HEAD:类似于GET,但是服务器不应该在响应中返回消息体。POST:用于向服务器发送数据。例如,当使用 webmail 时,它将用于发送电子邮件命令。DELETE:用于请求服务器删除由请求 URI 标识的资源。PUT:这用于请求将包含的实体存储在附加到请求的请求 URI 下。TRACE:用于请求请求消息的远程应用层回送。CONNECT:用于连接代理设备。
状态代码
这些是由 HTTP 标准化的消息代码类别:
| 类别 | 名称 | 原因 |
| 1xx | 报告的 | 提供一般信息,没有任何失败或成功的迹象 |
| 2xx | 成功 | 指示客户端请求的操作已被成功接收、接受和处理 |
| 3xx | 重寄 | 指示用户代理应该采取进一步的操作来完成请求 |
| 4xx | 客户端错误 | 表示客户端有错误 |
| 5xx | 服务器错误 | 表示服务器端有错误 |
表 12.6: HTTP 状态代码
HTTP 状态代码的完整列表可以在HTTP://www . iana . org/assignments/HTTP-status-codes/HTTP-status-codes . XHTML找到。
还有更多...
在某些情况下,您会在 packet details 窗格中的 HTTP 行下看到一个名为Line-based text data: text/html的行。如下图所示:

图 12.7: HTTP 错误和解释
您将在 packet details 窗格中的 HTTP 行的正下方看到基于行的文本数据(在前面的截图中标记为 1 )。在下面,你会看到一些解释(在前面的截图中标记为 2 和 3 )来解释错误的原因。
配置 HTTP 首选项
使用 HTTP 时,您可以更改一些首选项。让我们看看它们是什么。
做好准备
启动 Wireshark 并进入下一部分。
怎么做...
- 选择编辑|首选项。
- 在协议下,选择 HTTP。您将看到以下窗口:

图 12.8: HTTP 首选项
默认情况下,所有四个选项都处于选中状态。当在较低层执行分段时,这些选项可以重组 HTTP 头和主体。在 TCP 端口字段中,您将获得 Wireshark 将解析为 HTTP 的端口号列表。在这个列表中,您可以看到默认端口80,端口8080和8088(通常用于代理),以及其他端口。如果您有一个使用 HTTP 的应用,其端口未列出,请在此处添加。对 HTTPS SSL/TLS 端口进行同样的操作—默认为443。如果您使用另一个端口,请在此处添加。端口80被列为流控制传输协议 ( SCTP )的端口
自定义 HTTP 头字段
自定义 HTTP 头字段使我们能够在http.header过滤器下创建新的 HTTP 显示过滤器。
让我们看看下面截图中的例子:

图 12.9: HTTP 头—年龄
要在 http.header 过滤器下创建新的 HTTP 显示过滤器,请执行以下步骤:
- 在 HTTP preferences 窗口(在下面的截图中标记为 1 )中,单击 Edit...自定义 HTTP 头字段中的按钮。

图 12.10: HTTP 客户标题字段
- 点击 New(在前面的截图中标记为 2 )。
- 在 Header name 中,输入用于扩展到
http.header的过滤器的名称(在前面的截图中标记为 3 )。例如,如果您想在 age 参数上配置一个过滤器,在 Header name 字段中键入名称Age(区分大小写!). - 在字段 desc 字段中,输入任何描述以提醒您已配置的内容。比如输入
Aging time of ....(任何描述都可以,只是备注)。 - 点击确定。
- 在显示过滤器文本框中,您可以使用
http.header.Age过滤器。例如,您将能够配置包含 88482 的显示过滤器http.header.Age,它将为您提供所有带有包含所请求号码的Age字段的数据包 - 您可以使用此选项配置许多附加过滤器。
当您在 HTTP 头中使用专有参数,并且希望进行相应的过滤时,通常会使用这种过滤器配置。
它是如何工作的...
重组功能非常重要,因为在某些情况下会使用 IP 分段,因此 TCP 消息也会被分段。标记重组选项只是告诉 Wireshark 重组被监控的数据包(接收方正在做什么,因此能够理解它)。
还有更多...
通常,只有当 Wireshark 看到有效的 HTTP 报头时,它才会将端口为80的解析数据包显示为 HTTP。如果您想将 TCP 端口80的所有数据包视为 HTTP,请执行以下步骤:
- 前往偏好设置并在协议中选择 TCP
- 取消选中/禁用允许解析器重组 TCP 流
分析 HTTP 问题
底线当然是如何分析 HTTP 问题。这就是这个食谱的全部内容。HTTP 问题的发生可能是因为服务器和/或客户端速度慢、TCP 性能问题以及我们将在本菜谱中看到的其他一些原因。
做好准备
当您在浏览互联网时遇到性能不佳的情况时,请将带有端口镜像的 Wireshark 连接到遇到问题的 PC。当整个网络性能下降时,端口镜像连接到互联网或 web 服务器基础设施。
怎么做...
浏览速度慢的问题可能有多种原因,我们将尝试一步一步地解决这个问题。
步骤如下所示:
-
首先,检查你没有简单地有一条到互联网的负载线路或网络中的核心连接,通信线路上的高错误率,或导致大多数问题的任何这些明显的问题(参见第 5 章、使用基本统计工具章和第 6 章、使用高级统计工具了解更多细节)。
-
要否定 TCP 问题(如第 11 章、传输层协议分析中的详细解释),请检查以下详细信息:
- 在专家信息窗口中,您不会得到太多的重新传输和重复的 ack(小于 1%仍然是可以接受的)。
- 确保 HTTP 连接不会被重置。这可能是由于防火墙或站点限制。
-
确保您不会遇到以下 DNS 问题:
- 缓慢的响应时间
- 名字找不到,不正确,等等
-
如果这些都不适用,那么!让我们深入研究一下 HTTP。
不要忘记将网络和 IT 环境视为一个整体。你不能把 TCP 和 HTTP 分开,也不能把 DNS 问题和应用浏览缓慢分开。可能是你有一个非常慢的 HTTP 服务器;由于它的反应慢,你会得到 TCP 重新传输。或者,由于缓慢的 DNS 服务器,你会得到一个网页,打开后,许多秒钟。一步一步来,隔离问题。
第一次打开网页时,可能需要几秒钟。在这种情况下,您应该检查以下情况:
- 检查线路是否未装载。
- 检查线路上的延迟(对网站执行 ping 操作即可)。
- 查找错误代码。通常您会在浏览器上看到错误的原因,但并不总是如此。
- 配置过滤器
http.response >= 400并查看您得到了多少个错误。在接下来的几节中,我们会看到几个例子来说明您应该注意些什么。
| 代码 | 状态 | 解释 |
| 100 | Continue | 请求成功完成,会话可以继续。 |
| 101 | Switching protocols | 服务器正在更改为不同的 HTTP 版本。随后是一个升级报头。 |
表 12.1: HTTP 信息代码
| 代码 | 状态 | 解释 |
| 200 | OK | 标准 OK 响应 |
| 201 | Created | 请求已被满足,新的资源已被创建 |
| 202 | Accepted | 该请求已被接受,仍在处理中 |
| 203 | Non-authoritative information | 从另一台服务器接收到包含内容的请求,并被理解 |
| 204 | No content | 请求已被接收并被理解,发回的回答没有内容 |
| 205 | Reset content | 这是服务器向客户端发出的重置发送给它的数据的请求 |
| 206 | Partial content | 对部分文档请求的响应 |
表 12.2: HTTP 成功代码
| 代码 | 状态 | 解释 | 做什么 |
| 300 | Multiple choices | 请求的地址引用了多个文件。例如,当资源已被移除,并且响应提供了它的潜在位置列表时,就会发生这种情况。 | - |
| 301 | Moved permanently | 请求的资源已被永久移动。今后的请求应转交给所附的 URI。 | - |
| 302 | Moved temporarily (found) | 页面已暂时移动,新的 URL 可用。通常情况下,你会被自动转发。 | 通常,您会看到一个找到的代码,然后是另一个指向指定 URL 的GET |
| 303 | See other | 对这一请求的回应可以在另一个 URI 找到。应该使用到该资源的 HTTP GET来检索它。 | - |
| 304 | Not modified | 当请求头包含一个if modified since参数时,如果该文件自该日期以来没有改变,将返回该代码。 | - |
| 305 | Use proxy | 请求的资源必须通过代理访问。 | 检查需要什么代理 |
表 12.3: HTTP 重定向代码
| 代码 | 状态 | 解释 | 做什么 |
| 400 | Bad request | 由于语法问题,服务器无法理解该请求。在向客户端重新发送请求之前,客户端应该对请求进行修改。 | 检查网站地址。这也可能是由于站点错误造成的。 |
| 401 | Authorization required | 由于缺少身份验证代码,客户端被拒绝访问。 | 检查您的用户名和密码。 |
| 402 | Payment required | 保留供将来使用。 | |
| 403 | Forbidden | 不允许客户端查看特定文件。这可能是由于服务器访问限制。 | 检查凭证。此外,服务器加载的机会也更少。 |
| 404 | Not found | 找不到请求的资源。 | 这可能是因为该资源已被删除,或者它从未存在过。也可能是由于 URL 拼写错误。 |
| 405 | Method not allowed | 资源不支持或不允许您用来访问文件的方法。 | |
| 406 | Not acceptable | 根据客户端请求,资源生成的内容不可接受。 | 检查/更新您的浏览器。 |
| 407 | Proxy authentication required | 在执行请求身份验证之前,需要进行请求身份验证。 | 客户端必须首先向代理验证自己。 |
| 408 | Request timed out | 服务器处理请求的时间超过了允许的时间。 | 检查响应时间和网络负载。 |
| 409 | Conflict | 客户端提交的请求无法完成,因为它与一些既定规则冲突。 | 可能是因为你试图上传的文件比现有的旧,或者有类似的问题。检查客户端正在尝试做什么。 |
| 410 | Gone | 客户端请求的 URL 在该系统中不再可用。 | 通常,这是服务器问题。这可能是由于文件被删除或位置被转发到新的位置。 |
| 411 | Content length required | 请求缺少其内容长度标头。 | 网站的兼容性问题。更改/更新您的浏览器。 |
| 412 | Precondition failed | 客户端尚未设置传送文件所需的配置。 | 网站的兼容性问题。更改/更新您的浏览器。 |
| 413 | Request entity too long | 请求的文件太大,无法处理。 | 服务器限制。 |
| 414 | Request URI too long | 您输入的地址对服务器来说太长了。 | 服务器限制。 |
| 415 | Unsupported media type | 不支持请求的文件类型。 | 服务器限制。 |
表 12.4: HTTP 客户端错误代码
下面的屏幕截图显示了一个简单的客户端错误示例。要进入此窗口,请执行以下步骤:
- 右键单击带有错误代码的数据包。
- 选择跟随 TCP 流。您应该会看到以下窗口:

图 12.11:示例客户端错误
您可以看到以下情况:
- 我试图浏览 URI
/poker-client/broadcast.htm(在前面的截图中标记为 1 和 3) - URI 由推荐人转发:
http://www.888poker.com/poker-client/promotions.htm(在前面的截图中标记为 2 - 状态代码为 404 Not Found(在前面的截图中标记为 4 )
澄清一下,我没有玩扑克。我正在解决一个网络问题。
| 代码 | 状态 | 解释 | 做什么 |
| 500 | Internal server error | web 服务器遇到意外情况,无法执行客户端访问所请求 URL 的请求。 | 当 CGI 程序运行时,通常由 Perl 代码中的问题引起的响应。 |
| 501 | Not implemented | 服务器无法执行该请求。 | 服务器问题。 |
| 502 | Bad gateway | 您试图访问的服务器发回错误。 | 服务器问题。 |
| 503 | Service unavailable | 请求的服务或文件当前不可用。 | 服务器问题。 |
| 504 | Gateway timeout | 网关已超时。这个消息类似于408超时错误,但是这个错误发生在服务器的网关上。 | 服务器关闭或无响应。 |
| 505 | HTTP version not supported | 它不支持您想用来与服务器通信的 HTTP 协议版本。 | 服务器不支持 HTTP 版本。 |
表 12.5: HTTP 服务器错误代码
由于各种原因,您可以获得服务不可用状态(代码503)。在下面的例子中,有一个小办公室有如下抱怨:他们可以浏览脸书,但当他们点击这个网站上的链接时,他们得到的新页面被阻止。在下面的截图中,你可以看到问题仅仅是防火墙阻止了它(很明显):

图 12.12: HTTP 服务不可用:防火墙阻止
它是如何工作的...
在标准的 HTTP 浏览中,您应该看到一个非常简单的模式,如下所示:
- TCP 打开连接(三次握手)
- HTTP 发送一个
GET命令 - 数据被下载到您的浏览器
在大多数情况下,打开一个网页会打开多个连接,在许多情况下,会打开几十个连接。例如,当您打开一个新闻页面(www.cnn.com、www.foxnews.com和www.bbc.co.uk)时,它会打开主页面、滚动突发新闻、商业广告、报道当地天气的窗口、与其他网站的连接等等。如果一个页面会打开近百个连接,甚至更多,不要感到惊讶。
在网页打开多个连接的情况下(大多数网页都是这样),每个连接都需要一个 DNS 查询、响应、TCP SYN-SYN/ACK-ACK、HTTP GET 只有这样,数据才会开始出现在你的屏幕上。
还有更多...
当您在数据包详细信息窗格中看不到任何内容时,右键单击数据包并选择跟随 TCP 流。这将为您提供一个详细的窗口(如前面的屏幕截图所示),它为您提供了连接的大量数据。
另一个广泛用于 HTTP 的工具是 Fiddler。可以在http://fiddler2.com/找到。Fiddler 是一个用于 HTTP 调试的免费工具。这不在本书的讨论范围之内。
导出 HTTP 对象
导出 HTTP 对象是一个简单的功能,用于导出 HTTP 统计数据、网站和 HTTP 访问的文件。
做好准备
要导出 HTTP 对象,请选择文件|导出对象| HTTP。
怎么做...
要导出 HTTP 对象,请按照下列步骤操作:
- 您可以在捕获运行时使用此功能,也可以保存捕获的文件。您将看到以下窗口:

图 12.13: HTTP 对象导出
- 从这里你可以得到一个被访问网站的列表,包括每个网站中被访问的文件。您可以看到网站、文件类型、大小和名称。
- 您可以使用“另存为”或“全部保存”按钮将数据保存在文件中。
- 在“内容类型”列中,您将看到以下内容:
- 文本:文本/纯文本、文本/html、文本/javascript。如果是 JavaScript,检查它是什么;这可能会有安全风险。
- 图像:图像/jpeg、图像/gif 和其他类型的图像。可以用查看器打开。
- 应用:应用/json、应用/javascript 和其他类型的应用。
- Wireshark 发现的任何其他文本文件。
要使导出 HTTP 对象功能工作,首先转到 TCP 首选项并启用 TCP 数据包重组(允许子分配器重组 TCP 流)。
您将获得一个包含捕获文件中捕获的所有对象的目录。对象可以是图片(例如前面截图中的数据包1052和1057)、文本(前面截图中的数据包1019、1022和其他)等。
它是如何工作的...
此功能扫描当前打开的捕获文件或正在运行的捕获中的 HTTP 流;接受重新组合的对象,如 HTML 文档、图像文件、可执行文件和其他可读格式;并允许您将它们保存到磁盘上。然后,保存的对象可以用适当的浏览器打开,或者在可执行文件的情况下,只需点击它们就可以执行。此功能可用于各种目的,包括窃听和保存备份对象(例如,通过电子邮件发送的文件)。
还有更多...
您有几个软件,它们以图形方式执行相同的事情,并提供统计数据的可视化;其中一些如下:
当你看到一个不知名的网站,上面有一个你不认识的应用,文件名看起来很可疑,谷歌一下;这可能是一个风险(我们将在安全性章节中回到这个问题)。
HTTP 流量分析
本书前面简要讨论过的跟随 TCP 流功能是一个非常有用的功能,可以帮助您深入理解在监控网络时捕获的 TCP 流。在这个食谱中,我们将看到它的一些优点。
做好准备
端口镜像您想要监控的设备或链路,并开始数据包捕获。
怎么做...
要打开“跟随 TCP 流”窗口,请执行以下步骤:
- 右键单击您想要查看的流中的一个数据包。
- Wireshark 会过滤您选择的数据流。您将在显示过滤栏中看到这一点,过滤栏将显示捕获中的数据流数量。您将看到以下窗口:

图 12.14:跟随 TCP 流
- 您可以查看流的详细信息,例如:
GET方法(在前面的截图中标记为 1)- 被请求的
HOST(在前面的截图中标记为 2 - 客户端类型,在本例中是 Mozilla Firefox(在前面的截图中标记为 3 )
- 推荐人,在这种情况下是思科(截图中的 4 )
- HTTP OK 响应(截图中的 5 )
- 服务器类型(截图中的 6 )
- 这些都是明显的例子。当遇到问题或只是要调查的问题时,您将能够在此处看到许多类型的参数,这些参数将指示以下情况:
- 一个用户正在使用 Kazza 客户端(如下图所示)进行文件共享(您的组织允许吗?).

图 12.15:遵循 TCP 流-参数

图 12.16:跟随 TCP 流-更多信息
- 您还可以检查以下内容:
- 错误和 bug 消息
- 病毒和蠕虫。诸如 blast、probe 和 Xprobe 等名称,尤其是当您看到它们带有
.exe扩展名时,应该敲响警钟(关于这个问题的更多细节将在第 19 章 、 安全和网络取证中提供)
- 病毒和蠕虫。诸如 blast、probe 和 Xprobe 等名称,尤其是当您看到它们带有
- 错误和 bug 消息
它是如何工作的...
跟随 TCP 流功能只是分析从第一次 SYN-SYN/ACK/ACK 握手到连接结束的 TCP 数据,这由 FIN 数据包的 rst 指示。它还隔离了特定的流,帮助我们跟踪其中的错误和问题。
还有更多...
使用跟随 TCP 流功能可以发现和分配许多问题,这将在接下来的章节中进一步讨论。使用此功能隔离 TCP 流。
分析 HTTPS 流量-SSL/TLS 基础知识
HTTPS 是 HTTP 的安全版本。 S 表示它由安全套接字层(SSL)/传输层安全性(TLS)保护。当您连接到您的银行帐户、网络邮件服务或任何其他通过 HTTP 运行并需要安全性的服务时,会用到它。
在这个食谱中,我们将看到它是如何工作的,以及当我们使用 HTTPS 通信时会出现什么故障。
做好准备
端口镜像到可疑设备或从几个设备转发流量的链路,并开始捕获。HTTPS 使用 TCP 端口443,这是您应该注意的,除非您有一个使用不同端口的定制应用,正如在配置 HTTP 首选项方法中所讨论的。
怎么做...
要监控 HTTPS 会话,请执行以下步骤:
-
HTTPS 会话的建立可以分四五步完成。在中描述了它是如何工作的...本食谱的一节。
-
观察会话建立过程中数据包的顺序,确保您收到的消息符合下图所示的顺序(在括号中,您将看到数据包中应该显示的内容):

图 12.17: HTTPS 安全连接建立
- 以下是 RFC 2246 中描述的常见警报(及其级别)。警报级别表示消息的严重性,具有致命级别的消息会导致会话终止。
close_notify (Alert level = 0):该消息通知接收方,发送方已完成在该连接上发送消息。该会话可以在以后继续。unexpected_message (10):如果收到不适当的消息,则返回该警告。这是一个严重错误,可能表明其中一方的实现不好。bad_record_mac (20):如果收到的记录的消息认证码 ( MAC )不正确,则返回此警报。这是一个严重错误,可能表明其中一方的实现不好。decryption_failed (21):如果 TLS 密文被错误解密,则返回此警报。这是一个关键消息,可能表明其中一方的实现不好。record_overflow (22):如果收到长度超过允许长度的 TLS 密文记录,将返回此警报。这是一个致命的错误,通常表明其中一方的实现不好。decompression_failure (30):该信息表示解压缩功能接收到错误的输入。这是一个严重错误,可能表明其中一方的实现不好。handshake_failure (40):收到此警报消息表明,在给定可用选项的情况下,当发送方无法协商安全参数集时,出现了协商错误。这是一个严重错误,可能表明其中一方的实现不好。bad_certificate (42):这是一个证书错误。当证书损坏、包含未正确验证的签名或任何其他错误时,会出现这种情况。unsupported_certificate (43):表示收到的证书不是支持的类型。certificate_revoked (44):表示证书被签名者取消。certificate_expired (45):表示证书无效或证书已过期。certificate_unknown (46):表示证书因不明原因未被接受。illegal_parameter (47):这表示握手过程中的某个字段超出范围或与其他字段不一致。这是一个严重错误,可能表明其中一方的实现不好。unknown_ca (48):这表示收到了一个有效的证书,但没有被接受,因为它无法与一个已知的可信 CA 匹配。这是一个严重错误,应该向证书颁发者核实。access_denied (49):表示收到了一个有效的证书,但是它没有得到接收方的访问控制的批准,发送方决定不继续协商。- 这表示消息太长,因此无法解码。这是一个严重错误,可能表明其中一方的实现不好。
decrypt_error (51):表示握手加密操作失败,包括由于签名验证、密钥交换或已完成消息验证而失败的操作。export_restriction (60):表示检测到不符合出口限制的洽谈。protocol_version (70):告知不支持客户端尝试协商的协议版本。insufficient_security (71):当协商失败时返回,因为服务器需要比客户端支持的安全性更高的密码。internal_error (80):这是一个内部错误,与连接的对等方无关。user_canceled (90):这表示握手被取消的原因不是协议故障。no_renegotiation (100):初始握手后,由客户端或服务器发送,以响应 hello 请求。
在提到的每一个故障中,都不会建立连接。
它是如何工作的...
SSL 和 TLS 是保护特定应用的协议,例如 HTTP、SMTP、Telnet 等。SSL 版本 1、2 和 3 是 Netscape 在 20 世纪 90 年代中期为他们的 Navigator 浏览器开发的,而 TLS 是 IETF 的一个标准(RFC 2246、RFC 4492、RFC 5246、RFC 6176 等)。TLS 1.0 于 1999 年 1 月在 RFC 2246 中首次推出,作为 SSL 3.0 版的升级版(第三段在http://tools.ietf.org/html/rfc2246)。
TLS 握手协议包括以下建立 TLS 连接的过程:
-
交换问候消息以就要使用的算法达成一致,并交换密钥生成的随机值
-
交换必要的加密参数,以允许客户端和服务器就预主密钥达成一致
-
交换证书和加密信息,以允许客户端和服务器相互验证
-
从预主密钥和交换的随机值中生成主密钥
-
允许客户端和服务器验证它们的对等方已经计算了相同的安全参数,并且握手没有被攻击者篡改
Figure 12.18: HTTPS secure connection establish: packet flow
让我们看看它是如何工作的。在前面的屏幕截图中,我们看到了 TCP SSL/TLS 如何建立连接(数据包 157-158-159)以及数据包 160 如何启动 TLS 握手。让我们来看看细节:
- 选择加密算法:
- 如数据包 160 所示,客户端发送客户端问候消息,开始协商( 1
- 服务器用服务器问候消息( 2 )进行响应,如数据包 162 所示
- 如数据包 163 所示,服务器向客户端发送一个证书( 3
- 使用这个证书,客户端认证服务器,获取证书,并生成预主密钥( 4 ),如数据包 165 所示
- 服务器生成主密钥( 5 ),如在包 166 中
- 服务器和客户端之间的握手完成,事务开始,正如您在数据包 167 中看到的那样
这指的是一种机制(在 RFC 4507 中定义),它使 TLS 服务器能够恢复会话并避免保持每个客户端的会话状态。TLS 服务器将会话状态封装到票证中,并将其转发给客户端。客户端随后可以使用获得的票证恢复会话。例如,当您重新打开与您的网络邮件帐户(Gmail 等)的连接时,就会发生这种情况,这在这些情况下很常见。
客户端和服务器之间的通信将在步骤 4 或 5 之后开始。
让我们来看看他们中的每一个:
在步骤 1 中,分组 160 是客户端问候消息,它是 TLS 握手中的第一个分组。我们可以看到的一些参数显示在下面的截图中:

图 12.19: HTTPS 客户端你好
这些参数解释如下:
- 突出显示为 1 的区域表示该数据包的内容是一次握手(
ssl.record.content_type == 22)。 - 突出显示为 2 的区域表示该数据包是从客户端发送到 web 服务器的客户端问候消息。该消息开始握手。
- 突出显示为 3 的区域显示客户端支持的最高 SSL 和 TLS 版本。
- 区域 4 显示了将在密钥生成过程中使用的客户端时间。
- 突出显示为 5 的区域显示客户端生成的随机数据,用于密钥生成过程。
- 区域 6 显示客户端支持的密码。密码按优先顺序排列。
- 突出显示为 7 的区域显示客户端支持的数据压缩方法。
如下面的屏幕截图所示,数据包 162 是一个服务器问候消息,包括以下详细信息:

图 12.20: HTTPS 服务器你好
这些细节解释如下:
- 高亮显示为 1 的区域表示该数据包的内容是握手(
ssl.record.content_type == 22)。 - 突出显示为 2 的区域显示了将在此会话中使用的 TLS 版本。
- 区域 3 显示数据包是从服务器发送到客户端的服务器问候消息。
- 区域 4 显示了密钥生成过程中使用的服务器时间。
- 突出显示为 5 的区域显示了由服务器生成的随机数据,用于密钥生成过程。
- 突出显示为 6 的区域显示了本次对话中要使用的密码套件。它是从客户端发送的密码列表中选择的。
- 突出显示为 7 的区域显示了将用于该会话的数据压缩方法。
下一个数据包是来自发布证书的服务器的响应:

图 12.21: HTTPS 服务器证书
解释如下:
- 突出显示为 1 的区域表示服务器发送证书命令,该命令包含服务器的证书。通过单击该行左侧的(+)号并深入研究详细信息,您将看到证书颁发者、有效时间、算法和其他数据。
- 区域 2 显示服务器发送服务器密钥交换命令(通常是 Diffie-Hellman),包括需要的参数(公钥、签名等)。
- 突出显示为 3 的区域表示服务器发送服务器 Hello Done 命令。这个命令表示服务器已经完成了 SSL 握手的这个阶段。下一步是客户端身份验证。
下一个数据包(本例中的数据包 165)是来自客户端的响应,接受证书并生成预主密钥。

图 12.22: HTTPS 客户端预主密钥
解释如下:
- 标记为 1 的区域表示客户端发送客户端密钥交换命令。此命令包含由客户端创建的预主密钥,然后使用服务器的公钥进行加密。对称加密密钥由客户端和服务器根据在客户端和服务器 hello 消息中交换的数据生成。
- 标记为 2 的区域表示客户端向服务器发送更改密码规范通知。这样做是为了表明客户端将开始使用新的会话密钥进行哈希和加密。
最后一步是服务器向客户端发送一个新的会话票证,它将类似于下面的屏幕截图中的示例:

图 12.23: HTTPS 服务器新会话票证
还有更多...
有人多次问我是否有可能解密用 SSL/TLS 加密的会话。嗯,如果你有私钥的话是有可能的,私钥是你连接的服务器提供给你的;得到它并不是一件容易的事。
有一些方法可以劫持这个密钥,在某些情况下它们会起作用。这不是一件显而易见的事情,无论如何这也不是本书的目标。如果您获得了私钥,您只需将它添加到首选项窗口的协议列表中,然后从那里继续。关于这个功能的更多细节可以从 http://wiki.wireshark.org/SSL 以及许多其他网站和博客上获得。
十三、DNS 协议分析
本章涵盖以下主题:
- 分析 DNS 记录类型
- 分析常规 DNS 操作
- 分析 DNSSEC 常规操作
- DNS 性能故障排除
介绍
DNS 是一种名称解析协议,用于将域名解析为 IP 地址。互联网只不过是用唯一的 IP 地址作为标识符连接在一起的网络域的集合。实际上不可能根据 IP 地址记住每个域或设备。取而代之的是,使用域名来记忆域名,并使用一些动态的方法将域名转换成 IP 地址要容易得多。
DNS 是一种基于分布式客户端/服务器的通信模型。DNS 是一种应用层协议,其中客户端将向服务器发送携带域名的 DNS 查询,服务器将依次响应与域名相关联的相应 IP 地址的 DNS 响应。DNS 运行在 UDP 端口号53上。服务器将维护一个具有唯一域名和相关 IP 地址的数据库。数据库可以维护域名或域中的主机名。将域名转换为 IP 地址的功能称为 DNS 查找。
DNS 域名空间本质上是分层的,也就是说,它被细分成不同的域,这使得它具有灵活性和可扩展性。DNS 层次结构包括以下组件:

图 13.1: DNS 层级
在本章中,我们将讨论 DNS 协议的基本原理、功能、常见问题,以及如何使用 Wireshark 对协议进行分析和故障排除。
分析 DNS 记录类型
DNS 数据库是 DNS 记录的集合,其中每个记录是数据库中的一个条目,包括标签、类别、类型和数据,以及关于如何处理对相应记录的请求的指令。虽然有许多记录类型可用于解决不同的目的,但一些常见的记录类型是记录、AAAA 记录和 CNAME。
在本菜谱中,我们将讨论各种常见的 DNS 记录类型,并了解如何使用 Wireshark 来分析相关的行为和问题。
做好准备
为了分析 DNS 记录的类型,我们需要捕获 DNS 查询和响应包。为此,请将 Wireshark 连接到客户端和 DNS 服务器之间的路径,并捕获数据包。
怎么做...
在上图中,触发从客户端到名称服务器的 DNS 查询,并捕获 DNS 查询数据包以进行记录类型分析。可以使用不同的机制从客户端触发 DNS 查询,这些机制可能因客户端的配置、软件版本、供应商平台等而异。以下是我们可以用来从客户端触发查询的几个示例:
- 在客户端打开 web 浏览器,键入 URL,如
www.packtpub.com。 - 打开终端并触发对已知域名的 ping。在 Ubuntu 和其他 Linux 发行版中,
ping xyz.com将触发 DNS 查询以解析 IPv4 地址,而ping6 xyz.com将触发 DNS 查询以解析域的 IPv6 地址。 - 使用 dig 等工具,这是一种基于 CLI 的工具,可用于触发对不同类型 DNS 记录的 DNS 查询。

图 13.2: DNS 查询
前面的屏幕截图是针对 AAAA 记录类型触发的 DNS 查询的示例捕获。查询类型将被设置为 DNS 标准查询。任何查询都必须带有应该为其解析记录的域名以及所请求的记录类型。

图 13.3: DNS 响应
前面的屏幕截图是对图 13.2 中查询的 DNS 响应的示例捕获。为了便于分析,Wireshark 在 DNS 响应数据包中突出显示了 DNS 查询的数据包编号。前面是携带客户端请求的域名的 AAAA 记录响应的响应。
对于请求任何记录类型的每个 DNS 查询,必须有来自服务器的相应记录的响应。如果我们没有看到任何这样的响应或得到一个否定的响应,这表明一些问题需要额外的分析。例如,对于所查询的记录类型,服务器数据库中缺少记录可能会导致以错误消息响应。
它是如何工作的...
有不同的 DNS 记录类型服务于不同的目的。我们将讨论一些常见的记录类型及其用途。
SOA 记录
授权开始 ( SOA )是一种资源记录类型,包含管理信息,例如作为 DNS 服务器负责名称解析的域的一部分的每个 DNS 区域的全局参数和配置。RFC 1035 中定义了 SOA 的定义和记录格式。

图 13.4: SOA 资源记录
前面的屏幕截图是一个 SOA 资源记录的示例捕获。每个区域只有一个 SOA 记录,详细信息如下:
- 区域名称:定义域内区域的名称。
- 主域名服务器:域的 DNS 主服务器。这是该区域数据记录的主要来源。
- 负责机关:该区域负责机关的邮箱信息。
- 序列号:该值随每次区域传送而递增。它可以被认为是 DNS 数据库的当前版本。
- 时间间隔:不同的刷新和重试间隔。
资源记录
A 资源也称为地址记录,是存储与域名关联的 IPv4 地址的资源记录。这是互联网上最常见的记录之一。出于负载平衡的目的,多个 IP 地址可以与同一个域名相关联。所以在 DNS 响应包中看到多个 A 记录是很常见的。

图 13.5:资源记录
前面的屏幕截图是一个 A 记录响应的示例捕获,其中多个 IP 地址与同一个域名相关联。在前面的截图中,192.168.2.2和192.168.0.6与主机名csr2.company1.com相关联。DNS 服务器在接收到对csr2.company1.com的 DNS 查询后,将响应多个应答对象,每个对象携带一个 IP 地址和相关的详细信息。客户端如何使用或使用什么 IP 地址是本地事务,并且是特定于实现的。
AAAA 资源记录
AAAA 资源记录,也称为 IPv6 地址记录,是存储与域名相关联的 IPv6 地址的资源记录。出于负载平衡的目的,多个 IPv6 地址可以与同一个域名相关联。因此,在 DNS 响应数据包中看到多个 AAAA 记录是很常见的。
前面显示的样本捕获是一个 AAAA 记录。与 A 记录一样,如果有多个 IPv6 地址与域名相关联,DNS 响应可能会在响应中携带多个 AAAA 记录。
CNAME 资源记录
CNAME 资源记录,也称为规范名称记录,是用于指定一个域名是另一个域名的别名的资源记录。CNAME 记录将始终指向另一个域名,而不会指向任何 IP 地址。该记录有助于在不影响最终用户的情况下无缝地从一个域名更改到另一个域名。

图 13.6: CNAME 记录
在前面的例子中,我们看到foo.example.com是为bar.example.com创建的别名。当服务器收到对foo.example.com的请求时,它会回复一个带有新域名bar.example.com的 CNAME。客户端将依次发送一个请求给bar.example.com来解析 IP 地址。这对客户来说是透明的,因此可以实现平稳的域名过渡。
还有更多...
在上一节中,我们看到了一些最常见的资源记录和相关的语义。行业中有更多这样的资源记录。关于其他资源记录的详细信息和每个记录的解释可在 IANA 获得:https://www . iana . org/assignments/DNS-parameters/DNS-parameters . XHTML # DNS-parameters-4。
分析常规 DNS 操作
在这个菜谱中,我们将看到如何发现 DNS 是否正常工作。我们将看到 DNS 操作的一些场景,以及可能出错的地方。
做好准备
打开 Wireshark 并开始捕获数据。您应该镜像使用 DNS 的设备或 DNS 服务器本身。
怎么做...
将 Wireshark 连接到与受监控设备相连的 LAN 交换机,并为您怀疑问题来自的设备配置一个端口镜像。完成以下步骤:
- 如果用户投诉,请配置端口镜像来监控用户设备。
- 如果网络出现一般问题,请配置 DNS 服务器的端口镜像:
- 当在内部服务器上配置 DNS 服务器时,请在服务器上配置端口镜像
- 当 DNS 服务器配置在外部服务器上时,配置一个端口镜像到将您连接到互联网的链路
它是如何工作的...
DNS 是用于名称解析的主要协议,在浏览互联网时使用。它也用于在一个组织的网络中工作。DNS 标准描述了三种功能:
- 名称空间,这是 DNS 名称的外观和分配方式
- 名称注册流程,即我们如何注册 DNS 名称,以及它们如何通过 DNS 服务器的网络转发
- 解析过程,即如何将名称解析为 IP 地址
在这个食谱中,我们将重点关注第三个主题,即当我们浏览互联网,发送或接收电子邮件,或访问我们组织的内部服务器时,会发生什么。
DNS 服务器分配
解决 DNS 相关问题的第一步是确保在客户端上配置正确的 DNS 服务器设置。这对于确保作为 DNS 查询的一部分解析的 IP 地址是合法的而不是伪造的是至关重要的。有两种不同类型的 DNS 客户端配置,如下所示:
- 在客户端上手动设置 DNS 服务器
- 动态 DNS
对于手动配置,我们需要在客户端静态定义 DNS 服务器信息。根据客户端的不同,配置可能会有所不同。例如,在 Linux 发行版中,应该在/etc/resolv.conf文件中配置 DNS 服务器。
通过动态 DNS ( DDNS ),我们利用动态配置协议来通告 DNS 服务器信息。在大型网络中,DHCP 是非常常见的地址分配协议。可以利用 DHCP 来动态通告一个或多个 DNS 服务器。

图 13.7:DHCP 响应中的 DNS 信息
如前面的屏幕截图所示,DNS 服务器信息是分配 IP 地址时将包括的 DHCP 选项之一。
在 IPv6 环境中,可以将 DNS 服务器信息作为 IPv6 路由器广告的一部分进行广告。任何启用了 IPv6 自动配置的客户端都将使用作为 IPv6 RA 消息的一部分接收的 DNS 服务器。
DNS 操作
用户程序(web 浏览器、邮件客户端和许多其他程序)通过解析器与 DNS 服务器交互,解析器也是操作系统的一部分。解析器与为其提供所需 IP 的外部名称服务器交互(名称服务器可以是本地的或远程的;它在分解器的外部)。用户查询 DNS 服务器的方式是操作系统特定的。DNS 查询和响应在解析器和名称服务器之间发送和接收。如下图所示:

本地名称服务器通常位于组织网络中,并与 ISP 的 DNS 服务器交互。如果是家庭或小型办公网络,您的 DNS 服务器可以配置在将您连接到互联网的路由器上,或者直接配置到 ISP 的 DNS 服务器上:
- 当 DNS 服务器在路由器上时,您在查询您的 ISP DNS 的路由器上查询 DNS
- 当您的 DNS 位于 ISP 网络上时,您可以直接查询 DNS 服务器
DNS 名称空间
DNS 命名空间基于分层树结构,如下图所示。其结构如下:
- 根服务器的网络(http://www.iana.org/domains/root/servers)。
- 顶级域名()服务器(【http://www.iana.org/domains/root/db】)的网络。
*** 每个顶级域名都有类似于 IANA 管理的域名服务器。顶级域名包含二级域名。TLD 是最高级别的服务器,例如国家服务器,如下图所示。* 二级域名 ( SLD )包含组织和国家的域名和名称。二级域名由指定的组织或国家管理:**
**
有一些重要的定义,如下图所示:
- 域:构成
ndi-com.com下的所有分支,在这里是一个 SLD - Zone:DNS 名称空间中 DNS 域的连续部分,其数据库记录存在于一个或多个 DNS 服务器上存储的特定 DNS 数据库文件中,并在其中进行管理:
** **# 解析过程
使用 DNS 服务器有两个原因:
- 第一个原因是它用于组织内部的交流。在这种情况下,您的组织中有一个 DNS 服务器,它将 IP 地址解析为组织中的名称。
- 它用于连接互联网、浏览、发送电子邮件等。
使用这两种服务时,您将向您的组织服务器发送 DNS 查询,组织服务器将向互联网发送查询。例如,当您想要访问组织中的本地服务器时,您将向本地 DNS 发送一个 DNS 查询,然后您将获得服务器 IP。当您浏览互联网上的网站时,本地 DNS 服务器会将请求转发给外部 DNS,例如 ISP DNS。
您是否配置了正确的 DNS 服务器?理论上,当你连接到互联网时,你可以配置世界上任何一台 DNS 服务器。通常,最好使用的 DNS 服务器是最近的。在您的组织中,您应该将本地 DNS 配置为第一优先,然后是 ISP 的 DNS 服务器。
有各种实用工具来检查 DNS 响应。其中一些如下:
- 命名长凳(goo.gl/86yjKU
- 来自 GRC 的 DNS 基准(https://www.grc.com/dns/benchmark.htm)
在测试结果中,您应该为您配置的 DNS 服务器获得良好的响应时间。如果没有,就改变它们。
还有更多...
当终端设备上的某个进程正在寻找某个特定名称的 IP 地址时,它会与连接到 DNS 服务器的本地解析器进行交互。当 DNS 服务器在其数据库中没有找到您要查找的条目时,它可以通过两种方式做出响应;递归或迭代:
- 递归模式:在这种模式下,当应用(例如网页浏览器)想要解析一个网站的名称
www.packtpub.com时,它会向本地 DNS 服务器发送一个 DNS 请求(在下图中标记为 1 )。本地 DNS 服务器将请求发送到一个根服务器(下图中标记为 2 和 3 ),然后发送到 TLD(下图中标记为 3 和 4 ,最后发送到www.packtpub.com的权威服务器,权威服务器给我们所需的地址(下图中标记为 6 和 7 )。然后,本地 DNS 服务器发送给我们所需的地址(下图中标记为 8 )。在每一个响应中,解析器都获取下一步要查询的 DNS:

- 迭代模式:在这种模式下,DNS 客户端可以接收来自 DNS 服务器的响应,该响应将告诉客户端在哪里寻找所请求的名称。当应用(例如,web 浏览器)想要浏览网站
www.packtpub.com时,它向本地 DNS 服务器发送 DNS 请求(在下图中标记为 1 )。本地服务器将请求转发给根 DNS 服务器(在下图中标记为 2 )。如果它不知道答案,它会将请求转发给 TLD(下图中标记为 3 )和权威 DNS(下图中标记为 4 )。然后,将答案一路发送回客户端(在下图中标记为 5 、 6 、 7 和 8 ):

分析 DNSSEC 常规操作
DNS 通过将域名解析为相应的 IP 地址,在互联网上扮演着重要的角色。虽然它执行非常重要的服务,但它不提供任何数据完整性或原始授权。这种安全性的缺乏可以被操纵来用恶意 IP 地址欺骗域名,并将所有数据转发给恶意服务器。DNS 缓存中毒就是这样一种已知的攻击,它利用这个安全漏洞来泄漏数据。
DNS 安全扩展 ( DNSSEC )是 DNS 协议的一套安全扩展,引入了区域签名的概念,从而有助于为 DNS 资源记录提供数据完整性和原始授权。
做好准备
DNSSEC 是对现有 DNS 数据包格式的扩展,因此从数据包捕获的角度来看,不需要任何加密或相关考虑。与传统的 DNS 数据包一样,Wireshark 将能够使用相同的端口镜像概念捕获 DNSSEC 数据包。
怎么做...
在捕获的数据包上,执行以下简单验证:
- 检查从客户端发送的 DNS 查询是否设置了 DNSSEC 选项。这将包含在 DNS 查询数据包的附加记录字段中:

在前面的屏幕截图中,可以看到附加记录字段设置了一个标志,指示客户端接受 DNSSEC 安全资源记录。
- 一旦接收到请求,DNS 服务器将回复一个 DNS 响应,该响应携带所请求记录的相关细节(例如,A 记录的 IP 地址),并携带一个资源记录签名 ( RRSIG )。这些是与资源记录相关联的数字签名:

在前面的截图中,可以看到来自服务器的 DNS 响应将使用 RRSIG 进行回复。
- DNS 客户端现在向 DNSKEY 请求域名,如下所示:

- DNS 服务器回复用于签署资源记录的公钥:

- 客户端使用这些详细信息来验证从 DNS 服务器接收的资源记录的完整性。
它是如何工作的...
DNSSEC 是一种技术,通过对资源记录提供扩展的数据完整性检查来保护 DNS 资源记录。DNSSEC 通过对资源记录进行数字签名来运行,从分层 DNS 树的根开始:

DNSKEY 和 RRSIG 在 DNSSEC 运营中发挥着关键作用。以下是客户端和服务器之间操作的简化序列:
-
DNS 客户端发送在附加记录中设置了 DNSSEC 标志的 DNS 查询。这向服务器发出信号,表明客户端支持 DNSSEC,并期望对资源记录进行数字签名。
-
DNS 服务器收到请求后,将回复响应并包含 RRSIG。RRSIG 是由委托签名者数字签名的资源记录。
-
DNS 客户端将向服务器发送另一个请求,请求相同的域名,但记录类型设置为 DNSKEY。这是用于签署资源记录的公钥。
-
DNS 服务器将使用所请求域的 DNSKEY 进行回复。
-
DNS 客户端使用 DNSKEY 来计算哈希,并将其与 RRSIG 进行比较,以确保数据完整性。
-
如果散列不匹配,则资源记录被破坏,客户端将不会使用它。
还有更多...
上一节简单解释了 DNSSEC 是如何工作的。有关 DNSSEC、区域签名及其如何使用签名链的更多详细信息,请参见以下 RFC:
- RFC 4033 : DNS 安全介绍和要求
- RFC 4034:DNSSEC 的资源记录
- RFC 4035:DNSSEC 协议修改
DNS 性能故障排除
在这个菜谱中,我们将看到如何解决 DNS 性能相关的问题,如响应缓慢。我们将看到如何使用 Wireshark 来分析这些问题。
做好准备
通过利用 DNS 请求和响应数据包上的时间戳来测量 DNS 性能。为了测量性能,Wireshark 应尽可能靠近客户端连接并捕获 DNS 数据包。
怎么做...
你怎么知道这就是问题所在?
- 当您浏览互联网并且得到非常慢的响应时,请执行以下步骤:
- 端口镜像到互联网的连接,并检查在通往互联网的路上是否有任何瓶颈。为此,您可以使用 I/O 图,如第 6 章、【使用高级统计工具的 中所述。
- 验证您没有大量的重新传输或重复的 ack 来指示连接问题。
- 验证您没有任何与窗口相关的问题,例如零窗口或窗口已满。
- 如果前面检查的答案为否,则可能是 DNS 问题。在两种情况下,您可能会遇到 DNS 问题:
- 在您的组织中工作时
- 当连接到互联网时
- 这些问题可以通过两种方式解决:
- 当您的组织遇到问题时,端口镜像连接到 DNS 服务器的交换机端口
- 当互联网出现问题时,端口镜像将您的组织连接到互联网的交换机端口
- 观察您得到的 DNS 响应时间。找到问题的方法有几种,如下所示:
- 最简单的方法是右键单击 DNS 查询流中的数据包,选择跟随 UDP 流,然后检查查询和响应之间的时间。
- 另一种方法是使用 I/O 图来实现这一目的。在 IO 图形窗口中,选择高级...在 Y 轴配置中,用 AVG(*)在图形行中配置过滤器
dns.time。参考以下截图:

您将获得整个捕获时间内 DNS 响应时间的图表。
在此图中,您将看到大多数响应时间都低于 100 毫秒,这是相当合理的。我们有两个峰值表示可能存在问题,一个在捕获开始时为 300 ms,另一个在捕获结束时为 450 ms。
组织内部(在本地站点)的合理时间应该不超过几十毫秒。当浏览互联网时,良好的响应时间应该小于 100 毫秒,而高达 200 毫秒仍然是可以忍受的。
它是如何工作的...
如分析常规 DNS 操作部分所述,DNS 操作模式可能会影响整体解析性能。例如,递归模式可能导致 DNS 服务器递归地查询其他服务器,这引入了端对端延迟,该延迟根据与服务器和网络路径相关联的各种因素而变化。在配置了多个 DNS 服务器的情况下,如果第一个服务器在缓存中没有资源记录,迭代模式可能有助于查询其他服务器。
还有更多...
虽然使用 Wireshark 是测量和排除域名解析延迟的一种方法,但也有其他工具可以执行类似的测试。例如,dig 是一个基于 CLI 的工具,在大多数 Linux 发行版中都可以使用。它允许您触发任何记录类型的 DNS 查询,并测量解析所需的时间。
以下是如何使用它的示例:
**
十四、分析邮件协议
在本章中,您将了解:
- 邮件协议的正常操作
- 分析 POP、IMAP 和 SMTP 问题
- 过滤和分析不同的错误代码
- 恶意和垃圾邮件分析
介绍
电子邮件是推动数字营销和商业发展的因素之一。电子邮件允许用户通过互联网以非常有效的方式交换实时消息和其他数字信息,例如文件和图像。每个用户都需要有一个可读的电子邮件地址,格式为username@domainname.com。互联网上有各种电子邮件提供商,任何用户都可以注册获得一个免费的电子邮件地址。
有不同的电子邮件应用层协议可用于发送和接收邮件,这些协议的组合有助于相同或不同邮件域中的用户之间的端到端电子邮件交换。三种最常用的应用层协议是 POP3、IMAP 和 SMTP:
- POP3 : 邮局协议 3 ( POP3 )是邮件系统用来从邮件服务器检索邮件的应用层协议。电子邮件客户端使用 POP3 命令,如
LOGIN、LIST、RETR、DELE、QUIT从服务器访问和操作(检索或删除)电子邮件。POP3 使用 TCP 端口110,一旦邮件下载到本地客户端,就会从服务器清除邮件。 - IMAP : 互联网邮件访问协议 ( IMAP )是另一种应用层协议,用于从邮件服务器检索邮件。与 POP3 不同,IMAP 允许用户从多个客户端设备同时阅读和访问邮件。从目前的趋势来看,用户使用多种设备(笔记本电脑、智能手机等)访问电子邮件是很常见的,IMAP 的使用允许用户随时从任何设备访问邮件。IMAP 的当前版本是 4,它使用 TCP 端口
143。 - SMTP : 简单邮件传输协议 ( SMTP )是一种应用层协议,用于从客户端向邮件服务器发送邮件。当发件人和收件人位于不同的电子邮件域时,SMTP 有助于在不同域的服务器之间交换邮件。它使用 TCP 端口
25:

如上图所示,SMTP 是用于将邮件发送到邮件服务器的电子邮件客户端,POP3 或 IMAP 用于从服务器检索电子邮件。电子邮件服务器使用 SMTP 在不同的域之间交换邮件。
为了维护最终用户的隐私,大多数电子邮件服务器在传输层使用不同的加密机制。如果在安全传输层(TLS)上使用,传输层端口号将不同于传统的电子邮件协议。比如 POP3 over TLS 使用 TCP 端口995,IMAP4 over TLS 使用 TCP 端口993,SMTP over TLS 使用端口465。
在本章中,我们将了解电子邮件协议的正常运行,以及如何使用 Wireshark 进行基本分析和故障排除。
邮件协议的正常操作
正如我们在简介中看到的,邮件客户端到服务器和服务器到服务器通信的常见邮件协议是 POP3、SMTP 和 IMAP4。
另一种访问电子邮件的常见方法是通过网络访问邮件,其中有常见的邮件服务器,如 Gmail、Yahoo!,以及 Hotmail。例子包括微软的 Outlook Web 客户端的Outlook Web Access(OWA)和 RPC over HTTPS。
在这个菜谱中,我们将讨论最常见的客户机-服务器和服务器-服务器协议,POP3 和 SMTP,以及每个协议的正常操作。
做好准备
捕获数据包的端口镜像可以在电子邮件客户端或服务器端完成。
怎么做...
POP3 通常用于客户端到服务器的通信,而 SMTP 通常用于服务器到服务器的通信。
POP3 通信
POP3 通常用于邮件客户端到邮件服务器的通信。POP3 的正常操作如下:
-
打开电子邮件客户端,输入登录访问的用户名和密码。
-
使用 POP 作为显示过滤器来列出所有的 POP 数据包。应该注意,这个显示过滤器将只列出使用 TCP 端口
110的数据包。如果使用 TLS,过滤器将不会列出 POP 数据包。我们可能需要使用tcp.port == 995来列出 TLS 上的 POP3 包。 -
检查验证是否已正确通过。在下面的截图中,您可以看到一个以
doronn@开头的用户名(所有 id 都被删除)和以u6F开头的密码打开的会话。 -
要查看以下屏幕截图中显示的 TCP 流,请右键单击流中的一个数据包,并从下拉菜单中选择 Follow TCP Stream:

- 身份验证阶段的任何错误消息都将阻止通信的建立。您可以在下面的屏幕截图中看到这样的例子,其中用户验证失败。在本例中,我们看到当客户端登录失败时,它关闭了 TCP 连接:

- 使用相关的显示过滤器列出特定的数据包。例如,
pop.request.command == "USER"会列出带有用户名的 POP 请求包,pop.request.command == "PASS"会列出带有密码的 POP 包。一个示例快照如下:

- 在邮件传输过程中,请注意邮件客户端很容易填满一条窄带通信线路。您可以通过简单地在 POP 上配置一个过滤器来检查 I/O 图。
- 始终检查常见的 TCP 指示:重新传输、零窗口、窗口满等。它们可以指示通信线路繁忙、服务器运行缓慢以及来自通信线路或终端节点和服务器的其他问题。这些问题通常会导致连接缓慢。
当 POP3 协议使用 TLS 进行加密时,有效负载的详细信息是不可见的。我们将在中解释如何解密 SSL 捕获,还有更多内容...一节。
IMAP 通信
IMAP 与 POP3 的相似之处在于,客户端使用 IMAP 从服务器检索邮件。IMAP 通信的正常行为如下:
- 打开电子邮件客户端,输入相关帐户的用户名和密码。
- 撰写新邮件并从任何电子邮件帐户发送。
- 在使用 IMAP 的客户端上检索电子邮件。不同的客户可能有不同的检索电子邮件的方式。使用相关按钮触发它。
- 检查您是否在本地客户端上收到了电子邮件。
SMTP 通信
SMTP 通常用于以下目的:
- 服务器到服务器的通信,其中 SMTP 是服务器之间运行的邮件协议
- 在某些客户端中,POP3 或 IMAP4 配置用于传入邮件(从服务器到客户端的邮件),而 SMTP 配置用于传出邮件(从客户端到服务器的邮件)
SMTP 通信的正常行为如下:
- 本地电子邮件客户端解析配置的 SMTP 服务器地址的 IP 地址。
- 如果 SSL/TLS 未启用,这将触发到端口号
25的 TCP 连接。如果启用了 SSL/TLS,则通过端口465建立 TCP 连接。 - 它与服务器交换 SMTP 消息以进行身份验证。客户端发送
AUTH LOGIN触发登录认证。成功登录后,客户端将能够发送邮件。 - 它发送 SMTP 消息,如携带发送者和接收者电子邮件地址的
"MAIL FROM:<>", "RCPT TO:<>"。 - 成功排队后,我们从 SMTP 服务器得到一个
OK响应。
以下是客户端和服务器之间的 SMTP 邮件流示例:

它是如何工作的...
在本节中,让我们来看看使用 Wireshark 时不同电子邮件协议的正常操作。
邮件客户端通常使用 POP3 与服务器通信。在某些情况下,他们也会使用 SMTP。IMAP4 在需要服务器操作时使用,例如,当您需要查看远程服务器上的邮件而不需要将它们下载到客户端时。服务器到服务器的通信通常由 SMTP 实现。
IMAP 和 POP 的区别在于,在 IMAP 中,邮件总是存储在服务器上。如果您删除它,它将无法在任何其他机器上使用。在 POP 中,删除下载的电子邮件可能会也可能不会删除服务器上的该电子邮件。
一般来说,SMTP 状态代码分为三类,它们的结构有助于您理解到底哪里出了问题。SMTP 状态代码的方法和细节将在下一节讨论。
POP3
POP3 是邮件客户端用来从服务器检索电子邮件的应用层协议。典型的 POP3 会话如下图所示:

它具有以下步骤:
- 客户端打开到服务器的 TCP 连接。
- 服务器向客户端发送一条
OK消息(OK 消息多路复用器)。 - 用户发送用户名和密码。
- 协议操作开始。
NOOP(无操作)是为了保持连接打开而发送的消息,STAT(状态)是从客户端发送到服务器查询消息状态。服务器用消息的数量和它们的总大小来回答(在包1042中,OK 0 0表示没有消息,它的总大小为零) - 当服务器上没有邮件消息时,客户端发送一个
QUIT消息(1048,服务器确认它(数据包1136),TCP 连接关闭(数据包1137、1138和1227)。 - 在加密连接中,这个过程看起来几乎是一样的(见下面的截图)。连接建立后( 1 ),有几条 POP 消息( 2 ),TLS 连接建立( 3 ,然后是加密的申请数据:

因特网邮件访问协议
IMAP 的正常操作如下:
- 电子邮件客户端解析 IMAP 服务器的 IP 地址:

如前面的屏幕截图所示,当 SSL/TSL 被禁用时,客户端建立到端口143的 TCP 连接。启用 SSL 时,将通过端口993建立 TCP 会话。
- 一旦会话建立,客户端发送 IMAP 能力消息,请求服务器发送服务器支持的能力。
- 接下来是访问服务器的身份验证。当认证成功时,服务器回复响应代码
3,表明登录成功:

- 客户端现在发送 IMAP
FETCH命令从服务器获取邮件。 - 当客户端关闭时,它发送注销消息并清除 TCP 会话。
简单邮件传输协议
SMTP 的正常操作如下:
- 电子邮件客户端解析 SMTP 服务器的 IP 地址:

- 当 SSL/TSL 未启用时,客户端在端口
25上打开到 SMTP 服务器的 TCP 连接。如果启用了 SSL,客户端将在端口465上打开会话:

-
TCP 会话建立成功后,客户端将发送一条
AUTH LOGIN消息,提示输入帐户用户名/密码。 -
用户名和密码将被发送到 SMTP 客户端进行帐户验证。
-
如果认证成功,SMTP 将发送响应代码
235:

- 客户端现在将发送者的电子邮件地址发送到 SMTP 服务器。如果发件人的地址有效,SMTP 服务器将使用响应代码
250进行响应。 - 在收到来自服务器的
OK响应时,客户端将发送接收者的地址。如果收件人的地址有效,SMTP 服务器将使用响应代码250进行响应。 - 客户端现在将推送实际的电子邮件消息。SMTP 将使用响应代码
250和响应参数OK: queued进行响应。 - 成功排队的邮件确保邮件成功发送并排队等待传递到收件人地址。
还有更多...
电子邮件有时被称为网络的无声杀手之一,尤其是在使用非对称线路连接互联网的小企业中。发短信时,他们不会消费网络上的任何东西;但是,当您通过窄带上行链路向 ISP 发送一个几兆甚至几十兆的大文件时,您办公室中的其他用户将会遭受数秒甚至数分钟的网络减速。这个问题我在很多小办公室都见过。
邮件客户端的另一个问题是,在某些情况下(可配置),邮件客户端被配置为在开始工作时从服务器下载所有新数据。如果您有一位客户抱怨说,当所有员工都在办公室开始一天的工作时,网络速度变慢了,这可能是由于数十或数百个客户端同时打开了他们的邮件客户端,而且邮件服务器位于 WAN 上。
Wireshark 中的 SSL 解密
如前所述,所有电子邮件协议(SMTP、IMAP 和 POP3)都支持 SSL/TLS,其中传输层信息是加密的,在 Wireshark 中是不可读的。为了解密它,我们需要客户端使用的 SSL 密钥。
以下是要遵循的步骤:
- 确定电子邮件客户端使用的 SSL 密钥。根据硬件和应用的不同,获取 SSL 的过程可能会有所不同:
- 在 macOS 中,前往“应用”,然后前往“实用工具”,然后打开“钥匙串访问”。这将列出不同应用的所有证书和密钥。为电子邮件客户端确定正确的 SSL 密钥。
- 在 Windows 中,转到 Microsoft 管理控制台(MMC ),然后转到证书。这将列出不同应用的所有证书。识别正确的证书并将其导出。
- 确定电子邮件客户端的 SSL 密钥后,在 Wireshark 中打开首选项,如下所示:

-
从协议中选择 SSL 。
-
在突出显示的字段中选择 SSL 密钥,然后单击确定。
-
前面的过程将让 Wireshark 使用 SSL 密钥解密消息,并显示数据包捕获的解密版本。
分析 POP、IMAP 和 SMTP 问题
在本菜谱中,我们将讨论如何使用 Wireshark 来分析电子邮件协议中的故障。
做好准备
当某个用户报告了故障,而所有其他用户都工作正常时,请尽可能靠近受影响的用户捕获数据包。如果多个用户都报告了失败,请在尽可能靠近服务器的地方捕获数据包。
怎么做...
根据故障的方向,我们可能需要确定应该对什么电子邮件协议进行故障诊断。

例如,如果用户抱怨发送电子邮件时出现故障,我们需要关注 SMTP,如果故障与接收电子邮件有关,我们需要关注 IMAP 或 POP3(取决于客户端使用的协议)。
- 确定故障方向后,检查相关端口的 TCP 会话是否已建立:

- 前面的截图显示客户端无法在端口
143上建立到服务器的 TCP 会话。在这种情况下,我们应该遵循第十章、网络层协议和操作和第十一章、传输层协议分析中解释的传统网络故障排除行为。 - 如果建立了会话,下一步是检查应用层协议是否成功通过了服务器的身份验证。错误的用户名/密码或恶意用户访问服务器的尝试将被标记为以下错误消息:

- 检查用户名和密码,确保使用正确的用户名和密码进行身份验证。
当您怀疑服务器到服务器的通信缓慢时,请按照下列步骤解决问题:
- 检查服务器是否位于同一站点:
- 如果它们位于同一个站点,您可能有缓慢的服务器或其他应用问题。在大多数情况下,局域网不会引起任何问题,尤其是当两台服务器位于同一个数据中心时。
- 如果它们不在同一站点(当服务器通过 WAN 连接位于远程站点时),请检查 WAN 连接上的负载。当发送大型邮件时,他们可以很容易地阻塞这些线路,尤其是当它们是窄带(几 Mbps)时。
- 首先,查找 TCP 问题,并检查是仅在 SMTP 上,还是在所有其他应用上都存在这些问题。例如,在下面的屏幕截图中,您可以看到许多 TCP 重新传输:

- 检查他们是否是因为一个缓慢的 SMTP 服务器。是邮件问题吗?当您查看下面的截图时,您会看到我已经使用了 TCP 对话统计。在选中“限制显示过滤器”复选框并单击窗口顶部的“数据包”(从更多的数据包中获取列表)后,我们可以看到只有 793 个数据包是重新传输的数据包中的 SMTP 数据包。端口
445(微软 DS)的172.16.30.247和172.16.30.2之间转发了 9014 个包,端口80(HTTP)的172.16.30.180和192.5.11.198之间转发了 2319 个包,以此类推:

在这种情况下,SMTP 只受到不良通信的影响。这不是 SMTP 的问题。
- 检查 SMTP 错误。在下面的截图中,可以看到错误代码
451,也称为local error in processing服务器错误。此外,还包括一个错误列表。
当出现问题时,在大多数情况下,服务器或客户端会告诉您。你只需要看看这些信息,然后用谷歌搜索一下。我们以后会看到很多这样的例子。
您还可以在 http://www.ietf.org/rfc/rfc1893.txt 的 RFC 1893 中找到 SMTP 状态代码列表:

- 当您想找出双方发送了哪些错误时,请配置一个过滤器,如下图所示:

在这里您可以看到各种事件(代码):
421:表示邮件服务可能不可用( 1 )。452:这表示服务器无法响应,告诉您稍后再试。发生这种情况是由于服务器上的负载或服务器问题( 2 )。451:(代码250如截图所示,见以下注释)这表示用户超限额( 3 )。452:这表示已经超过邮箱大小限制( 4 )。450:(代码250如截图所示,见以下注释)这表示没有找到主机( 5 )。
在 SMTP 中(像在许多其他协议中一样),您可以在同一个消息中获得几个错误代码。您在 Wireshark 的数据包列表中看到的可能是第一个,或者是部分列表。要查看 SMTP 消息中的完整错误列表,请转到数据包详细信息并打开特定的数据包,如下一个屏幕截图所示。
当您看到太多代码时,表示服务器不可用。在这种情况下,请咨询服务器管理员:

它是如何工作的...
每个电子邮件协议(SMTP、IMAP 和 POP3)的正常行为在邮件协议配方的正常操作中解释。将失败捕获与正常操作捕获进行比较将有助于识别导致客户端失败的问题。
过滤和分析不同的错误代码
在本菜谱中,我们将讨论如何使用 Wireshark 根据错误代码过滤某些消息以进行分析。
做好准备
根据故障情况,在客户端或服务器端捕获数据包。重申一下,当协议使用 SSL/TLS 建立会话时,在使用错误代码作为过滤器之前,我们需要 SSL 密钥来解密消息。否则,错误代码将被解密,并且可能不会在筛选后的输出中列出。
怎么做...
每种电子邮件协议都使用不同类型的错误代码来传达客户端和服务器之间的任何故障或问题。在本节中,我们将讨论如何使用 Wireshark 过滤每个电子邮件协议的错误代码。
简单邮件传输协议
在对电子邮件相关问题进行故障排除或分析时,来自服务器日志或 Wireshark 捕获的 SMTP 状态代码非常有用。不同的状态代码在服务器和客户机之间交换,以表示工作或故障情况。虽然有不同的过滤方式,但我们将看到常见且有用的过滤选项:

使用smtp.response将过滤所有带有响应状态代码的 SMTP 消息。如果我们知道状态代码,可以使用smtp.response.code==<code>进一步细化过滤器。
由于 SMTP 响应状态代码是用数值定义的,Wireshark 允许我们根据范围过滤状态代码。例如,smtp.response.code > 200将列出状态码高于200的所有数据包。以下是输出示例:

还可以根据响应参数过滤 SMTP 邮件。使用smtp.rsp.parameters==<param>将根据响应参数过滤数据包。以下是一个示例输出,列出了带有AUTH LOGIN参数的 SMTP 数据包:

关于可用 SMTP 状态代码的更多细节可以在中找到...一节。
因特网邮件访问协议
诸如OK、NO、BAD、BYE之类的状态响应用于指示客户端和服务器之间的任何 IMAP 命令失败的原因。每个 IMAP 命令都与OK、NO和BAD状态响应相关联,并带有特定于该命令的附加细节。这些状态响应可能被标记或未被标记,携带额外的细节。
例如,IMAP 命令DELETE与响应代码OK、NO和BAD相关联。OK的状态响应表示删除命令成功。IMAP 命令LOGIN与响应代码NO相关联,该响应代码将携带额外的细节,例如无效的用户名或密码;这表明登录尝试失败:

使用imap.request将过滤从客户端到服务器的所有 IMAP COMMAND消息。如果我们知道具体的命令,可以使用imap.request.command == "<>"进一步细化过滤器:

通过使用imap.response,我们可以过滤从服务器到客户端的所有 IMAP 响应状态消息。Imap.response.status ==<>可用于按响应状态过滤,如OK、NO或BAD。
POP3
与 IMAP 一样,POP3 使用响应消息来通知客户端和服务器之间的任何故障。POP3 主要使用+OK和-ERR作为响应指示器,以及关于响应的附加细节:

前面的截图是一个例子,其中Response indicator是-ERR,描述携带了ERR的类型。在这种情况下,ERR与登录失败有关。
通过使用pop.request或pop.response,我们可以分别基于从客户端到服务器的 POP3 请求或从服务器到客户端的响应来过滤数据包。我们可以进一步使用该指标根据具体的响应指标进行筛选:

如此处所示,指示器的过滤器应为+OK或-ERR。
它是如何工作的...
所有电子邮件协议都使用相同的概念,即发送命令并期待命令的响应或状态代码。当来自客户端的命令或请求被成功执行时,服务器发送一个肯定的状态码(如OK)。如果在执行命令时出现任何问题或失败,它会发送一个否定的响应代码(如NO或BAD)。关于错误代码的更多细节可以在中找到...节后文:

还有更多...
响应代码和每个响应代码的相关语义记录在每个邮件协议的不同 RFC 中。在本节中,我们将讨论一些常见的响应代码,并列出 RFC,其中提供了有关响应代码的更多详细信息。
IMAP 响应代码(RFC 5530)
RFC 5530 列出了所有响应代码以及每个响应代码的相关含义。IMAP 响应代码的综合视图也可以从以下 IANA 链接中检索:https://www . iana . org/assignments/IMAP-response-codes/IMAP-response-codes . XHTML。
POP3 响应代码(RFC 2449)
RFC 2449 列出了响应代码以及每个 POP3 响应代码的相关含义。POP3 响应代码的综合视图也可通过以下 IANA 链接获得:https://www . iana . org/assignments/pop 3-extension-mechanism/pop 3-extension-mechanism . XHTML。
SMTP 和 SMTP 错误代码(RFC 3463)
SMTP 状态代码的结构如下:
class . subject . detail
例如,当您看到状态代码450时,其含义如下:
- 等级 4 表示这是一个暂时的问题
- 主题 5 表示这是一个邮件传递状态
- 详细信息 0 表示一个未定义的错误(RFC 3463)
下表列出了各种类别:
| 状态代码 | 意为 | 原因 |
| 2.x.xxx | 成功 | 操作成功。 |
| 4.x.xxx | 持续瞬时故障 | 一个临时条件阻止了服务器发送邮件。这可能是由于服务器负载或网络瓶颈。通常,再次发送消息会成功。 |
| 5.x.xxx | 永久失效 | 一个永久性问题阻止了服务器发送邮件。通常是服务器或兼容性错误。 |
下表列出了各种主题:
| 状态代码 | 什么事? |
| x.0.xxx | 其他或未定义的状态 |
| x.1.xxx | 寻址状态 |
| x.2.xxx | 邮箱状态 |
| x.3.xxx | 邮件系统状态 |
| x.4.xxx | 网络和路由状态 |
| x.5.xxx | 邮件传递协议状态 |
| x.6.xxx | 消息内容或媒体状态 |
| x.7.xxx | 安全或策略状态 |
下表列出了各种详细信息。状态详细信息的完整列表太长,无法在此列出,但可以在位于http://tools.ietf.org/html/rfc3463的标准页面中找到。
下表列出了一些常见的状态代码:
| 状态代码 | 什么事? | 可能是什么原因? |
| 220 | 服务准备好了 | 服务正在运行,准备执行邮件操作。 |
| 221 | 服务关闭传输通道 | 平时还行。这就是服务器在不需要服务时关闭服务的方式。 |
| 250 | 请求的邮件操作正常 | 消息已成功传递。 |
| 251 | 不是本地用户,邮件将被转发 | 一切正常。 |
| 252 | 无法验证用户 | 服务器无法验证该用户。邮件会被投递。 |
| 421 | 服务不可用 | 邮件传输服务不可用,由于临时事件,无法接收邮件。这可能是由于服务器问题(未运行的服务)或服务器限制。 |
| 422 | 邮件大小问题 | 收件人的邮箱已超过其限额或对传入邮件有限制。 |
| 431 | 内存不足或磁盘已满 | 服务器磁盘已满或内存不足。检查服务器。 |
| 432 | 传入邮件队列已停止 | 这可能是由于服务器错误(服务已停止)。 |
| 441 | 接收服务器没有响应 | 发送消息的服务器表示目的服务器没有响应。 |
| 442 | 连接不良 | 与目标服务器的连接有问题。 |
| 444 | 无法路由 | 服务器无法确定邮件的下一个跃点。 |
| 445 | 邮件系统拥塞 | 邮件服务器暂时拥塞。 |
| 447 | 交付时间已过 | 拒绝系统认为该消息太旧。这通常是由于排队或传输问题。 |
| 450 | 请求的操作未被执行 | 无法传输消息。这通常是由于远程服务器上的邮件服务有问题。 |
| 451 | 无效命令 | 这表示命令不受支持或顺序错误。接收服务器中止了该操作。这可能是由于发送或接收服务器上的负载造成的。 |
| 452 | 请求的操作未被执行 | 接收服务器上的存储空间不足。 |
| 500 | 语法错误 | 服务器发送的命令未被识别为有效的 SMTP 或 ESMTP 命令。 |
| 512 | DNS 错误 | 找不到作为邮件发送目的地的主机服务器。 |
| 530 | 认证问题 | 接收服务器需要认证,或者您的服务器已被接收服务器添加到黑名单中。 |
| 542 | 收件人地址被拒绝 | 表明您的服务器地址被接收服务器拒绝的消息。这通常是由于反垃圾邮件软件、IDS/IPS 系统、智能防火墙或其他安全系统。 |
恶意和垃圾邮件分析
在本菜谱中,我们将讨论如何使用 Wireshark 对恶意邮件和垃圾邮件进行一些基本分析,并使用它在服务器上过滤垃圾邮件。
做好准备
在大多数情况下,垃圾邮件会从域外发送,目标是企业内的客户端。因此,最好在服务器端执行数据包捕获以进行分析。
怎么做...
- 第一步是识别邮件消息的数据部分。我们可以使用过滤器来显示邮件的数据部分。使用电子邮件协议和数据将显示带有数据的数据包。例如,使用
pop || data-text-lines过滤带有 POP3 协议数据的邮件:

- 在前面的截图中,特定端点之间的数据交换没有那么大。根据大小,它似乎是一条文本消息,不包含任何附件,因此我们可以忽略它:

- 另一方面,前面的捕获显示数据交换相当大,并且似乎带有附件。
- 使用“跟随流”来缩小 TCP 流的范围。这将以明文形式过滤和列出邮件交换,如下所示:

在前面的截图中,我们可以看到这封电子邮件带有一个 PDF 文件。使用发件人、收件人、主题和相关信息来识别邮件是否真实。或者,我们可以使用其他恶意软件检测软件来查找附件中的任何问题。
如果在多封电子邮件中看到类似的附件,请确定共同的发件人,并在服务器中创建垃圾邮件规则,将其标记为垃圾邮件或直接过滤此类电子邮件。
它是如何工作的...
大多数电子邮件服务器支持垃圾邮件和垃圾邮件检测,并为此类电子邮件动态创建过滤规则。服务器也支持基于发送者/接收者邮件地址,或者基于域和 IP 来定制这样的规则。
当服务器从使用 IMAP/POP3 的内部客户端或使用 SMTP 的外部服务器接收邮件时,它会检查本地过滤器,并在规则允许的情况下将其转发到相应的收件箱。如果任何规则与邮件中的某些属性或元数据匹配,服务器将过滤该邮件。
在电子邮件客户端,我们可以选择安装电子邮件扫描软件来提高安全性。这种软件会在客户端执行额外的检查,将其标记为垃圾邮件或恶意邮件,并警告用户。
十五、NetBIOS 和 SMB 协议分析
在本章中,我们将介绍以下配方:
- NetBIOS 名称、数据报和会话服务
- 中小企业/SMB2/SMB3 详细信息和运营
- 不同的问题以及如何分析
- 连接和性能问题
- 数据库流量的常见问题和分析步骤
- 导出 SMB 对象–如何使用
介绍
Wireshark 的一个重要用途是应用分析和故障排除。当应用变慢时,可能是由于 LAN(在有线 LAN 中很少见)、WAN 服务(由于带宽不足或高延迟而常见)或缓慢的服务器或客户端(我们将在数据库流量和常见问题部分中看到这一点)。这也可能是由于缓慢或有问题的应用。
本章的目的是深入了解应用如何工作的细节,并提供一些隔离和解决这些问题的指南和方法。在第一个食谱中,我们将学习如何找出并分类在我们的网络上工作的应用。然后,我们将浏览各种类型的应用,看看它们是如何工作的,网络如何影响它们的行为,以及什么可能出错。
在本章中,我们将学习如何使用 Wireshark 来解决企业网络中常见的应用问题,例如 NetBIOS 和 SMB 协议。
了解 NetBIOS 协议
网络基本输入/输出系统 ( NetBIOS )是 80 年代初为局域网通信开发的一套协议,目的是为会话层(OSI 模型中的第五层)提供服务。几年后,它被微软公司用于局域网联网,然后它被移植用于 TCP/IP(TCP/IP 上的 NetBIOS——NBT ),这将在 RFC 1001 和 1002 中讨论。
在当今的网络中,NetBIOS 提供三种服务:
- 名称服务(端口
137)用于名称注册和名称到 IP 地址的解析。也称为 NetBIOS-NS。 - 数据报分发服务(端口
138)用于客户端和服务器的服务通告。也称为 NetBIOS-DGM。 - 会话服务(端口
139)用于主机间的会话协商。这用于访问文件、打开目录等等。也称为 NetBIOS-SSN。
NBNS 是一种注册域名并将其转换为 IP 地址的服务。当客户端在域控制器中注册其名称时,就会发生注册。客户端发送一个注册请求,然后得到一个响应,表明该注册是正确的,还是该名称已注册到另一个设备。微软的环境是用 WINS 实现的,由于大多数网络不使用它,它后来被 DNS 所取代。它通过 UDP 端口137工作。
NBDS 用于客户端和服务器的服务公告。通过此服务,网络上的设备会宣布它们的名称、它们可以向网络上的其他设备提供的服务,以及如何连接到这些服务。它通过 UDP 端口138工作。
NBSS 用于在主机之间建立会话,打开或保存文件,以及通过网络执行远程文件和其他会话。它通过 TCP 端口139工作。
还有一些附加协议,如服务器消息块 ( SMB ),它们在 NBSS 上运行,用于事务操作,在 NBDS 上运行,用于服务通知,用于打印机请求的假脱机,以及其他一些协议。深入 NetBIOS 的细节超出了本书的范围。如果需要对 NetBIOS 协议进行故障排除,请遵循本节中的说明,并特别注意错误消息和注释。
了解 SMB 协议
我们在前面的章节中简要讨论了 SMB,也看到了相关的过滤器。简单地说,SMB 是一种协议,用于浏览目录、复制文件、访问打印机等服务以及网络上的其他一些操作。通用互联网文件系统 ( CIFS )是 SMB 的一种形式,或者说风味。
SMB 运行在会话层协议之上,如最初设计的 NetBIOS,或者也可以直接运行在 TCP 端口445上。SMB 2.0 是微软于 2006 年在 Windows Vista 中推出的,旨在减少 SMB 1.0 协议中所需的命令和子命令。尽管 SMB 2.0 是作为一种专有协议出现的,但微软还是发布了该标准,以允许其他系统与其操作系统进行互操作。
SMB 2.1 随 Windows 7 和 Server 2008 R2 一起发布,与 SMB 2.0 相比,性能有所提升。
Windows 8 和 Server 2012 中引入了 SMB 3.0(之前称为 SMB 2.2)。为了支持数据中心计算环境中的虚拟化,SMM 3.0 具有显著的性能改进(与早期版本相比)。
它是如何工作的...
SMB 采用客户端-服务器模式,客户端向服务器发出特定请求,服务器根据请求做出相应的响应。大多数请求与访问文件系统有关,而其他形式的请求涉及进程间通信 ( IPC )。IPC 是一种便于不同进程相互通信的机制,不管它们是运行在同一台设备上还是网络中的多台设备上。
分析 NetBIOS/SMB 协议中的问题
在本章中,我们将探讨 NetBIOS 协议套件的一些常见问题,并学习如何尝试解决这些问题。由于 NetBIOS 协议集相当复杂,并且有数百种可能出错的情况,我们将尝试提供一些指南,说明如何查找常见问题以及可能出错的地方。
做好准备
NetBIOS 协议在 Windows 环境中工作,与 macOS 和 Linux 机器一起与 Windows 通信。当在这些环境中遇到诸如不稳定、响应时间慢、连接中断等问题时,NetBIOS 问题可能是原因之一。当面对这些问题时,解决它们的工具就是 Wireshark。它将向您显示网络上正在运行什么,而 Windows 工具将向您显示客户端和服务器上正在运行什么。
怎么做...
要尝试找出问题所在,请将装有 Wireshark 的笔记本电脑连接到网络,并按照这里所述对可疑的客户端或服务器进行端口镜像。在接下来的部分中,我们将看到几个问题的几个场景。
NetBIOS 使用了许多预定义的筛选器。你可以通过点击表达式找到它们...按钮,位于显示过滤器窗口的右侧:
- 一般的 NetBIOS 命令以
netbios开始 - NetBIOS 名称服务命令以
nbns开头 - NetBIOS 数据报服务命令以
nbds开始 - NetBIOS 会话服务命令以
nbss开始 - SMB 命令以
smb或smb2开始
一般测试
首先,大致看一下网络。然后,寻找可疑的模式:
- 将 Wireshark 连接到网络。确保运行 Wireshark 的工作站与出现问题的客户端在同一个广播域中。
- 配置显示过滤器
nbns.flags.response == 0。它会给你 NBNS 请求。你会看到很多广播,如下图截图所示:

图 15.1: NBNS 数据包类型
-
正如您在前面的屏幕截图中看到的,在捕获文件中,您将看到以下内容:
- NBNS 注册包(1) :在例子中,有名字为
WORKGROUP和ETTI的注册。NBNS 服务器将通过向请求节点发出肯定或否定的名称注册响应来接受或拒绝名称注册。如果没有接收到,请求节点将认为它是正常的。 - NBNS 查询(2、3 和 4) :针对指定的名称发送查询。如果有 NBNS 服务器(这是域控制器),您将看到以下响应之一:
- 请求的名称不存在(代码
3) - 无错误(代码
0)
- 请求的名称不存在(代码
- NBNS 注册包(1) :在例子中,有名字为
-
确保没有来自以
169.254( 5 )开头的地址的注册或任何其他请求。这些是自动私有 IP 地址 ( APIPA )地址。这实际上意味着 PC 被配置为自动接受地址(通过 DHCP ),但它还没有收到地址。 -
还有许多公告包。这些将在 UDP 端口
138上广播。在这里,您将看到每个工作站都公布了其功能:工作站、服务器、打印服务器等等。例如,您可以在这里看到:172.16.100.10名为FILE-SRV,其功能类似于工作站、服务器和 SQL server ( 1 )172.16.100.204名为GOLF,其功能类似于工作站、服务器和打印队列服务器( 2

图 15.2: NetBIOS 服务公告
- 有一些蠕虫和病毒正在使用 NetBIOS 名称服务来扫描网络。寻找不寻常的模式,如大规模扫描,高广播率,等等。
- 验证你没有太多的广播。5 至 10 个广播/分钟/设备是合理的。超过这个通常意味着有问题。
您可以在这里看到数百种消息场景。使用 Wireshark 专家系统、Google 和常识找出问题。
具体问题
以下是您在日常操作中可能会遇到的一些问题:
- 使用 SMB(用于通过网络浏览目录、复制文件和其他操作的协议),您可能会看到一些错误代码。错误类别和代码的完整列表在微软 MSDN:http://msdn.microsoft.com/en-us/library/ee441884.aspx和https://tinyurl.com/y7kuxygd中列出。
- 代码
0就是STATUS_OK的意思,暗示一切正常,没有问题。应该检查任何其他代码。 - 在下面的例子中,您可以看到一条消息
STATUS_ACCESS_DENIED。这是您应该查找的许多错误代码之一。在本例中,在 IP 地址以203开头的服务器上访问\NAS01HOMEDIR(出于安全原因,隐藏了完整地址)被拒绝。 - 当你试图浏览主目录时,Windows 通常会显示一条拒绝访问的信息或类似的信息。当应用试图访问某个目录但无法访问该目录时,可能会发生此问题。在这种情况下,您会看到一条拒绝访问消息、一条软件通信问题消息或程序员为您制作的任何其他消息。在这种情况下,使用 Wireshark 会让您找到确切的错误,Google 会告诉您错误的原因:

图 15.3: SMB 错误类别和代码—拒绝访问
- 在下一个例子中,我们看到了在
\NAS01SAMIM( 3 )的会话设置( 1 )期间发生的状态STATUS_MORE_PROCESSING_REQUIRED( 2 )。 - 查看前面提到的链接,我们看到这是因为在指定的命名管道上,有更多的数据可供读取。
- 简短的谷歌搜索告诉我们,这可能表明一个凭证问题。请咨询您的系统管理员:

图 15.4: SMB 错误类别和代码—命名管道
- 要查看所有 SMB 错误消息,请键入筛选器
smb.nt_status != 0x0。您将获得所有错误响应,如下面的屏幕截图所示:

图 15.5: SMB 错误类别和代码—过滤错误
还有更多...
在这一节中,我将展示一些例子来更好地理解 NetBIOS 协议。
示例 1–应用冻结
在下面的屏幕截图中,我们看到了应用冻结的原因:

图 15.6:错误条件—应用冻结
在示例中,我们进行了以下观察:
- IP 地址以
203开头的客户端试图连接到 IP 地址为10.1.70.95的服务器上的\NAS01SAMIM,并返回一个STATUS_ACCESS_DENIED错误 10.1.70.95上的服务器回答访问被拒绝- 由于应用在等待,TCP 用保活消息保持连接
- 过了一会儿,客户端发送服务器批准的断开请求
- 应用等待,TCP 通过保持活动来维持连接
- TCP 用
RST(复位)关闭连接
客户在这里看到的是应用冻结。
示例 2–中小企业引发的广播风暴
在我的一个客户的网络中,我接到一个紧急电话,说一个远程办公室与总部断开了连接。一些网络细节如下:
- 远程办公室地址在子网
172.30.121.0/24上,具有默认网关172.30.121.254。 - HQ 地址在子网
172.30.0.0/24上。远程办公室和总部之间的连接是通过 MPLS 网络使用 l3ip-VPN。
为了解决这个问题,我做了以下工作:
- 我试着连接总部的服务器。我没有得到回应。
- 我打电话给为中心提供线路的服务提供商,他们说在他们的监控系统上他们没有看到线路上有任何负载。
- 我 pinged 了本地路由器
172.30.121.254,没有得到响应。这意味着局域网上的 pc 机甚至不能到达它们的本地路由器,这是它们的默认网关。 - 我将带有 port-mirror 的 Wireshark 连接到路由器端口,看到了类似下面的截图:

图 15.7:错误条件—广播风暴
- 我看到 IP 地址为
172.30.121.1的主机在几微秒( 1 )内产生了大量的数据包。数据包被广播( 3 ),生成它们的服务是Write Mail Slot( 5 ),由SMB Mailslot协议( 4 )发送。 - 为了了解包的数量,我使用了 I/O graphs 特性。我得到了每秒 5000 个包,这产生了 10 Mbps,阻塞了可怜的旧路由器端口(将路由器端口更改为 100 Mbps 或 1 Gbps 无济于事;它仍然会被封锁。
- 当我在谷歌或微软上没有找到任何关于它的信息时,我开始停止我不知道的服务,在每次改变后跟踪广播发生了什么。最终我发现导致问题的服务叫做
LS3Bcast.exe。我阻止了它,确保它不再回来,就这样。

图 15.8: SMB 广播风暴—流量率
分析数据库流量和常见问题
你们中的一些人可能想知道为什么我在这里增加了这个部分。毕竟,数据库被认为是 IT 环境中完全不同的一个分支。一边是数据库和应用,另一边是网络和基础设施。这是正确的,因为我们不应该调试数据库;这方面有 DBA。但是通过网络上的信息,我们可以发现一些问题,帮助数据库管理员解决问题。
在大多数情况下,IT 人员会先来找我们,因为人们把一切都归咎于网络。我们必须确保问题不是来自网络,仅此而已。在少数情况下,我们将在捕获文件中看到一些细节,这些细节可以帮助 DBA 完成他们正在做的工作。
做好准备
当 IT 团队向我们抱怨网络速度慢时,我们需要做一些事情来证实事实并非如此。遵循下一节中的说明,以确保我们避免缓慢的网络问题。
怎么做...
如果数据库出现问题,请按照下列步骤操作:
- 当您收到关于网络响应缓慢的投诉时,开始询问这些问题以准确地确定问题:
- 这个问题是地方性的还是全球性的?它是只发生在远程办公室,还是也发生在中心?当问题出现在整个网络中时,它不是 WAN 带宽问题。
- 所有客户的情况都一样吗?如果不是,可能是某个特定的问题只发生在某些用户身上,因为只有这些用户在运行导致该问题的特定应用。
- 客户端和服务器之间的通信线路是否加载?加载它们的应用是什么?
- 是所有应用都运行缓慢,还是只有应用与特定的数据库协同工作?可能是部分 PC 旧了,累了,还是服务器耗尽了资源?
- 完成问卷后,让我们开始工作:
- 打开 Wireshark 并开始捕获数据包。您可以将端口镜像配置到特定的 PC、服务器、VLAN 或连接到您拥有客户端的远程办公室的路由器。
- 查看 TCP 事件(专家信息)。它们发生在整个通信链路上、特定的 IP 地址上还是特定的 TCP 端口号上?这将有助于您隔离问题,并验证问题是出在特定的链路、服务器还是应用上。
当测量互联网连接的流量时,您会收到许多对网站、邮件服务器等的重新传输和重复确认。这就是互联网。在一个组织中,您应该预计有 0.1%到 0.5%的重新传输。当连接到互联网时,您可以期待更高的数字。
- 如果您发现网络中存在问题,请按照我们在前面章节中所学的方法解决问题。但是,有一些网络问题会影响数据库行为。在下面的例子中,我们看到了一个客户端的行为,它通过一条往返延迟为 35 到 40 毫秒的通信线路与服务器协作。
- 我们正在查看第八个 TCP 流( 1 ),连接以 TCP SYN/SYN-ACK/ACK 开始。我把这个作为参考( 2 )。我们可以看到整个连接用了 371 个包( 3 )。

图 15.9:跟随 TCP 流

图 15.10:数据库请求和响应—时间间隔
- 在这种情况下,您应该向 DBA 咨询如何显著减少网络上运行的数据包数量;或者,您可以转到另一种访问方式,例如,终端服务器或 web 访问。
- 另一个可能发生的问题是,您将有一个软件问题,这将反映在捕获文件中。如果你看一下下面的截图,你会看到有五次重新传输,然后从客户端打开一个新的连接。这看起来像是 TCP 问题,但它只发生在软件的特定窗口中。它只是一个停止处理的软件过程,这阻止了 TCP 对客户端的响应:

图 15.11:跟随 TCP 流—重新传输
它是如何工作的...
嗯,数据库如何工作对我来说一直是个谜。我们的任务是找出它们是如何影响网络的,这是我们在本节中学到的。
还有更多...
当您右键单击数据库客户端到服务器会话中的一个数据包时,将会打开一个包含对话的窗口。了解网络上运行的内容对 DBA 很有帮助。
当您面临延迟问题时,例如,当通过互联网或国际连接上的蜂窝线路工作时,服务器的数据库客户机并不总是足够有效。您可能需要通过 web 或终端访问数据库。
一个重要的问题是数据库如何工作。如果客户机正在访问数据库服务器,而数据库服务器正在使用从另一台服务器共享的文件,则可能是客户机-服务器工作得很好,但问题来自数据库服务器和文件服务器上的共享文件。在开始测试之前,请确保您了解所有这些依赖关系。
最重要的是,确保你有非常专业的 DBA 朋友。有一天你会需要它们。
导出 SMB 对象
导出 SMB 对象是导出 SMB 统计数据的一个简单功能。
做好准备
要导出 HTTP 对象,请选择文件|导出对象| SMB/SMB2。
怎么做...
要导出 SMB 对象,请执行以下步骤:
- 您可以在捕获运行时使用此功能,也可以对捕获的文件运行此功能。您将看到以下窗口:

图 15.12:SMB—对象导出
-
从这里,您可以获得被访问的服务器列表,包括每个服务器中被访问的文件。您可以看到数据包编号、主机名、内容类型(操作模式,读或读/写)、大小和文件名。
-
您可以使用“另存为”或“全部保存”按钮将数据保存在文件中。
-
在“内容类型”列中,您将看到以下内容:
- 文件:如果访问的内容是由指定服务器提供的文件。
- PIPE:正如我们在本章前面几节中讨论的,SMB 也用于 IPC。对于这种 IPC 机制,SMB 系统提供了命名管道服务。例如,微软的 RPC over SMB 实现使用命名管道基础设施运行。关于命名管道的详细信息超出了本书的范围,Wireshark 发现的任何其他文件也是如此。
要使用导出 SMB 对象功能,首先转到 TCP 首选项并启用 TCP 数据包重组(允许子分配器重组 TCP 流)。
成功导出并保存后,您应该会看到通过重组数据包构建的数据(文件、图片或任何使用 SMB 访问的内容)。
它是如何工作的...
此功能扫描当前打开的捕获文件或正在运行的捕获中的 SMB 数据包,获取重组的对象,并允许您将它们保存到磁盘。然后,可以用适当的查看器打开保存的对象,或者在可执行文件的情况下,只需点击它们就可以执行它们。此功能可用于各种目的,包括窃听和保存备份对象(例如,通过文件共享访问的文件)。
十六、分析企业应用的行为
在本章中,我们将介绍以下配方:
- 找出网络上运行的内容
- 分析微软终端服务器和 Citrix 的问题和协议
- 分析数据库流量和常见问题
- 分析 SNMP
介绍
Wireshark 的一个重要用途是应用分析和故障排除。当应用变慢时,可能是因为 LAN(在有线 LAN 中相当少见)、WAN 服务(由于带宽不足或高延迟而常见)或缓慢的服务器或客户端(我们将在 TCP 窗口问题中看到这种情况)。这也可能是由于缓慢或有问题的应用。
本章的目的是深入了解应用如何工作的细节,并提供隔离和解决这些问题的相关指南和方法。在第一个食谱中,我们将学习如何找出并分类在我们的网络上工作的应用。然后,我们将浏览各种类型的应用,看看它们是如何工作的,网络如何影响它们的行为,以及什么会出错。
在本章中,我们将学习如何使用 Wireshark 来解决企业网络中常见的应用问题并排除故障。这些是微软终端服务器和思杰,数据库,和简单网络管理协议(T2)。
找出网络上运行的内容
当监控一个新网络时,首先要做的是找出在其上运行的是什么。有各种类型的应用和网络协议,当它们都在网络上运行时,会相互影响和干扰。
在某些情况下,您将拥有不同的 VLANs、不同的虚拟路由和转发 ( VRFs ),或者连接到刀片服务器中虚拟端口的服务器。最终,所有东西都运行在同一个基础设施上,它们可以相互影响。
vrf 和 VLANs 之间有一个常见的混淆。即使它们的目的完全相同,但它们在不同的地方配置。虽然 VLAN 是在 LAN 中配置的,以便在 OSI 第 1 层和第 2 层提供网络隔离,但 vrf 是路由表的多个实例,使它们共存于同一路由器中。这是第 3 层操作,在不同客户的网络之间分离。vrf 通常出现在服务提供商环境中,使用多协议标签交换 ( MPLS )通过同一路由器网络向不同客户提供第 3 层连接,这样任何客户都无法看到任何其他客户的网络。
在这份食谱中,我们将了解如何详细了解网络上运行的内容,以及会降低速度的应用。
术语刀片式服务器指的是服务器机箱,它是前面有服务器架、后面有局域网交换机的机箱。它有几种不同的缩写;比如 IBM 称之为刀片中心,惠普称之为刀片系统。
做好准备
当您进入一个新的网络时,要做的第一件事就是连接 Wireshark 来嗅探应用和协议上运行的内容。请确保您遵循以下几点:
- 当需要监控服务器时,对其进行端口镜像,并查看其网络连接上运行的是什么。
- 当您需要监控远程办公室时,端口镜像将您连接到 WAN 连接的路由器端口。然后,检查有什么东西在上面跑。
- 当你需要监控一个缓慢的互联网连接时,端口镜像它,看看那里发生了什么。
在这个菜谱中,我们将看到如何使用 Wireshark 工具来分析什么正在运行,什么会导致问题。
怎么做...
要分析谁在说话,请遵循以下步骤:
-
使用上一节提到的选项之一连接 Wireshark。
-
您可以使用以下工具:
- 导航到统计|协议层次结构,查看网络上运行的协议以及占总流量的百分比
- 导航到统计|对话,查看谁在发言以及使用了什么协议
-
在协议层次结构功能中,您将看到一个窗口,帮助您分析谁在通过网络交谈。如下图所示:

在前面的屏幕截图中,您可以看到协议分布:
- 以太网:IP、逻辑链路控制 ( LLC )和配置测试协议(环回)
- 互联网协议版本 4: UDP、TCP、协议独立组播 ( PIM )、互联网组管理协议 ( IGMP )、通用路由封装 ( GRE )
如果您单击+号,将会显示所有底层协议。
要查看特定的协议吞吐量,请单击下面屏幕截图所示的协议。您将看到捕获期间应用的平均吞吐量(本例中为 HTTP):

单击 HTTP 左侧的+号将打开在 HTTP 上运行的协议(XML、MIME、JavaScripts 等)及其在捕获期间的平均吞吐量的列表。
还有更多...
在某些情况下(尤其是当您需要准备管理报告时),您需要提供网络统计数据的图形图像。对此有各种来源,例如:
- ether ape(Linux 版):【http://etherape.sourceforge.net/
- 指南针(Windows 版):http://download . CNET . com/Compass-Free/3000-2085 _ 4-75447541 . html?tag = mncol1
分析 Microsoft 终端服务器和 Citrix 通信问题
微软终端服务器,使用远程桌面协议 ( RDP )和 Citrix metaframe 独立计算架构 ( ICA )协议,广泛用于 pc 机和瘦客户机的本地和远程连接。关于这些类型的应用,需要记住的重要一点是,它们通过网络传输屏幕变化。如果只有很少的变化,它们将需要很低的带宽。如果有许多变化,它们将需要高带宽。
另一件事是,这些应用中的流量完全不对称。下行流量从几十 Kbps 到几 Mbps 不等,而上行流量最多几 Kbps。在使用这些应用时,不要忘记根据这一点来设计您的网络。
在本食谱中,我们将看到这些应用的一些典型问题以及如何定位它们。为了写作方便,我们会参考微软终端服务器,每次写微软终端服务器都会参考这一类的所有应用,比如 Citrix Metaframe。
做好准备
当怀疑 Microsoft 终端服务器运行缓慢时,首先向用户询问问题是什么。然后,将 Wireshark 连接到网络,并将端口镜像到投诉客户端或服务器。
怎么做...
当涉及到 Microsoft 终端服务器时,要找到问题所在,首先要找到用户并提出问题。请遵循以下步骤:
-
当用户抱怨网络速度慢时,问他们一个简单的问题:当他们切换窗口时,他们看到屏幕上显示的数据慢了吗?
-
如果他们说 windows 之间切换很快,那就不是微软终端服务器的问题了。微软终端服务器问题会导致窗口变化缓慢、图片冻结、图形文档滚动缓慢等等。
-
如果他们说他们正在尝试生成报告(当软件在 Microsoft 终端服务器上运行时),但报告是在很长一段时间后生成的,这是数据库问题,而不是 Microsoft 终端服务器或 Citrix 的问题。
-
当用户通过高延迟的通信线路使用 Microsoft 终端服务器并快速键入时,他们可能会遇到字符延迟。这是因为 Microsoft 终端服务器正在传输窗口更改,由于延迟时间长,这些窗口更改的传输速度会很慢。
-
使用 Wireshark 测量通信线路时:
- 使用 I/O 图形监控线路
- 使用过滤器监控上游和下游方向
- 在 y 轴上配置每秒位数
-
您将获得以下截图:

- 在前面的屏幕截图中,您可以看到一个典型的流量模式,下行流量很高,上行流量很低。请注意,Y 轴配置为位/节拍。在 485 秒和 500 秒之间的时间内,您会看到吞吐量达到最大值。这时应用会变慢,用户会开始感觉到屏幕冻结,菜单移动非常慢,等等。
当 Citrix ICA 客户端连接到演示服务器时,它使用 TCP 端口2598或1494。
-
当监视 Microsoft 终端服务器时,不要忘记客户端通过 Microsoft 终端服务器访问服务器,而服务器通过安装在服务器上的另一个客户端访问应用。性能问题可能来自 Microsoft 终端服务器或应用。
-
如果问题是 Microsoft 终端服务器的问题,则有必要确定是网络问题还是系统问题:
- 使用 Wireshark 检查网络,查看是否有负载。可以通过简单地增加通信线路来解决上一个屏幕截图中显示的负载。
- 检查服务器的性能。像 Microsoft Terminal Server 这样的应用大部分都消耗内存,所以主要检查内存(RAM)问题。
它是如何工作的...
Microsoft 终端服务器、Citrix Metaframe 和应用只是通过网络传输窗口更改。从你的客户端(带软件客户端或瘦客户端的 PC),你连接到终端服务器;和终端服务器运行各种客户端,用于从它连接到其他服务器。在下面的截图中,可以看到终端服务器运行的原理:

还有更多...
从终端服务器供应商那里,您会听到他们的应用改进了两件事。他们会说,它提高了客户机的可管理性,因为你不必为每个用户管理电脑和软件;您只需在服务器上安装所有东西,如果有什么东西出现故障,您可以在服务器上修复它。他们还会说网络上的流量会减少。
好吧,我不会进入第一场争论。这不是我们的主题,但我强烈反对第二个。使用终端客户端时,您的流量完全取决于您正在做的事情:
- 当使用基于文本/字符的应用时,例如,一些企业资源计划 ( ERP )屏幕,你输入并读取数据。使用终端客户端时,您将连接到终端服务器,而终端服务器将连接到数据库服务器。根据您使用的数据库应用,终端服务器可以显著提高性能,也可以根本不提高性能。我们将在数据库部分讨论这一点。在这里,您可以预期几十到几百 Kbps 的负载。
- 如果您正在处理常规的 office 文档,如 Word、PowerPoint 等,这完全取决于您正在做什么。处理一个简单的 Word 文档需要几十到几百 Kbps。使用 PowerPoint 将需要数百 Kbps 到数 Mbps,当您全屏显示 PowerPoint 文件时( F5 函数),吞吐量可高达 8 到 10 Mbps。
- 浏览互联网的速度从几百 Kbps 到几 Mbps 不等,取决于你在上面做什么。高分辨率的电影通过终端服务器传到互联网上——好吧,不要这样做。
在实现任何终端环境之前,请对其进行测试。我曾经有一个软件公司希望他们的 logo(在用户窗口的右上角)非常清晰醒目。他们每秒刷新 10 次,导致 2 Mbps 的通信线路被阻断。你永远不知道你不测试什么!
分析数据库流量和常见问题
你们中的一些人可能想知道为什么我们在这里有这个部分。毕竟,数据库被认为是 IT 环境中完全不同的一个分支。一边是数据库和应用,另一边是网络和基础设施。这是正确的,因为我们不应该调试数据库;这方面有 DBA。但是通过网络上的信息,我们可以看到一些问题,这些问题可以帮助数据库管理员解决相关问题。
在大多数情况下,IT 人员会先来找我们,因为人们把一切都归咎于网络。我们必须确保问题不是来自网络,仅此而已。在少数情况下,我们会在捕获文件中看到一些细节,可以帮助 DBA 完成他们正在做的工作。
做好准备
当 IT 团队向我们抱怨网络速度慢时,需要做一些事情来验证事实并非如此。按照下一节中的说明操作,以确保避免网络速度慢的问题。
怎么做...
如果数据库出现问题,请按照下列步骤操作:
- 当您抱怨网络响应缓慢时,开始询问以下问题:
- 这个问题是地方性的还是全球性的?它是只发生在远程办公室还是也发生在中心?当问题出现在整个网络中时,它不是 WAN 带宽问题。
- 所有客户的情况都一样吗?如果不是,那么可能是某个特定的问题只发生在某些用户身上,因为只有那些用户在运行导致该问题的特定应用。
- 客户端和服务器之间的通信线路是否加载?加载它们的应用是什么?
- 是所有应用都运行缓慢,还是只有应用与特定的数据库协同工作?可能是部分 PC 旧了,累了,还是服务器耗尽了资源?
- 完成问卷后,让我们开始工作:
- 打开 Wireshark 并开始捕获数据包。您可以将端口镜像配置到特定的 PC、服务器、VLAN 或连接到拥有客户端的远程办公室的路由器。
- 查看 TCP 事件(专家信息)。它们发生在整个通信链路上、特定的 IP 地址上还是特定的 TCP 端口号上?这将有助于您隔离问题,并检查问题是否出在特定的链路、服务器或应用上。
When measuring traffic on a connection to the internet, you will get many retransmissions and duplicate ACKs to websites, mail servers, and so on. This is the internet. In an organization, you should expect 0.1 to 0.5 percent of retransmissions. When connecting to the internet, you can expect much higher numbers.
- 如果您发现网络中存在问题,请按照我们在前面章节中所学的方法解决问题。但是有一些网络问题会影响数据库行为。在下面的例子中,我们看到了一个客户端的行为,它通过一条通信线路与服务器协作,往返延迟为 35 到 40 毫秒。
- 我们正在查看编号为 8 ( 1 )的 TCP 流,连接以 TCP SYN/SYN-ACK/ACK 开始。我把这个作为参考( 2 )。我们可以看到整个连接用了 371 个数据包( 3 ):

- 连接继续,我们可以看到数据库请求和响应之间的时间间隔大约为 35 毫秒:

- 因为我们有 371 个包来回传输,371 x 35 毫秒给了我们大约 13 秒。再加上一些可能发生的重新传输和一些低效率,这会导致用户等待 10 到 15 秒甚至更长时间来执行数据库查询。
- 在这种情况下,您应该向 DBA 咨询如何显著减少通过网络传输的数据包的数量,或者您可以采用另一种访问方式,例如终端服务器或 web 访问。
- 另一个可能发生的问题是,您将有一个反映在捕获文件中的软件问题。如果你看一下下面的截图,你会看到有五次重新传输,然后从客户端打开一个新的连接。这看起来像是 TCP 问题,但它只出现在软件的特定窗口中。它只是一个停止处理的软件过程,这阻止了 TCP 对客户端的响应:

它是如何工作的...
数据库的工作方式对我来说一直是个奇迹。我们的任务是找出它们是如何影响网络的,这是我们在本节中学到的。
还有更多...
当您右键单击数据库客户端到服务器会话中的一个数据包时,将会打开一个包含对话的窗口。了解网络上运行的内容对 DBA 很有帮助。
当您面临延迟问题时,例如,当通过互联网或国际连接上的蜂窝线路工作时,服务器的数据库客户机并不总是足够有效。您可能需要通过 web 或终端访问数据库。
一个重要的问题是数据库如何工作。如果客户机正在访问数据库服务器,而数据库服务器正在使用从另一个服务器共享的文件,那么客户机-服务器可能工作得很好;但是问题是从数据库服务器到文件服务器上的共享文件。在开始测试之前,请确保您了解所有这些依赖关系。
最重要的是,确保你的朋友中有非常专业的 DBA。总有一天,你会需要它们的!
分析 SNMP
SNMP 是一种众所周知的协议,用于通过定期收集数据和统计信息来监控和管理网络中不同类型的设备。除了监视之外,它还可以用于配置和修改设置,并给予 SNMP 服务器适当的授权。通常支持 SNMP 的设备有交换机、路由器、服务器、工作站、主机、VoIP 电话等等。
要知道 SNMP 有三个版本:SNMPv1、SNMPv2c 和 SNMPv3,这一点很重要。后来出现的 v2c 和 v3 版本提供了更好的性能和安全性。
SNMP 由三个组件组成:
- 被管理的设备(称为被管理设备)。
- SNMP 代理。这是一个运行在被管理设备上的软件,它从设备上收集数据并将其存储在一个数据库中,该数据库被称为管理信息库(MIB) 数据库。按照配置,这个 SNMP 代理定期将数据/统计数据导出到服务器(使用 UDP 端口
161),以及任何事件和陷阱。 - SNMP 服务器,也叫网络管理服务器()。这是一个服务器,它与网络中的所有代理进行通信,以收集导出的数据并构建一个中央存储库。SNMP 服务器提供对管理网络的 IT 人员的访问;他们可以远程监控、管理和配置网络。
了解设备中实现的某些 MIB 可能是特定于供应商的,这一点非常重要。几乎所有的供应商都宣传在他们的设备中实现的这些 MIB。 **# 做好准备
一般来说,我们从网络管理团队收到的投诉是关于在特定时间间隔内没有从设备获得任何统计数据或陷阱,或者对设备完全不可见。按照下一节中的说明来分析和解决这些问题。
怎么做...
如果出现 SNMP 问题,请遵循以下步骤。
当您收到关于 SNMP 的投诉时,开始问这些问题:
- 这是最近带入网络的新的被管理设备吗?换句话说,设备中的 SNMP 曾经正常工作过吗?
- 如果这是新设备,请咨询相关设备管理员和/或检查 SNMP 相关配置,如团体字符串。
- 如果 SNMP 配置看起来正确,请确保 NMS 的 IP 地址配置正确,并检查相关的密码凭据。
- 如果正在使用支持加密的 SNMP v3,请确保检查与加密相关的设置,如传输方法。
- 如果设置和配置看起来有效且正确,请确保被管理设备与 NMS 连接,这可以通过简单的 ICMP pings 来验证。
- 如果被管理设备工作正常,并且在特定时间内没有报告任何统计数据或警报:
- 讨论中的设备在控制平面或管理平面中是否有任何问题阻止其导出 SNMP 统计数据?请注意,对于网络中的大多数设备,SNMP 是优先级最低的协议,这意味着如果设备有更高优先级的进程要处理,它会将 SNMP 请求和响应保留在队列中。
- 该问题是仅出现在特定设备上,还是出现在网络中的多台设备上?
- 网络(被管理设备和 NMS 之间)是否遇到任何问题?例如,在任何第 2 层生成树聚合期间,受管设备和 SNMP 服务器之间可能会发生流量丢失,NMS 将因此失去对受管设备的可见性。
正如您在下图中看到的,IP 地址为172.18.254.139的 SNMP 服务器正在对 IP 地址为10.81.64.22的工作站执行带有序列GET-NEXT-REQUEST的 SNMP 遍历,该工作站反过来以GET-RESPONSE响应。为简单起见,用于这些捕获的 Wireshark 过滤器是 SNMP。
工作站启用了 SNMP v2c,社区字符串为 public。
让我们讨论一些常见的故障场景。
用错误的 SNMP 版本轮询被管理设备
正如我前面提到的,工作站启用了 v2c,但是当 NMS 用错误的 SNMP 版本轮询设备时,它没有得到任何响应。因此,确保使用正确的 SNMP 版本轮询受管设备非常重要。
用错误的 MIB 对象 ID 轮询被管理设备(OID)
在以下示例中,NMS 正在轮询被管理设备,以获取在接口上发送的字节数。字节计数的 MIB OID 是. 1.3.6.1.2.1.2.2.1.16,即 ifOutOctets。讨论中的被管理设备有两个接口,分别映射到 OID 1 . 3 . 6 . 1 . 2 . 1 . 2 . 1 . 16 . 1 和 1 . 3 . 6 . 1 . 2 . 1 . 2 . 1 . 16 . 2。当 NMS 轮询设备以检查第三个接口(不存在)的统计数据时,它返回一个noSuchInstance错误。
它是如何工作的...
正如您在前面的章节中所了解到的,SNMP 是一个非常简单明了的协议,所有与它相关的标准和 MIB OIDs 信息都可以在互联网上找到。
还有更多...
以下是一些关于 SNMP 和 MIB OIDs 的有用信息的网站:
- 微软 TechNet SNMP:https://TechNet . Microsoft . com/en-us/library/cc 776379(v = ws . 10)。aspx
*** 思科 IOS MIB 定位器:http://mibs.cloudapps.cisco.com/ITDIT/MIBS/servlet/index****
十七、SIP、多媒体和 IP 电话故障排除
在本章中,您将了解:
- IP 电话原理和正常操作
- SIP 操作原理、消息和错误代码
- 基于 IP 和 RTSP 的视频
- Wireshark 的 RTP 流分析和过滤功能
- Wireshark 的 VoIP 通话重播功能
介绍
为了传输语音、视频或多媒体,我们需要执行两个功能。第一个是承载媒体流,主要是语音或视频,第二个是用于信令,即建立和终止呼叫,邀请参与者加入呼叫,等等。多年来,为信令提出了两个协议组:
- ITU-T 协议集,包括作为该协议集的伞式协议的 H.323、用于注册和地址解析的 H.225、用于控制的 H.245 以及其他一些协议
- IETF 协议套件,包括作为信令协议的 SIP(RFC 3261 和后来的更新)和描述会话参数的会话描述协议(SDP)(RFC 4566)
ITU-T 协议集在过去几年中逐步淘汰,今天的大多数应用都在使用 IETF 协议集,我们将在本章重点介绍 IETF 协议集。在下图中,您可以看到 IETF 协议套件的结构。
对于流传输,两个套件都使用 RTP 和 RTCP (RFC 3550 和更新版本)。RTP 用于媒体传输,RTCP 用于控制流的质量。
在基于 IP 的网络上传输多媒体会话有几种协议,如下图所示:

在本章中,我们将讨论不同的协议以及如何使用 Wireshark 分析音频和视频流。
IP 电话原理和正常操作
IP 电话是将模拟语音呼叫转换成 IP 数据包并在 IP 网络上传输的概念。SIP 等呼叫信令协议将用于建立端点之间的呼叫会话,然后利用实时传输协议 ( RTP )作为应用层协议,通过 IP 网络传输媒体流。音频(或视频)数据包将与 RTP 报头封装在一起,通常在 UDP 上运行。
在本菜谱中,我们将了解 IP 电话的正常运行,以及如何通过基于 Wireshark 的捕获分析将 RTP 和 RTCP 用于端到端音频流。
做好准备
由于 IP 电话将模拟呼叫转换为数字呼叫,因此只能在 IP 部分进行捕获。Wireshark 不能帮助捕获网络模拟部分的任何信号。
怎么做...
RTP 操作
打开 Wireshark capture 并使用 Telephony 菜单导航至 RTP | RTP Streams,如以下屏幕截图所示:

选择前面的选项将在新的弹出窗口中列出所有 RTP 流,如下所示:

每个 RTP 流将以下列格式列出:
- 源地址:RTP 流端点的源 IP 地址。这可以是 IP 电话或电话会议单元。
- 源端口:UDP 头的源端口。会话发起者使用本地唯一的随机端口作为源端口。
- 目标地址:RTP 流端点的目标 IP 地址。
- 目的端口:UDP 报头的目的端口。会话发起者使用 RTP 端口范围中的一个端口作为目的端口。RTP 使用多种 UDP 端口来支持并发呼叫。端口范围从 16384 到 32767。
- SSRC:同步源,这是一个 RTP 流标识符。
- Payload:定义用于流的编解码器类型的 RTP 有效负载。
- 附加流数据:附加细节,包括为每个流捕获的数据包数量、丢失的数据包、抖动/延迟细节等。
从弹出窗口中选择相关的流或使用跟随流选项:

这些解释如下:
- 这是一个 RTP 数据包的屏幕截图。Wireshark 将突出显示设置此 RTP 数据包的信令协议的数据包编号。
- RTP 包的有效载荷字段将描述所使用的音频编解码器。在前面的数据包中,G711 用作音频编解码器。
- 每个 RTP 分组将包括一个序列号,对于每个后续分组,该序列号将依次递增 1。
- RTP 数据包还携带来自端点的时间戳。
- 序列号和时间戳用于衡量服务质量。
RTCP 行动
获取 RTP 呼叫流的 UDP 端口号,并将其递增 1,并使用该端口号过滤相关的 RTCP 数据包。例如,如果 UDP 端口是用于 RTP 数据包的24950,则 UDP 端口24951将用于 RTCP 数据包。

前面的屏幕截图是端点14.50.201.48和172.18.110.203之间使用 UDP 端口23978的一个 RTP 流的截图。与该 RTP 流相关联的 SSRC 是0x252eb528。通过使用 UDP 端口23979,我们可以识别该流的相关 RTCP 数据包:

在前面的截图中,发送者 SSRC 将匹配 RTP 包的 SSRC(0x252eb528)。发送者报告是一种 RCTP 消息,携带 RTP 流的遥测细节。确保以下事项:
- 损失分数:这是零或完全在公差范围内。此计数器显示在当前和上一个发送者报告之间丢失的 RTP 数据包的数量。
- 累计丢包数:为零或在容许范围内。此计数器显示在此会话中丢失的 RTP 数据包的总数。
- 到达间隔抖动:这完全在的范围内。该计数器显示接收数据包的抖动测量值。
前面计数器中的任何问题都可能会指出端到端呼叫流程中的问题。关于 RTCP 的使用以及它如何帮助反馈循环的更多细节在它如何工作中解释...一节。
它是如何工作的...
IP 电话大量利用 RTP 和 RTCP 实现端到端呼叫流。RTP 是用于在端点之间传输媒体流(音频和视频)的应用层协议。

RTP 操作原理
RTP 用于承载媒体。在 RTP 之前,我们有各种类型的语音和视频压缩编解码器。以下是 RTP 数据包的样本数据包格式:

RTP 报头携带特定于流和方向的细节,可用于会话识别、弹性和实时抖动/延迟测量。RTP 提供了定时恢复、丢失检测和纠正、有效载荷和源识别以及媒体同步的机制。
RTP 使用 UDP 作为传输层协议。在下图中,您可以看到 RTP 数据包结构:

标题中的字段如下:
- 版本(V) :该字段表示 RTP 版本
- 填充(P) :该字段指示数据包在末尾包含一个或多个不属于有效载荷的附加填充字节
- 扩展位(X) :该字段指示标准报头之后的固定报头
- CSRC 计数(CC) :该字段包含固定报头之后的 CSRC 字段的数量
- 标记(M) :该字段用于指示应用事件,例如视频帧边界
- 有效载荷类型:该字段标识由接收应用解释的 RTP 有效载荷的格式
- 序列号:每发送一个 RTP 包,该字段加 1。由接收器用来检测数据包丢失
- 时间戳:该字段反映 RTP 数据流中八位字节的采样率
- 同步源(SSRC) :该字段是随机选择的流标识符,使得同一 RTP 会话中没有两个同步源具有相同的 SSRC 标识符
- 贡献源标识符列表(CSRC) :该字段标识包含在该分组中的有效载荷的贡献源(即,流源)
在下图中,您可以看到序列和时间戳机制是如何工作的:

正如我们在图中看到的,每发送一个 RTP 数据包,序列号就增加一,而时间戳则增加一个数据包所覆盖的时间。例如,分组号 1 将两者都设置为 1;分组 2 将具有序列号 2 和时间戳 12;并且对于其他分组以这种方式继续。接收器将接收告诉他分组顺序的序列号和告诉他分组离开接收器的时间的时间戳。接收器将使用这两者来回放接收到的数据。
RTCP 操作原理
RTCP 指定在会话的源和目标之间交换的报告。
RTCP 与 RTP 协同工作,端点使用它来监控 RTP 数据包的端到端质量,并通过以报告形式交换信息来控制传输。对于每个 RTP 流,将有一个 RTCP 流用于交换关于 RTP 流的不同报告。报告包含发送的 RTP-PDU 数量、丢失的 RTP-PDU 数量、到达间隔抖动等统计信息。应用可以使用这些报告来修改发送方的传输速率并用于诊断目的。
RTCP 有几种报告类型,发送方和接收方根据发送和接收的数据相互更新。以下是几种 RTCP 数据包类型:
- 发件人报告(类型 200)
- 接收方报告(201 型)
- 源描述(类型 202)
- 再见(203 型)
- 特定应用(204 型)
RFC 3550 中提供了每种类型的详细描述。在下面的屏幕截图中,您可以看到一个这样的例子,其中我们看到一个发送者报告,它告诉接收者发送了多少个数据包和八位字节、时间戳信息以及接收者可以使用的其他参数。

SIP 操作原理、消息和错误代码
会话发起协议或 SIP (RFC 3261 和各种扩展)是在应用层操作的信令和控制协议,负责创建、修改和终止一个或多个参与者之间的多媒体会话。当发送 SIP 请求时,会话参数通过 SDP (SDP,RFC 4566)发送,这使得用户能够在它们之间就一组兼容的媒体类型达成一致。当会话被创建时,语音或视频由 RTP 传送,并且可选地由 RTCP 控制。
SIP 将端点定义为用户代理 ( UAs ),并且创建会话的过程包括 UA 协商,以便就他们想要创建的会话的特征达成一致。对于诸如定位会话参与者、注册、呼叫转移等附加服务,SIP 定义了称为服务器的网络主机,UAs 可以向其发送注册、发送会话邀请以及其他请求。
在本菜谱中,我们将讨论协议集的信令部分,即 SIP,以及如何使用 Wireshark 来验证 SIP 的正常运行。
做好准备
为了建立端到端的呼叫流,可以在不同的 SIP 端点之间创建 SIP 会话。

更好的方法是在多个会话共用的交换机或路由器中执行 Wireshark 捕获。在前面的拓扑中,我们在172.18.110.203上执行捕获,因为它是两个 SIP 会话的终止节点。
怎么做...
- 打开 Wireshark capture 并使用 Telephony 菜单导航 SIP 流,如以下屏幕截图所示:

- SIP 流选项将在一个新的弹出窗口中列出数据包捕获中的所有 SIP 流。SIP 统计将列出所有 SIP 消息和数据包捕获中的计数。以下是列出捕获中 SIP 流的弹出窗口的屏幕截图:

- 前面的屏幕截图显示有两个 SIP 流。连接到 SIP 号码为
4085267260的 UA 的 IP 地址为172.18.110.200的多维数据集或 CCM 正在向主机名为cube1.entcomp1.com的多维数据集发起 SIP 会话。 - 使用显示过滤器跟踪 SIP 数据包的相关 TCP 流,并通过导航到 Statistics | Flow Graph 获得 SIP 流的流图。
- 启用“限制显示过滤器”选项,以限制仅用于 SIP 流的流图。这将列出 SIP 端点之间交换的所有 SIP 消息,作为便于分析的图表。
- 虽然遵循 TCP 流只会列出特定的 SIP 会话,但是本地 UUID 可以用作过滤器。它将过滤与本地 UUID 关联的所有 SIP 会话。当端点(在这种情况下是 IP 电话)触发第一个 SIP 会话时,它包括它自己的 ID 作为本地 UUID,这将在沿着通向远程端点的路径的所有后续 SIP 会话中被携带。在我们的例子中,IP 电话 1 的本地 UUID 是
025ac8cd-0010-5000-a000-acbc3296f7dd。

-
前面的屏幕截图列出了与过滤器中提到的本地 UUID 相关联的所有 SIP 会话。如您所见,有两个 SIP 会话:
- 从
172.18.110.200到172.18.110.203的会话 - 从
172.18.110.203到172.18.110.206的会话
- 从
-
通过导航流图并将其限制为显示,我们可以在捕获中看到每个 SIP 会话中交换的 SIP 消息。以下是我们拓扑中 SIP 会话的示例图:

它是如何工作的...
- 当 UA 希望建立多媒体会话时,它向远程 UA 发送
INVITE方法。在下图中,您可以看到一个基本呼叫流程的示例:
An end device in SIP is called UA. A user agent can initiate or receive a call. A UA can be an IP phone, video camera, software client, or any device or software that participates in an SIP session.
-
在
INVITE之后,您应该会看到来自另一端的尝试、会话进度、响铃或它们的组合 -
我们可以看到 172.18.110.200 上的发起方和 172.18.110.203 上的响应方之间的会话进度:
- 从会话发起者发送 INVITE 方法。这将始终是开始对话的第一个数据包。
- 响应者以正在尝试(代码 100)、会话进度(代码 183)和三秒后响铃(代码 180)来回答。然后它回答 OK(代码 200),这意味着听筒被拿起。
-
在前面的拓扑中,中间有多个立方体帮助建立端到端的呼叫流
-
左侧的立方体或交换机
172.18.110.200向交换机172.18.110.203发送邀请请求 -
交换机
172.18.110.203回复 SIP 尝试消息。 -
交换机向右侧的立方体或交换机
172.18.110.206发送邀请。 -
交换机
172.18.110.206发送 Trying(代码 100),然后会话进行到交换机(代码 183)。 -
当
172.18.110.203接收到来自172.18.110.206的振铃时,依次发送振铃消息给172.18.110.200。 -
当呼叫被应答时,目的地端点在
172.18.110.206向通信管理器发送 SIP 200 OK。SIP 200 OK 消息在消息体中携带 SDP 内容。SDP 提供有关 RTP UDP 端口号的信息,并列出由目的地端点提供的音频和视频编解码器(也称为 SDP 提供)。SIP 200 OK 消息穿过 SBC (172.18.110.203)、通信管理器(172.18.110.200)并到达发起端点。

- 在前面的示例截图中,SDP 消息指示将 UDP 端口
25944用于 RTP 音频流。此外,它还包括支持的编解码器等其他详细信息。

- 发起端点选择音频代码之一,并在 SIP ACK 中向其通信管理器发送所选择的编解码器及其 RTP 端口号信息(也称为 SDP 应答)(
172.18.110.200)。这个SIP ACK消息穿过 SBC (172.18.110.203)、通信管理器(172.18.110.206)并到达目的地端点。收到 ACK 后,目的地端点开始在端口8260发送 RTP 数据包。它还将在端口25944接收 RTP 数据包。 - 当用户挂断呼叫时,SIP BYE 消息将在 SIP 设备之间交换,以终止呼叫信令会话。
- 如果在任何阶段收到错误消息,将不会建立连接。
不要忘了 SIP 工作在 UDP 之上。由于在发送请求之前,UDP 不会打开与另一端的任何连接,因此有可能只是因为网络可达性问题而导致请求无法到达目的地。因此,当您没有得到响应时,可能是因为网络问题,邀请没有到达目的地。
下表列出了 SIP 错误代码及其可能的原因。除非另有说明,这些代码在 RFC 3261 中定义。
1xx 代码-临时/信息
1xx 代码或临时/信息代码是接收到的请求仍在处理中的代码,接收方通知发送方。下表对它们进行了详细描述:
| 代码 | 事件名称 | 原因 |
| 100 | 令人厌烦的 | 服务器已经收到并接受了该请求,并且正在为此调用采取措施。 |
| 180 | 铃声 | 接收呼叫的 UA 正在提醒终端用户。这是在执行此操作时发送回客户端的消息。 |
| 181 | 呼叫转移 | 呼叫正被转接到另一个目的地。 |
| 182 | 排队 | 被叫方暂时不可用,服务器保存该消息以供以后发送。 |
| 183 | 会话进度 | 接收服务器正在处理该会话。关于呼叫进度的附加细节可以在消息头中传达。 |
2xx 代码–成功
2xx 代码或成功代码表示该操作已被成功接收、理解和接受。下表对它们进行了详细描述:
| 代码 | 事件名称 | 原因 |
| 200 | 好的 | 请求已被接受、处理并成功 |
| 202 | 可接受的 | 请求已被接受进行处理,但其处理尚未完成(RFC 3265) |
3xx 代码–重定向
3xx 代码表示需要采取重定向操作来完成请求。这里对它们进行了详细描述:
| 代码 | 事件名称 | 原因 |
| 300 | 多选 | 请求中的地址被解析为几个选项,接受服务器可以将其转发给其中一个选项。UA 可以使用 contact 头字段中的地址进行自动重定向,或者在重定向消息之前与发送者确认。 |
| 301 | 永久移动 | 无法在请求 URI 中的地址找到用户,发出请求的客户端应该尝试联系头字段中提供的地址。发送方应使用该更改更新其本地目录。 |
| 302 | 临时移动 | 请求客户端应该在联系报头字段中提供的新地址重试请求。 |
| 305 | 使用代理 | 请求的资源必须通过代理访问,代理的地址由 contact 字段给出。 |
| 380 | 替代役 | 呼叫未成功,因此接收方发送此响应,以便在接收方提供替代服务。这些服务在消息体中描述。 |
4xx 代码–客户端错误
4xx 代码或客户端错误表示请求包含错误的语法,或者无法在此服务器上实现。下表对它们进行了描述:
| 代码 | 事件名称 | 原因 |
| 400 | 错误的请求 | 由于语法错误,无法处理请求。 |
| 401 | 未经授权的 | 收到的请求需要用户身份验证。通常客户端会向用户索要。 |
| 402 | 要求付款 | 这是留作将来使用的。 |
| 403 | 被禁止的 | 服务器理解该请求,但拒绝执行。客户不应再次尝试。 |
| 404 | 未发现 | 服务器通知客户端用户不存在于请求 URI 中指定的域中。 |
| 405 | 不允许的方法 | 客户端发送的方法不允许被它使用。响应将包括一个allow头字段,通知发送者他可以使用哪些方法。 |
| 406 | 不可接受 | 根据请求中发送的accept报头字段,请求所标识的资源只能生成具有不可接受的内容特征的响应实体。 |
| 407 | 需要代理验证 | 客户端必须通过代理服务器的身份验证。 |
| 408 | 请求超时 | 服务器无法在预期时间内响应。过一会儿,客户端可能会再次发送请求。 |
| 410 | 过去的 | 请求的资源在服务器上不再可用,并且转发地址未知。这种情况被认为是永久性的。 |
| 413 | 请求实体太大 | 服务器拒绝处理请求,因为请求实体的主体大于服务器能够或愿意处理的范围。 |
| 414 | 请求-URI 太长 | 服务器拒绝为该请求提供服务,因为请求 URI 超过了服务器能够或愿意解释的长度。 |
| 415 | 不支持的媒体类型 | 服务器拒绝处理该请求,因为服务器不支持该请求的邮件正文格式。 |
| 416 | 不支持的 URI 方案 | 服务器不知道请求 URI,因此服务器无法处理该请求。 |
| 420 | 错误的扩展名 | 服务器不理解从客户端收到的协议扩展。 |
| 421 | 需要扩展 | 接收请求的 UA 需要一个特定的扩展来处理它,但是这个扩展没有在请求的 supported 报头字段中列出。 |
| 423 | 间隔太短 | 服务器拒绝该请求,因为该请求刷新的资源的过期时间太短。 |
| 424 | 错误的位置信息 | 此响应代码表示由于其位置内容而拒绝请求。这表示位置信息不正确或不令人满意(RFC6442)。 |
| 428 | 使用标识头 | 当验证者接收到缺少身份报头的 SIP 请求时,发送该消息,以指示该请求应该使用身份报头重新发送(RFC4474)。 |
| 429 | 提供推荐人身份 | 这提供了引用者身份(RFC3892)。 |
| 433 | 不允许匿名 | 这表明服务器拒绝满足请求,因为请求者是匿名的(RFC5079)。 |
| 436 | 错误的身份信息 | 当 Identity-Info 标头(RFC4474)中有错误信息时,会使用此响应。 |
| 437 | 不支持的证书 | 当验证者无法验证 Identity-Info 标头(RFC4474)中的 URI 所引用的证书时,将使用此选项。 |
| 438 | 无效的身份标头 | 当验证者(接收者 UA)接收到具有与验证者计算的摘要串不对应的身份签名的消息时,使用这种方法(RFC4474)。 |
| 470 | 需要同意 | 这是对包含 URI 列表的请求的响应,该列表中至少有一个 URI 是这样的,即中继没有访问权限(RFC5360)。 |
| 480 | 暂时不可用 | 已成功联系呼叫者的终端系统,但呼叫者当前不可用。 |
| 481 | 呼叫/交易不存在 | 接收 UA 接收到与任何现有事务或对话都不匹配的请求。 |
| 482 | 检测到环路 | 服务器检测到一个循环。 |
| 483 | 啤酒花太多 | 服务器收到一个包含等于零的 Max-Forwards 标头字段的请求。 |
| 484 | 地址不完整 | 服务器收到一个不完整的请求-URI。 |
| 485 | 引起歧义的 | 这个请求——URI 不清楚。响应可以在联系人报头字段中包含可能地址的列表。 |
| 486 | 这里很忙 | 已成功联系呼叫者的终端系统,但呼叫者当前无法或不愿意通过此终端系统接听其他呼叫。 |
| 487 | 请求终止 | 请求被 BYE 或 CANCEL 请求终止。 |
| 488 | 这里不接受 | URI 不接受请求中提到的具体资源。 |
| 491 | 请求待定 | 接收 UA 有一个待定请求。 |
| 493 | 无法解码的 | 请求包含加密的 MIME 正文,收件人无法解密。 |
5xx 代码–服务器错误
5xx 代码或服务器错误代码表示服务器无法满足明显有效的请求。下表对它们进行了详细描述:
| 代码 | 事件名称 | 原因 |
| 500 | 服务器内部错误 | 意外情况导致服务器无法完成请求 |
| 501 | 未实施 | 服务器不支持请求实现该请求的功能 |
| 502 | 错误网关 | 尝试完成请求时,网关或代理从其访问的下游服务器收到无效响应 |
| 503 | 服务不可用 | 由于服务器临时过载或维护,服务器暂时无法处理请求 |
| 504 | 服务器超时 | 处理请求的服务器已将请求发送到另一台服务器进行处理,但响应没有按时到达 |
| 505 | 不支持的版本 | 服务器不支持请求中使用的 SIP 协议版本 |
| 513 | 消息太大 | 由于消息太长,服务器无法处理该请求 |
6xx 代码–全局故障
6xx 代码或全局失败代码表示该请求无法在任何服务器上实现。下表对它们进行了详细描述:
| 代码 | 事件名称 | 原因 |
| 600 | 到处都很忙 | 已成功联系接收方的终端系统,但用户正忙,此时不想接听电话 |
| 603 | 下降 | 已成功联系接收 UA,但用户明确不希望或不能参与 |
| 604 | 不存在于任何地方 | 服务器拥有用户在请求 URI 中指明的权威信息,而这些信息在任何地方都不存在 |
| 606 | 不可接受 | 已成功联系用户,但 SDP 描述的会话描述的某些方面不可接受 |
基于 IP 和 RTSP 的视频
根据互联网协会发布的互联网报告,全球消费者互联网流量的 70%以上是 IP 视频流量。在娱乐和教育领域,视频内容非常普遍,并通过使用 IP 作为视频内容传输的传输媒体来利用 IP 网络的成熟度。各种编解码器用于将视频内容编码为比特流,并使用 RTP 作为端到端视频数据传输的传输协议。
视频流量可以是视频流,也可以是一对一的视频呼叫。尽管在任一情况下,RTP 被用作视频数据分组的协议,但是不同的控制平面信令协议可以用于建立视频呼叫会话。例如:
- SIP 可以用作视频通话的信令协议
- RTSP 可以用作流式视频的信令协议。
在本菜谱中,我们将讨论这两个选项,并了解如何使用 Wireshark 来分析正常操作。
做好准备
捕获数据包的端口镜像可以在客户端或服务器端完成。将 Wireshark 连接到端点附近,并捕获数据包进行分析。
怎么做...
SIP 信令协议:

当 SIP 用作信令协议时,端点和路径上的任何多维数据集或 SIP 代理之间交换的消息与中解释的完全相同...SIP 操作原理、消息和错误代码部分。启用视频通话时,端点之间交换的其他详细信息如下:
- 当端点能够进行视频呼叫时,SDP 消息不仅携带音频流的 RTP 信息,还携带视频流的 RTP 信息。

-
在前面的屏幕截图中,可以观察到 SDP 消息携带音频和视频流的媒体描述细节。它还标志着使用 H.264 作为视频编解码器。
-
SDP 消息指示将 UDP 端口
23978用于音频流,将 UDP 端口30290用于视频流。

- 收到 SDP 消息后,视频端点将使用 UDP 端口
30290传输 RTP 视频流。如前面的截图所示,H.264 编解码器用于视频有效载荷编码。
实时流协议:
像 SIP 消息一样,RTSP 也使用 SDP 消息来指示 RTP 音频/视频流信息。
- 打开 Wireshark 捕获,使用 rtsp 作为显示过滤器过滤 RTSP 数据包。
- 导航到统计和流量图选项,获得 RTSP 流量图。

- 流程图将列出客户端和媒体服务器之间交换的 RTSP 消息。在前面的截图中,客户端
10.83.218.91与184.72.239.149建立了 RSTP 会话。

- 导航到电话和 RTSP 和数据包计数器,列出收到的不同 RTSP 消息。
- 关于 RSTP 正常运行的更多细节可以在它是如何工作的...一节。
它是如何工作的...
实时流协议:
如同 SIP(其用于信令,而 RTP 用于媒体的传输),由 RTSP 控制的流可以使用任何传输协议;在许多情况下,他们也使用 RTP。该协议有意在语法和操作上与 HTTP 相似,并使用相同的语法。
最常见的 RTSP 方法(命令)是(C-Client,S-Server)。
| 命令 | 方向 | 功能 |
| OPTIONS | C 到 S 或 S 到 C | 确定服务器/客户端的功能 |
| DESCRIBE | c 到 S | 获取媒体流的描述 |
| GET_PARAMETERS | c 到 S | 检索 URI 中参数的值 |
| ANNOUNCE | C 到 S 或 S 到 C | 宣布新会话的描述 |
| SETUP | c 到 S | 创建媒体会话 |
| PLAY | c 到 S | 开始媒体传送 |
| RECORD | c 到 S | 开始媒体录制 |
| PAUSE | c 到 S | 暂停媒体传送 |
| REDIRECT | 从 s 到 C | 重定向到另一台服务器 |
| TEARDOWN | 从 s 到 C | 执行立即拆卸 |
响应类别包括:
| 代码系列 | 类型 | 意为 |
| 1xx | 报告的 | 收到请求,继续处理 |
| 2xx | 成功 | 该操作已被成功接收、理解和接受 |
| 3xx | 重寄 | 必须采取进一步的措施来完成请求 |
| 4xx | 客户端错误 | 请求包含错误的语法或无法实现 |
| 5xx | 服务器错误 | 服务器未能满足一个明显有效的请求 |

- 客户端
10.83.218.91将通过 TCP 端口554建立一个 RTSP 会话。

-
建立会话后,客户端发送一条 RTSP 请求消息,其中包含选项方法和请求的资源。在前面的截图中,请求的资源是来自
184.72.239.149的mp4:BigBuckBunny_175k.mov。 -
服务器回复 RTSP 200 OK。RTSP 响应消息也用于携带能力。响应将携带来自请求消息的 CSeq 号。

- 客户端现在发送 RTSP 请求消息,该消息带有 URI 中资源的 DESCRIBE 方法。这用于从服务器检索内容描述或媒体对象。对于每个后续的请求消息,CSeq 号增加 1。

- 服务器将回复 RTSP 200 OK。该响应将携带具有会话和内容相关信息的 SDP。SDP 指示对 RTP 音频流使用动态 RTP 类型 96,对 RTP 视频流使用动态 RTP 类型 97。
- 与使用 SDP 交换 RTP 端口信息的 SIP 会话不同,RTSP 使用 SETUP 方法来实现此目的。客户端将使用 SETUP 方法发送请求消息,并携带用于 RTP 音频流的 UDP 端口。

- 在前面的屏幕截图中,客户端表示 UDP 端口
50960被分配给 RTP 音频流,而50961被分配给 RTCP 流量。 - 使用
SETUP方法的类似请求也将被交换为 RTP 视频流。 - 从服务器接收到 RTSP 200 OK 后,它将发送其他方法(如播放)来启动音频/视频流。
还有更多...
RFC 7826 提出了 RTSP v 2.0;它取代了 RFC 2326 中定义的 RTSP 1.0 版。
用于 RTP 流分析和过滤的 Wireshark 功能
Wireshark 具有各种内置功能,在分析 RTP 音频和视频流时非常有用。在本菜谱中,我们将讨论其功能以及如何使用它进行故障排除。
做好准备
当特定客户端出现问题时,使用端口镜像将 Wireshark 连接到客户端端口。当所有客户端都出现问题时,请将 Wireshark 连接到连接所有客户端的公共交换机。
怎么做...
- 打开 Wireshark capture 并使用 Telephony 菜单导航至 RTP | RTP Streams ,如以下截图所示:

- 这将导致一个弹出窗口,列出捕获中可用的所有 RTP 流。

-
选择要分析的相关流,并使用查找反向来识别端点之间反向的 RTP 流。
-
使用准备过滤器过滤所有正向和反向的 RTP 数据包。或者,使用分析来分析正向和反向 RTP 流。点击分析将弹出一个新窗口,显示正向和反向指标。

- 不同的选项卡列出了与正向和反向 RTP 流相关的指标。如前面的屏幕截图所示,将对 RTP 流进行分析,以列出正向和反向流的抖动、延迟和数据包丢失...

- 前面的屏幕截图是特定 RTP 流的示例图,突出显示了流的正向和反向抖动。
它是如何工作的...
不考虑所使用的呼叫信令协议,大多数当前的音频和视频流使用 RTP 作为应用层协议。RTP 协议通过在应用层对数据包进行排序来提供可靠性,并通过在每个 RTP 数据包中以小块形式转发音频和视频有效负载来帮助控制抖动和延迟。
本章的 IP 电话原理和正常操作部分提供了关于 RTP 流如何工作的更多详细信息。
用于 VoIP 呼叫重放的 Wireshark 功能
Wireshark 增加了音频回放功能,可以对 RTP 音频流进行编码并播放实际的音频内容。播放流用于此目的。该选项合并来自正向和反向的音频流,并允许用户收听实际的对话。
做好准备
当特定客户端出现问题时,使用端口镜像将 Wireshark 连接到客户端端口。当所有客户端都出现问题时,请将 Wireshark 连接到连接所有客户端的公共交换机。
怎么做...
- 打开 Wireshark capture 并使用 Telephony 菜单导航至 RTP | RTP Streams,如以下屏幕截图所示:

- 选择相关的 RTP 音频流和相关的反向流。现在使用分析来合并来自两个方向的流。这将弹出一个不同的窗口,如下所示:

- 使用播放流并收听实际的音频内容。
- Wireshark RTP 播放不适用于 RTP 视频流。因此它不能用于观看视频内容。
它是如何工作的...
Wireshark 解释用于编码音频流的音频编解码器,并利用该编解码器解码音频文件内容。Wireshark 将使用 G711 编解码器将 RTP 音频流保存为一种.au文件格式,允许我们回放捕获的对话。
还有更多...
目前,Wireshark 原生支持使用 G711 编解码器播放 RTP 音频流。如果用于音频流的编解码器是 G729,则不会播放。使用以下程序转换 G729:https://wiki.wireshark.org/HowToDecodeG729
十八、带宽和延迟问题故障排除
在本章中,您将了解:
- 测量网络带宽和应用流量
- 使用 Wireshark 测量抖动和延迟
- 分析网络瓶颈、问题和故障排除
介绍
端到端服务和应用的性能在很大程度上取决于各种网络参数,如带宽、延迟、抖动和丢包。不同类型的终端应用有不同的 SLA 约束。例如,文件传输应用(FTP、TFTP)等涉及大量文件交换的应用对带宽和数据包丢失非常敏感,而另一方面,语音和视频流量等媒体应用对延迟和抖动非常敏感。
衡量终端应用的性能因终端应用的 SLA 限制而异,因此我们需要衡量不同的网络参数。
在本章中,我们将学习如何测量这些网络参数,如何检查由这些参数引起的网络问题,以及如何尽可能地解决这些问题。
测量网络带宽和应用流量
网络运营商的主要职责之一是监控网络和带宽利用率。这可能出于各种商业目的,例如:
- 确保低优先级或清道夫流量不会阻塞网络,使关键业务流量受损
- 确保 WAN 提供商能够在接入电路上提供承诺的流量速率
- 使用容量规划的结果来升级或降级带宽

图 19.1:广域网拓扑
在我们到目前为止讨论的大多数故障排除和分析方法中,数据捕获将在尽可能靠近应用端点的地方进行。为了测量 WAN 电路利用率,我们可能需要额外的考虑来精确测量带宽。在前面的拓扑中, WAN-Router1 可以通过 1 Gbps 接口连接到 WAN 提供商,但是承诺的访问速率 ( 汽车)可以低得多(例如 10 Mbps)。通常,WAN 提供商会在入站方向启用流量速率限制,将流量限制在 10 Mbps,并丢弃任何过量的流量。因此,在 WAN-Router1 端执行数据包捕获可能不准确。另一方面,客户可能会实施流量整形等功能,使他们能够缓冲流量,并确保从 WAN 路由器到提供商的出站流量不会超过 CAR。因此,根据网络的部署方式,需要在适当的位置捕获数据包。
在本菜谱中,我们将讨论如何使用 Wireshark 来测量 WAN 电路带宽并分析不同的应用流量利用率。
做好准备
根据网络的部署方式,我们可能需要在相关位置识别和放置数据包捕获工具:
- 如果启用了流量整形,我们可以在 WAN 路由器上捕获出站方向的数据包
- 如果没有启用流量整形,我们可以在 WAN 提供商或远程 WAN 路由器上捕获入站方向的数据包
怎么做...
要测量 WAN 电路的带宽,我们可能需要以接近带宽的速率抽取一些流量,以测试电路是否能够承受。有不同的流量生成器工具可用,如 iPerf、IXIA 和 Spirent,可用于抽取不同类型的流量。其他开源流量生成器,如 Scapy、tcpreplay 或 playcap 也可以用来生成流量。
要确定平均带宽利用率,请执行以下步骤:
- 从统计数据中选择摘要:

输出将列出捕获的数据包数量,Avg。兆比特/秒,平均。数据包大小等等。
- 它还允许我们通过使用过滤器来查看特定流或一组流的摘要。要获取选择性流的摘要,请使用显示过滤器过滤流,然后使用统计|摘要:

以上是特定 TCP 流的输出示例。
- 使用 I/O 图可以更详细地了解电路的最大可用带宽。从统计中,选择 IO 图形:

-
默认情况下,图表将显示所有捕获的数据包的整体性能。X 轴和 Y 轴可以修改:
- X 轴定义了刻度间隔,即 Y 轴将被测量的间隔。此间隔的粒度可以设置为 10 分钟到 1 毫秒。
- Y 轴定义了衡量绩效的单位。这种度量被称为每个节拍(X 轴)中的包数、字节数或位数。
- 在前面的示例中,X 轴设置为 1 秒的刻度间隔,Y 轴设置为字节/刻度。所以测量值是字节/秒。
- 选择 View as time of day 选项将列出捕获数据包的实际时间。这是一个非常有用的工具,可以确定在图中观察到流量峰值的实际时间。
-
可以创建多个图表,列出不同的流,以根据流确定带宽利用率:

前面是一个示例输出,不同的流有不同的图形。
- 为了识别消耗大部分带宽的终端用户或应用,可以列出排名靠前的通话端点。从统计,转到端点:

这将根据发送和接收的数据包/字节数列出所有端点。它有助于识别顶级通话端点。
- 使用 conversation statistics 选项可以看到精确的特定于流的细节。从统计数据转到对话:

前面的屏幕截图显示了特定于流的对话、流的持续时间、交换的数据包数量等等。
它是如何工作的...
网络流量利用率有三种不同的定义,区分它们对于理解网络带宽利用率至关重要:
- 速度:可以穿越电路或链路的最大流量。
- 带宽:允许通过链路的最大流量(比特/秒)。默认情况下,带宽将等于链接的速度。
- 吞吐量:在应用端点之间传输的有效终端应用流量(比特/秒)。
链路速度(以及带宽)因各种因素而异,包括链路类型、提供商提供的 CAR 以及本地配置。默认情况下,大多数网络设备能够以线路速率转发流量,这是相应链路上支持的最大带宽。
在最近的部署中,人们普遍将千兆以太网视为从 WAN 路由器到服务提供商的最后一英里接入连接。千兆以太网的速度将为 1 Gbps,但带宽可能会因服务提供商提供的汽车而异。
即使 WAN 路由器能够以链路的线路速率发送流量,服务提供商也要确保流量不会超过汽车。
还有更多...
任何网络设备都会使用先进先出 ( FIFO )排队机制将流量转发出电路。因此,如果清道夫流量过多,这种低优先级流量可能会消耗所有带宽,导致关键业务流量受损。这可以通过在网络中部署服务质量 ( QoS )来避免。QoS 将排队机制从 FIFO 改为基于优先级的排队,防止清道夫或低优先级流量消耗所有带宽,从而确保关键业务流量始终优先。
使用 Wireshark 测量抖动和延迟
抖动和延迟是能够显著影响各种网络应用的特征。要监控通信线路的抖动和延迟,您可以使用简单或图形化的 ping 工具来显示线路特性。另一方面,Wireshark 不测量端到端延迟,而是测量它对网络流量的影响、帧间延迟以及它对应用的影响。
在本菜谱中,我们将看到如何使用 Wireshark 工具来监控这些参数,在下一个菜谱中,我们将看到如何找出由参数引起的问题。
做好准备
要监控通信线路上的延迟,首先使用ping命令来感受线路,然后将端口镜像配置到您想要监控的端口。
怎么做...
要监控帧间延迟,请遵循以下步骤:
-
从统计中,选择 IO 图形。
-
要监控特定数据流中帧之间的时间,请按照下列步骤操作:
- 单击 TCP 或 UDP 流中的数据包
- 点击跟随 TCP 流或跟随 UDP 流
- 复制显示的过滤器字符串(在下面的屏幕截图中编号为 1)
-
从统计数据中,打开 IO 图。
-
在 IO 图形的 Y 轴部分(窗口的右下角),选择高级...(以下截图中编号为 2 )。
-
将 TCP 流编号(下图中编号为 1 )复制到 I/O 图中的过滤器窗口(下图中编号为 3 ):

- 选择 AVG(*)(在前面的截图中编号为 4 )。
- 配置过滤器
frame.time_delta_displayed(在前面的截图中编号为 5 )。 - 在图表中(在前面的截图中编号为 6 ,您可以看到帧之间的时间,单位为毫秒。
- 通过导航到统计数据| TCP 流图|往返时间图,您将获得相同的结果,如下图所示:

- 在图中,我们看到 RTT 在低于 10 毫秒和高达 200-300 毫秒之间变化。
- 要测量第 4 层中的延迟,使用
tcp.analysis.ack_rttTCP 过滤器,它会给你确认每个接收到的包所需的时间。
它是如何工作的...
该软件只是捕获线路上的数据包,并向您显示它们之间的时差。需要注意的是,存在延迟或抖动,但我们看不到它来自哪里。
延迟是数据包从网络一端到达另一端所需的时间。它通常被称为 RTT。可以使用简单的 ping 或图形 Ping 工具来测量延迟。延迟以秒、毫秒、微秒等计量。
IP 网络中的抖动测量延迟的变化。例如,如果平均延迟为 100 毫秒,并且在 80 毫秒和 120 毫秒之间变化,则抖动为 20%。
还有更多...
很多网站上都有免费的图形化 Ping 工具。可以使用例如http://www . colasoft . com/download/products/download _ ping _ tool . PHP。
发现不寻常的流量模式
在这个食谱中,我们将学习什么是正常和不正常的流量模式,以及如何区分它们。
分析网络瓶颈、问题和故障排除
前面的方法中讨论的问题和故障排除大多是相关的,可能会导致网络瓶颈问题。任何引入延迟的不当链路或路由器,或者容量规划不佳的网络设计,都可能导致带宽瓶颈问题,从而影响端到端应用性能。
在这个菜谱中,我们将看到如何使用 Wireshark 来分析瓶颈问题。
做好准备
为了识别瓶颈问题,我们可能需要在多个位置重复捕获,以进行分析和瓶颈隔离。理想情况下,端点上的数据包捕获将是识别受影响的应用流量的良好开端,然后我们可以使用 ping 实用工具等其他工具来缩小捕获点的范围。
怎么做...
- 过滤捕获以显示应用服务器的 DNS 解析数据包,并检查解析的平均时间。这可以通过过滤 DNS 数据包并获得 I/O 图来查看:
- 检查 DNS 数据包的数量是否在 DNS 服务器可以处理的阈值范围内。如果不是,需要考虑 DNS 服务器升级。
- 检查分辨率的时间增量是否在阈值范围内。解析中的任何延迟都会导致最终应用会话建立的延迟:

上图是用于检查名称解析延迟的 DNS 数据包的 I/O 图。
- 检查 WAN 带宽利用率在其峰值和正常工作时间是否在阈值范围内。使用测量网络带宽和应用流量一节中定义的步骤来确定 LAN 和 WAN 端的带宽利用率。本节中定义的过程不仅可用于识别带宽利用率,还可用于检查带宽利用率是由关键业务流量还是清道夫流量引起的:
- 如果捕获显示 WAN 带宽利用率已被完全利用,并且流量主要是业务关键型的,则您可能需要升级带宽。
- 如果捕获显示 WAN 带宽利用率完全得到利用,并且流量不是关键业务流量,则可能需要额外的排队和 QoS 机制来限制非关键流量的速率。
- 检查任何传输链路(LAN、WAN)是否存在高延迟/抖动问题。关于如何执行此操作的更多详情,请参见使用 Wireshark 测量抖动和延迟部分。以秒为单位显示链接延迟的捕获是完全不正常的:

前面的 I/O 图显示了峰值延迟高达 10 秒,平均延迟超过 1 秒的链路。这种链路上的流量将受到严重影响,可能需要额外的链路级故障排除(检查电源、光纤清洁等)。
- 检查应用服务器是否遇到任何规模问题。这可以通过检查高峰和正常时间的并发会话数量以及会话数量是否在服务器可以处理的阈值内来完成。
- 检查端点图以确定并发会话的数量:

在前面的列表中,服务器10.1.100.254的并发会话数是 8850。确保来自客户端的连接请求是真实的,而不是来自受损的服务器。如果这超出了服务器能够处理的阈值,则需要考虑服务器升级。
它是如何工作的...
该方法解释了如何使用 Wireshark 来解决网络瓶颈问题。工作机制可以根据网络中的流量类型而变化。理想情况下,该流是不同协议的组合。例如,试图与应用服务器建立会话的客户机将使用名称解析协议(如 DNS)来识别终端服务器的 IP 地址。
一旦接收到 IP 地址,如果传输协议是 TCP(例如,HTTP 或 FTP),它可以发送 TCP SYN 来建立 TCP 会话。如果应用的传输协议是 UDP(例如,QUIC),它将简单地通过 UDP 数据包发送应用请求。服务器在收到请求后,将通过网络向客户端发送数据。
任何网络设备(L2 交换机和路由器)都会通过最佳路径转发流量。根据等价路径的可用性,路由器可以在不同的路径上对不同的流量进行负载平衡。
端到端性能涉及到不同的因素。终端应用服务器处理能力和内存在会话处理和数据传输中起着关键作用。网络容量规划在不同客户端和服务器之间的端到端数据传输中起着关键作用。
还有更多...
有各种网络遥测收集功能可用于定期从所有或选定的网络设备收集网络数据,以全面了解网络性能。这对容量规划非常有用。可以使用并且在许多平台上都可用的基本功能如下:
- 思科网络流量:
- Juniper J-Flow:
- sFlow:
十九、安全和网络取证
在本章中,我们将介绍以下配方:
- 发现不寻常的流量模式
- 发现基于 MAC 和基于 ARP 的攻击
- 发现 ICMP 和 TCP SYN/端口扫描
- 发现 DoS 和 DDoS 攻击
- 定位智能 TCP 攻击
- 发现暴力和应用攻击
介绍
信息安全是信息系统中最吸引人的领域之一,它的目的是保护组织的系统免受内部和外部的攻击,这些攻击可能以各种方式出现。这些攻击可能来自互联网或内部网络,因此,它们都来自网络;因此,可以使用 Wireshark(和其他类似的工具)对它们进行监控。
要监控网络以防范恶意流量,我们必须首先了解什么是正常流量,并定义流量速率的基线、流量模式等等。然后,我们可以尝试找出恶意流量与正常流量的差距。在异常流量中,我们可能会看到 ARP、IP 或 TCP 扫描;没有查询的 DNS 响应;异常的 TCP 标志;我们不知道其用途的未知 IP 地址或端口号,等等。
了解安全问题和网络问题之间的区别并加以区分也很重要。例如,ICMP 扫描可以是扫描网络的恶意软件,甚至是发现网络的管理软件。TCP SYN 扫描可能是蠕虫或软件错误。我们将在每个食谱中详细阐述这些。
在本章中,我们将首先区分正常和异常的网络流量,然后了解各种类型的攻击,它们来自哪里,以及如何隔离和解决它们。
做好准备
首先要找到 Wireshark。对此有几种选择:
- 当您怀疑攻击来自互联网时,在防火墙后定位 Wireshark(1),当您怀疑它穿越防火墙时,在防火墙前定位它( 2 )。
- 当您怀疑恶意流量来自远程办公室时,端口镜像流量来自路由器之前( 3 )或之后( 4 )的中央线路。在这种情况下,您可以使用 IP 网络过滤可疑流量,查看来自不同办公室的模式,以便隔离有问题的办公室。
- 您还可以在路由器之前( 7 )或之后( 6 )对远程办公室的流量进行端口镜像。
- 当怀疑是 PC 或服务器时,端口镜像其在交换机上的端口( 8 )。

图 19.1: Wireshark 位置
现在,我们将尝试了解我们应该注意哪些类型的流量,哪些类型的流量是正常的,以及应该遵循哪些流量。
开始测试之前,请确保您有一个包含以下内容的最新网络拓扑:
- 服务器的 IP 地址和局域网的 IP 地址范围
- 路由器、交换机和其他通信设备的 IP 地址和拓扑结构
- 安全设备防火墙、入侵检测系统 ( IDSs )/ 入侵防御系统 ( IPSs )、 Web 应用防火墙 ( WAFs )、数据库和应用防火墙、防病毒系统以及任何其他具有 IP 地址并生成、过滤或转发网络流量的设备
- 哪些应用通过网络工作,包括软件的 TCP/UDP 端口号和 IP 地址
怎么做...
当您监控组织中的内部流量时,应检查以下内容:
- 从已知地址(在组织中)生成的流量:
- 正常:这是来自已知地址和地址范围的流量
- 可疑:这是来自/发往你不知道的地址的流量
- 应用和端口号:
- 正常:这包括标准端口号、
80(HTTP)、137/8/9(NetBIOS)、3389(RDP)、20/21(FTP)、25110(Mail)、53(DNS)等等。确保网络上运行的应用,并验证这些是您看到的唯一端口号。 - 可疑:这包括异常端口号,即不属于服务器上运行的应用的端口号(例如,发往 web 服务器的 RDP 数据包)。
- 正常:这包括标准端口号、
- TCP 模式:
- 正常 : TCP
SYN/SYN-ACK/ACK表示连接建立。单次复位(RST)表示快速断开连接。FIN/FIN-ACK数据包表示连接的定期拆除、标准数据包和确认。 - 可疑:大量
SYN数据包去往一个或多个目的地,或者来自多个来源(通常采用本章稍后描述的扫描模式),异常标志组合(RST/FIN、URG),等等。
- 正常 : TCP
- 您不知道的单个或多个网站的大量流量:
- 正常:流量模式通常没有固定带宽。当你保存或打开文件,浏览互联网,发送或接收邮件,或使用 RDP 访问服务器时,你会看到起伏。
- 可疑(在某些情况下):固定带宽模式可以表明有人连接到您的设备,但也可以表明有人正在通过互联网收听广播(100-150 Kbps)、观看视频(在某些情况下)等等。当您看到流量的固定带宽模式时,检查它是什么。固定带宽模式如下图所示:

图 19.2:固定带宽模式
- 广播:
- 正常 : NetBIOS 广播、ARP 广播(不要太多)、DHCP(不要太多)、应用广播(通常每隔几秒或更长时间一次)等等
- 可疑:每台设备每秒广播数十次、数百次、数千次或更多次
- DNS 查询和响应:
- Normal :标准的查询-响应模式,每个客户端每秒几十次,偶尔
- 可疑:大量的 DNS 查询和/或响应,没有查询的响应,等等
发现基于 MAC 和基于 ARP 的攻击
Wireshark 很容易发现各种类型的基于第 2 层 MAC 的攻击和基于第 2/3 层 ARP 的攻击。这些攻击通常是由扫描器(在下一个食谱中描述)和中间人攻击引起的。在本菜谱中,我们将看到一些典型的攻击模式及其含义。
发现 ICMP 和 TCP SYN/端口扫描
扫描是向网络设备发送数据包的过程,目的是查看谁在响应 ping 请求,寻找侦听 TCP/UDP 端口,并找出网络上共享的资源类型,包括系统和应用资源。
它是如何工作的...
网络取证和你在犯罪现场调查剧里看到的挺像的。出问题了;所以,你去犯罪现场(这是你的网络),寻找证据(网络中留下的痕迹)。
您寻找的是与犯罪现场不匹配的东西(您的网络)、遗留的东西(不寻常的流量模式)、指纹和 DNA(可以识别攻击者的模式)。
在下面的食谱中,我们将查看各种类型的攻击和异常的详细信息,这些攻击和异常可能表明发生了犯罪,我们还将了解如何隔离问题并解决它们。
可能来自网络的一些常见攻击包括:
- 病毒:这些是攻击你的电脑并试图造成损害的小程序。病毒应该被反病毒软件发现并修复。
- 蠕虫:这些通常是试图在网络上自我复制的程序。它们对资源消耗有重大影响,例如,带宽消耗和 CPU 负载。重要的是,一旦你解决了问题,一切都会恢复正常。
- 拒绝服务(DoS)和分布式拒绝服务(DDoS) :这些是拒绝访问网络资源的攻击。这些类型的攻击通常很容易被发现,因为它们有独特的行为,很容易被发现。
- 中间人攻击:这些攻击是指攻击者拦截消息,然后重新发送。通过这种方式,攻击者可以窃听流量,或者在流量到达目的地之前改变流量。
- 扫描:有各种类型的扫描,从简单的 ICMP 扫描(通常是 DDoS 的一种形式)、TCP 扫描(例如,在各种端口号上发送 SYN 请求以尝试打开与服务器上运行的服务的连接)以及应用扫描(尝试连接到服务器上运行的应用)。
- 应用层攻击:这些攻击通过故意在服务器的操作系统或应用中造成故障来攻击服务器上的应用。
在下面的食谱中,我们将会看到它们中的每一个(以及更多)。
还有更多...
当服务器、PC、通信链路或网络上的任何其他实体变得缓慢,而没有任何逻辑原因时,表明出现了问题。例如:
- 当服务器变慢时,检查硬件和软件问题。检查网络问题,以及是否有人攻击它。
- 当从远程办公室到中心的链路变慢时,可能是因为负载(持续或突然),但也可能是因为阻止它的攻击(通常是 DOS/DDoS)。
- 当一台电脑变得缓慢时,可能是因为它正在做你知道的事情,但这种可能性并不只有一种。检查你不知道的东西。
这里需要提到的是,有各种各样的系统保护我们免受攻击;其中一些列举如下:
- 防火墙:它们防止未经授权的流量进入特定区域。防火墙可以位于与互联网的连接处、组织服务器之前、组织区域之间,甚至可以作为每台 PC 上的个人防火墙。
- 网络访问控制 ( NAC ):这些系统只允许授权用户连接网络。当将未授权设备连接到网络时,您会看到设备上的链接会打开并立即关闭,未授权设备会在 MAC 层被阻止。
- IDS/IPS :这些系统可以识别入侵模式并进行拦截。这里通常有两道防线—一道在 ISP 网络,一道在客户驻地。IDS/IPS 可以是位于防火墙和互联网之间的专用设备,也可以是防火墙上的附加软件。
- WAF 、应用防火墙、数据库防火墙,以及其他应用保护设备:这组产品是第 7 层保护设备,它查看应用内部,转发或阻止应用层攻击。
- 网络过滤器和邮件过滤器:这些设备扫描邮件和/或网络内容,只转发那些允许的邮件和流量。
刚才提到的功能可以是不同的设备、虚拟机上的软件或同一设备上的功能。
请参见
在这个菜谱中,我们讨论了一些安全组件。一些例子是:
- 防火墙:检查点(www.checkpoint.com),瞻博 SSG 系列(http://www . Juniper . net/US/en/Products-services/security/SSG-series/),思科 ASA 系列(http://www . Cisco . com/en/US/Products/PS 5708/Products _ Sub _ Category _ home . html))等等。
- NAC :在这一类中,你有,比如说,Forescout(【http://www.forescout.com/solutions/network-access-control/】)和 entera sys(【http://www.enterasys.com/company/literature/nac-ds.pdf】)。
- IDS/IPS :在这一类别中,我们有例如 Juniper IDP 设备系列(http://www . Juniper . net/us/en/products-services/security/IDP-series/)和用于防火墙的检查点软件刀片(【http://www.checkpoint.com/products/ips-software-blade/】T5)。
- WAF :这里我们有例如 imper va(http://www . imper va . com/products/WSC _ we B- application-firewall . html)和 F5(http://www.f5.com/glossary/web-application-firewall/)。数据库防火墙是可用的,例如,来自 Oracle(http://www . Oracle . com/us/products/database/security/audit-vault-database-firewall/overview/index . html)。
- 网页和邮件过滤器:这里我们有,例如,迈克菲(http://www . McAfee . com/au/products/email-and-we b-security/index . aspx)、blue coat(【http://www.bluecoat.com/security-policy-enforcement-center】T5)和 Websense(http://www.websense.com/content/Home.aspx)。
做好准备
当在网络上看到太多 ARP 请求时,或者当在网络上看到非标准 MAC 地址时,使用端口镜像将 Wireshark 连接到它们的源并开始捕获。
怎么做...
要查找基于 ARP/MAC 的攻击,请遵循以下步骤:
- 将 Wireshark 连接到网络上的任何端口。
- 寻找大量的 ARP 广播。由于 ARP 请求是广播,它们将分布在整个第 2 层网络中(即,在一个 VLAN 上)。在下面的截图中,您可以看到一个典型的 ARP 扫描模式。值得注意的是,这种 ARP 扫描可能是一种以这种方式工作的应用,例如,发现使用免费 ARP 的网络和路由器的 SNMP 软件。只有当它来源不明时才是一个问题。

图 19.3: ARP 扫描模式
- 还有一些可疑的 MAC 模式。当您看到以下内容时,您可以识别它们:
- 两个相同的 MAC 地址,但 IP 地址不同。它可以是在同一个网络适配器上配置的两个 IP 地址,这是可以的,但它也可以是一种攻击模式,其中有人将其 MAC 地址更改为服务器的 MAC 地址(几乎可以在每个适配器上执行。)
- 上面提到的案例也可能是中间人攻击,如第 10 章 、 网络层协议和操作中的“ARP 中毒和中间人攻击”一节所述。
它是如何工作的...
ARP 向网络发送广播,询问特定 IP 目的地的 MAC 地址。任何不遵循此模式的行为都应被视为恶意行为。
还有更多...
ARP 请求也可能来自发现网络的 SNMP 软件(自动发现功能)、发送免费 ARP 的 DHCP 服务器等等。每当看到 ARP 扫描什么东西的时候,不一定是问题;问题是谁送的?您可以在第 10 章 、 网络层协议和操作中找到关于 ARP 过程的更多信息。
做好准备
扫描攻击通常是由抱怨网络响应缓慢的用户、发现服务器或通信线路异常负载的管理系统,或者由识别可疑使用模式的安全信息和事件管理系统 ( SIEM )实施的。在这些情况下,使用端口镜像找到 Wireshark,尽可能靠近您怀疑受感染的区域,然后开始捕获。
发现 DoS 和 DDoS 攻击
拒绝服务 ( DoS )和分布式拒绝服务 ( DDoS )是意在拒绝用户访问网络服务的攻击。可以拒绝用户访问的服务包括:
- 通信线路:这通常是通过产生淹没和阻塞通信线路的流量来实现的
- 应用和服务(web 服务、邮件服务等):这通常是通过将服务器加载到无法满足客户端请求的程度来实现的
DoS/DDoS 攻击可能是我们在上一篇文章中提到的扫描的结果。区别在于 DoS/DDoS 是一种扫描,它以拒绝用户访问的方式降低服务器或网络的速度。
在本菜谱中,我们将看到一些常见的 DoS/DDoS 模式,并学习如何识别和阻止它们。
怎么做...
要发现问题,请按照下列步骤操作:
-
启动 Wireshark,在靠近问题的接口上捕获:
- 如果到互联网的线路变得很慢,请对线路进行端口镜像
- 如果服务器变慢,请对服务器进行端口镜像
- 如果远程办公室变得很慢,将线路镜像到它们的端口
-
如果您看到 Wireshark 没有响应,很可能是因为您受到了非常强大的攻击,每秒钟会生成数千个或更多的数据包;因此,Wireshark(或您的笔记本电脑)无法处理它们。在这种情况下,停止 Wireshark(在 Windows 中使用Ctrl+Alt+Del,在 Unix 中使用
kill命令,或者在 Apple Mac 中使用 Force Quit )并将其配置为捕获多个文件(在第 1 章 、**Wireshark v2简介中的“开始捕获数据”部分有所描述)。 -
您可能会看到各种模式,所有模式都有相同的行为—大规模扫描,在大多数情况下是 ICMP 或 TCP,但也有其他类型。最好的理解方法是用一些例子来看它们。
-
在下图中,您可以看到一个受到攻击的网络。所有远程站点的用户都抱怨网络非常慢。他们都在访问图表左侧中间的服务器。

图 19.4: Wireshark 定位—远程站点速度缓慢
当我将 Wireshark 连接到一个远程站点时(如图所示),我收到了许多来自 LAN 192.168.110.0 (1)的 ICMP 请求(3)和随机目的地(2)。是随机的吗?

图 19.5: ICMP 扫描到随机目标
此外,还要查看数据包之间的时间间隔。如果扫描,通常会很短。
当你去统计|对话,你会看到一些有趣的事情:

图 19.6: ICMP 扫描到随机目标—流量对话
当我们按地址 A ( 1 )对表进行排序时,我们看到了一种 ICMP 请求的模式,这些请求来自网络上的各个地址192.168.110.0(这里,我们看到了其中非常小的一部分,即192.168.110.12扫描网络)。
该蠕虫只是用 ICMP 请求扫描网络。当有人应答时,蠕虫也会感染他/她,几分钟后,所有的通信线路都会被远程办公室发出的 ICMP 请求阻塞。
Conclusion
When you see a massive number of pings scanning on a communication channel or link, that is, thousands or more pings, check for the problem. It can be the SNMP software discovering the network, but it can also be a worm that will flood your communication line or server links (or both).
-
另一种常见的扫描类型是 TCP-SYN 扫描。在这种情况下,攻击者用 TCP-SYN 数据包扫描随机的 TCP 端口,等待有人用 SYN-ACK 应答。当它发生时,有两个选择:
- 攻击者将继续发送 SYN 数据包并接收 SYN 确认,从而在受攻击的设备上留下许多半开连接
- 攻击者将使用 ACK 进行应答,从而启动连接,并像在 DoS/DDoS 攻击中一样保持连接开放,或者试图通过此连接来损害受攻击的设备
-
TCP-SYN 扫描将类似于以下屏幕截图中的模式之一:
- 您将会看到许多 SYN 数据包没有来自受攻击节点的任何响应

图 19.7: TCP SYN 攻击—无响应

图 19.8: TCP SYN 攻击-连接重置

图 19.9: TCP 会话发起-三次握手
- 总是寻找不寻常的流量模式。例如,太多的 ICMP 请求是扫描的良好迹象。查找对客户端的多个 ICMP 请求、ICMP 时间戳请求、按升序或降序排列的 ICMP 等等。这些模式可能表示恶意扫描。

图 19.10: ICMP 请求-恶意扫描
- 在应用扫描的情况下,您可以进行各种类型的扫描:
其他类型的应用根据其端口号进行扫描
它是如何工作的...
大多数扫描仪分几个步骤工作:ARP 扫描,ICMP,然后是 TCP 或 UDP。原理很简单:
- 如果扫描仪在局域网上,它会向整个局域网发送 ARP 广播。
- 扫描仪发送 ICMP 请求。一些 ICMP 请求将被应答。
- 当有人应答 ARP 或 ICMP 请求时,它会上升到 TCP 和 UDP 并开始扫描第 4 层端口。当扫描器发现一个端口打开时,它开始扫描应用。
- 在应用扫描中,扫描器向应用发送命令,试图让应用做出响应,并以这种方式试图侵入应用。
还有更多...
在过去几年中,大多数现代入侵检测/防御系统(IDS/IPS)都知道如何处理 ICMP 扫描、TCP SYN 扫描和各种类型的扫描,这些扫描会产生大量标准的、众所周知的攻击模式流量。如果您有这样的系统,并且您通过拥有他们系统的 ISP 连接到互联网,您可能会受到保护,免受这些简单类型的攻击。
这些系统通常以两种方式工作:
- 基于 NetFlow/Jflow 的 IDS/IPS,可识别来自多个来源的大量流量;他们通过阻止数据包或更改路由表来阻止这些数据包到达 ISP 网络,从而使其失效。
- 基于内容的入侵检测/入侵防御。它会查看流量模式,并据此决定是否转发。
来自内部网络的攻击不会被外部设备过滤,因此更加常见。本章后面的智能 TCP 攻击方法将讨论更复杂的攻击类型。
防止来自互联网的攻击的方法是通过具有高效 IDS/IPS 系统的 ISP 连接,并使用您自己的系统。防止来自内部网络的攻击的方法是实施组织安全策略以及适当的保护软件,如防病毒软件和个人防火墙。
请参见
在上一节中,我提到了组织安全策略的问题,即如何实现一组保护组织安全的规则。关于这一主题的更多信息可在互联网上广泛获取。一些涉及这方面的有趣网站有:
- http://www.cert.org/work/organizational_security.html
- http://www.praxiom.com/iso-17799-4.htm
- http://www . sans . org/reading-room/whites/policy issues/1331 . PHP
- http://www.sans.org/security-resources/policies/
做好准备
DoS/DDoS 通常是在某个网络资源(即通信线路或服务器)变得非常慢或无法运行时发现的。
当您发现此类资源时,将 Wireshark 与该设备的端口镜像连接,并启动数据包捕获。在本菜谱中,我们将介绍一些常见的 DoS/DDoS 攻击及其特征。
怎么做...
使用端口镜像将 Wireshark 连接到您怀疑暴露于 DoS/DDoS 的资源的端口。通常,它会是服务器变得非常慢,通信线路变得非常负载,或者任何其他资源停止运行或变得非常慢。
- 当通信线路变得非常慢时,例如连接到互联网时,将带有端口镜像的 Wireshark 连接到该线路。
- 试着找到流量的来源。
- 我对服务器进行了端口镜像,这是我得到的结果:

图 20.11:来自不同 IP 地址的 TCP SYN 攻击
- 我们看到源地址以升序排列,产生了到互联网地址
94.23.71.12的流量。
当您查看配置了自上一次显示数据包以来的时间的时间列时,您会看到帧之间有 11-12 微秒。当你看到 TCP-SYN 以这样的速度来的时候,一定是出问题了。看看这是什么!
- 由于源地址未知,我检查了他们的 MAC 地址。我得到的是:

图 19.12: TCP SYN 攻击—流量对话
- 问题是所有源地址都来自同一个 MAC 地址。于是我查了他们的 MAC 地址,所有的 IP 地址都来自一个 MAC 地址:服务器的 MAC 地址。
检查 SYN 扫描,并验证它们来自哪个 IP 和 MAC 地址。可能是蠕虫生成的源地址不是主机的地址。
- 另一个例子是来自单个攻击者的简单 SYN 扫描,如下图所示。寻找 SYN 并观察他们正在扫描的端口号。您可能会看到:
- 不响应
- 重置数据包
- 同步确认响应
- 这种类型的攻击可能会有各种后果:
- 在没有响应或重置响应的情况下,被攻击的服务器运行良好。如果服务器用 SYN-ACK 响应来回答,可能会给服务器带来风险。
- 风险在于,如果打开(SYN/SYN-ACK/ACK)或半开(SYN/SYN-ACK)的连接太多,服务器可能会因为这些连接而变慢。
- 你可以在下面的截图中看到一个典型的 TCP SYN 攻击。当 SYN 攻击阻塞通信线路或使服务器负载达到停止运行的程度时,它就变成了 DoS/DDoS 攻击。
Figure 19.13: TCP SYN DDoS attack
它是如何工作的...
DoS 是一种拒绝使用网络服务的攻击。其方式是让受攻击的设备将硬件资源(CPU、内存等)分配给攻击者,这样就不会给用户留下任何东西。
DoS 是指网络资源受到攻击。分布式拒绝服务是指攻击来自多个来源。
还有更多...
DoS/DDoS 攻击有时难以发现,因为它们可以模拟真实情况。例如:
- Ping 扫描也可用于管理系统
- HTTP GET 请求是 web 服务器接受的普通请求
- SNMP 获取请求
为了发现问题,应监测这些和许多其他物质的数量和来源。在下面的截图中,我们看到了当我们跟踪一个特定的 TCP 流时会得到什么。

图 19.14: TCP SYN DDoS 攻击
定位智能 TCP 攻击
另一种类型的攻击是当您发送未知的 TCP 数据包时,希望受到攻击的设备不知道如何处理它们,并希望通过它们。这些类型的攻击是众所周知的,并且被当今网络中实现的大多数现代防火墙所阻挡;但是,我还是会简单地告诉你。
发现暴力和应用攻击
网络攻击的下一步是了解各种类型的暴力攻击。暴力攻击是一种反复试验的方法,用于从受害者那里获取信息,例如,试图找到组织服务器、用户目录和破解密码。
做好准备
当我到达一个新的网络时,我通常做的是将我的笔记本电脑连接到该网络,并查看它正在运行什么。首先,我只要把它连接到几个开关上,就能看到广播。然后,我为关键服务器和通信线路配置了一个端口镜像,并查看在它上面运行的是什么。
要查找异常流量,请对通信链路和中央服务器进行端口镜像,并检查异常流量模式。
怎么做
您应该寻找的流量模式有:
- ACK 扫描:为了中断现有的 TCP 连接,通常会向多个端口发送多个 ACK

图 19.15: TCP 确认扫描
- 不寻常的旗帜组合:这是指任何带有 URG 旗帜、FIN 和 RST、SYN-FIN 等等的组合。不寻常的标志组合不是通常的 SYN、FIN 或 RST,有或没有 ACK。在下面的屏幕截图中,您可以看到这个场景的一个示例。FIN/PSH/URG 操作统称为圣诞扫描。

图 19.16: TCP 异常标志组合
所有标志都设置为零的 TCP 扫描。这种扫描被称为空扫描。

图 19.17: TCP 空扫描
- 大量 FIN-ACK 扫描:将 FIN 和 ACK 标志设置为 1 的大量数据包发送到多个端口,以使这些端口关闭或淹没网络

图 19.18: TCP 最终确认扫描
它是如何工作的...
有许多类型的 TCP 扫描是基于这样的假设:当我们向目标发送扫描各种端口号的 RST 或 FIN 标志(有或没有 ACK)时,我们将导致目标关闭连接,当我们向目标发送不寻常的标志组合时,它将使目标忙碌。这将导致它的速度变慢并断开现有的连接。
这些扫描中的大部分是众所周知的,并且针对防火墙和入侵检测/预防系统得到了很好的保护。
还有更多...
您还可以配置预定义的过滤器来捕获这些类型的攻击,但是在怀疑此类事件时,最好的做法是仔细检查捕获的数据并寻找不寻常的数据模式。
请参见
- 对于扫描类型,请访问 NMAP.org 网页:http://nmap.org/book/man-port-scanning-techniques.html
做好准备
暴力攻击通常不会在网络上产生非标准负载,它们被发现的方式通常是通过 IDS 系统或者当怀疑有人试图侵入网络时。在本菜谱中,我们将学习如何识别典型的暴力攻击。
怎么做...
当您怀疑网络上存在暴力时,请按照以下步骤进行定位。
- 将带有端口镜像的 Wireshark 连接到您怀疑受到攻击的服务器端口。
- 对于 DNS 暴力攻击,查找要求您的域下的通用名称的 DNS 查询。例如,在下面的截图中,您可以看到对 ISP 服务器的扫描。我们可以看到对常见名称的 DNS 查询,如 DNS ( 1 )和 DNS ( 2 )、IPv4 的记录( 2 )和 IPv6 的记录( 3 ),以及 intranet—IP v4 的记录( 4 )和 IPv6 的记录( 5 )。
- 在
dns.icomm.co( 1 的情况下,我们得到了回复;在所有其他情况下,我们没有。 - 许多没有响应的查询不仅表示 DNS 暴力攻击,还表示有人正在寻找不存在的服务器。查看源地址,看它来自哪里。
- 在

图 19.19: DNS 暴力攻击
- 另一种需要警惕的暴力攻击是 HTTP 试图在服务器上寻找资源。
- 要查找 HTTP 扫描,请在数据包详细信息中查找扫描程序的签名,如下图所示。

图 19.20: HTTP 暴力攻击-查找资源
- 另外,寻找太多的 HTTP 错误消息。下面的屏幕截图举例说明了一些例子。选择统计| HTTP |数据包计数器| PC。如果您收到太多错误消息,请检查它们的来源。

图 19.21: HTTP 错误消息和来源
它是如何工作的...
暴力攻击是一种反复试验的攻击,它向目的地发送请求,希望其中的一些会得到响应。由于这些请求中的大多数都会被拒绝(如果您已经正确配置了您的服务器),大量的未找到的消息、禁止的消息和其他错误代码可能是这种攻击的一些迹象。
还有更多...
要发现 HTTP 错误代码,请配置显示过滤器http.response.code >= 400 。这同样适用于 SIP 和任何使用类似 HTTP 代码的协议。要查找已知的扫描仪,您只需使用编辑|查找数据包功能并查找常见的扫描仪名称。在下面的截图中,你可以看到一个 Nmap 的例子,这是常见的例子之一。我们在包字节(2)中选择了字符串 nmap.org(1)。

图 19.22:过滤以发现 HTTP 错误
这是我们得到的结果:

图 19.23:发现 HTTP 错误代码
暴力攻击的另一个重要问题是攻击者试图猜测密码以闯入服务器。
在下面的屏幕截图中,您会看到当攻击者试图闯入一个受到良好保护的 FTP 服务器时会发生什么。

图 19.24:用户破坏 FTP 服务器
因为是 FTP,所以第一次试用的是用户名anonymous (1)。攻击者选择的密码(2)。当然,登录被批准(3),攻击者进入(4)。
在下面的屏幕截图中,您可以看到当攻击者尝试未授权的其他用户名时会发生什么。

图 19.25:用户破坏 FTP 服务器-无效用户名
在这里,您可以看到攻击者试图使用用户名 root (1)、admin (2)和 administrator (3)登录。
攻击者被阻止,服务器发送 TCP 零窗口消息,甚至通过显示您至少可以说再见来回答。









应答
浙公网安备 33010602011771号