Wireshark的工作坊

我们今天要出版的材料的作者Julia Evans决定谈论她最喜欢的一种网络工具Wireshark 。 这是一个功能强大且复杂的程序,配有图形界面,旨在分析计算机网络中的流量。 朱莉娅(Julia)说,实际上,她仅使用Wireshark的一些功能,但通常会派上用场。 她在这里希望与所有希望了解有关使用该程序的最有用方法的故事的所有人分享,并希望这些方法不仅对她有用,而且对必须解决网络问题的每个人都有用。



安装Wireshark


可以在此处找到各种操作系统的Wireshark发行版。 要安装该程序,您可以下载并安装相应的文件。 另外,如果您使用基于Debian的Linux发行版,则可以使用sudo apt install wireshark命令。 如果需要,可以找到该程序的最新版本,可以参考wireshark-dev软件包的个人档案。

这是程序界面的样子。


Wireshark接口

乍一看,所有这些似乎都太复杂了:一长串的软件包,一个用于输入某种请求的神秘领域……如何使用Wireshark?

pcap文件分析


我通常使用Wireshark找出网络问题的原因。 解决此类问题的过程中执行的操作顺序如下所示:

  1. 使用tcpdump捕获数据包(通常使用sudo tcpdump port 443 -w output.pcap类的sudo tcpdump port 443 -w output.pcap )。
  2. 将pcap文件复制到可正常工作的便携式计算机( scp host:~/output.pcap . )。
  3. 使用Wireshark打开一个pcap文件( wireshark output.pcap )。

如您所见,一切都很简单。 但是,在程序中打开pcap文件后,您可能会对如何处理所有这些问题有一个逻辑上的问题。 让我们来谈谈。

TCP连接分析


通常,当我在Wireshark中分析某种情况时,我需要检查一些特定的TCP连接,由于某种原因,该连接有问题。 借助Wireshark,您可以分析单个TCP连接的整个生命周期,并找出导致系统行为不正确的原因。

您可以通过右键单击所需的包并在上下文菜单中选择“ Conversation filter > TCP命令来执行此操作。


开始TCP连接分析

之后,Wireshark将显示您单击的数据包所属的同一TCP连接中的其他数据包。 在下图中,您可以看到一个成功建立SSL连接的示例-有用于建立SSL连接的client helloservice hellocertificateserver key exchange包。


TCP连接分析

在撰写本文的那一天,在工作中,我不得不使用这里讨论的TCP数据包分析技术。 一些连接被丢弃,我注意到在发送client hello数据包之后, client hello发送了FIN ACK数据包,该数据包终止了TLS连接。 我设法找出来的东西很有用,因为很明显,客户端而不是服务器正在终止连接。 结果,我立即发现问题出在客户身上,我需要予以注意。

对于我来说,以上是使用Wireshark的非常典型的方案。 通常,客户端和服务器都参与连接,并且客户端或服务器上出了点问题。 例如,这可能是系统设置中的某种故障或错误。 因此,Wireshark为我提供了宝贵的帮助,以帮助您确定问题的根源,并帮助您确定它是客户端还是服务器。

解码为团队


为了了解特定软件包的确切含义,Wireshark使用端口号,这种方法通常有效。 例如,如果程序在端口80上看到一些流量,则它确定它是HTTP流量,通常是。

但是,有时HTTP连接使用异常端口,因此,Wireshark需要提示以识别它们。 可以通过调用程序包上下文菜单并在其中选择“ Decode as命令来向程序提供此类提示。 此外,您可以告诉Wireshark使用哪个协议通过某个端口传输数据包。 这些提示简化了数据分析。

查看包装内容


在Wireshark中,仅存在一种令人愉悦的模式,用于查看有关程序包的详细信息,通过该模式,您可以了解任何程序包的内容。 以带有上一示例中的client hello消息的包为例。 这是SSL连接的第一个数据包,客户端在其帮助下好像说:“你好! 我在这里!”

Wireshark为网络管理员提供了两个非常有用的工具来检查软件包内容。 第一种是查看模式,您可以在其中扩展可用于数据包的标头(例如,以太网标头,IP标头,TCP标头)并查看其内容。


包头分析

查看软件包的第二种方式是一个真正的奇迹。 在这里,您可以将原始数据包数据视为字节序列。 并且,这特别好,如果将鼠标悬停在一个字节上(例如,在下图中,光标位于tiles.services.mozilla.com包含的字节上),则状态栏中的程序将告诉您它属于哪个字段此字节(在本例中为“ Server Name字段),以及Wireshark为此字段使用的代号(在本例中为ssl.handshake.extensions_server_name


原始包装数据分析

套餐搜索


Wireshark支持强大的查询语言。 这极大地简化了列表中特定软件包的搜索。 通常,在使用程序时,我使用非常简单的查询。 以下是一些示例:

  • frame contains "mozilla"查询,可让您在包中的任何位置搜索mozilla行并列出找到的包。
  • tcp.port == 443请求显示使用TCP端口443的数据包。
  • 查询dns.resp.len > 0显示所有DNS答案
  • ip.addr == 52.7.23.87显示源或目标IP地址为52.7.23.87的数据包。

Wireshark查询语言比tcpdump查询语言具有更大的功能(此外,通过按TAB键支持自动补全)。 结果,我经常使用以下操作序列:我使用tcpdump捕获了大量数据包(例如,类似于来自端口443的所有数据包),然后使用Wireshark仔细研究它们。

查看TCP连接持续时间详细信息


有时我需要特别注意慢速TCP连接的研究。 如果我的文件中有成千上万个软件包的记录,该怎么做? 如何找到慢速的TCP连接?

如果您在程序的主菜单中选择“ Statistics在其中选择“ Conversations命令,Wireshark将为我们提供一系列出色的统计信息。


统计信息

特别是在此处的“ Duration列中,您可以查看TCP连接的持续时间,确定最长的连接并仔细研究它们。 这是一个非常有用的功能。

Wireshark更新


如果您很长时间没有更新Wireshark,这是值得做的。 例如,最近,我在一台可以工作的笔记本电脑上研究HTTP / 2数据包。 那时对我来说这并不容易,所以我决定看一下文档。 事实证明,我有该程序的旧版本。 在我安装的更新中,对HTTP / 2的支持得到了极大的改进,也就是说,那时正是我所需要的。

使用Wireshark学习网络协议


本文包含一些术语,可以归因于网络专家的术语。 例如-帧,TCP端口(TCP端口),DNS响应(DNS响应),源IP地址(源IP地址), client hello数据包SSL连接(SSL客户端呼叫)。 使用它们的原因之一是,Wireshark绝对不会试图保护用户免受网络技术内部结构的复杂性的影响。 对于初学者而言,这种状况一开始可能会让您认为Wireshark并不是适合他的程序,而只是适合经验丰富的网络专家。

但是,Wireshark专注于底层网络机制有一个主要优点。 事实是,使用此程序,您可以学习有关网络协议的新知识。 例如,我对TLS / SSL协议的内部机制了解不多。 但是,在分析Wireshark中的流量时,我注意到SSL连接的前两个数据包是client helloserver hello 。 结果,该协议,如果不深入研究其工作细节,似乎是神秘的,难以理解,则开始采用一种更易于理解的形式,变成可以理解和分析的东西。

总结


Wireshark有巨大的机会。 在这里,我们仅谈论其中一些。 但是,根据该材料的作者,此处讨论的工作方法用于大约95%的需要Wireshark的情况。 因此,我们希望即使您今天学到的东西也对您有所帮助。

亲爱的读者们! 您使用Wireshark吗?

Source: https://habr.com/ru/post/zh-CN416537/


All Articles