Wireshark 抓包秘籍大公开:10 个超详细技巧,零基础瞬间变身抓包高手!

文档大纲

引言

作为一款高效免费的抓包工具,wireshark可以捕获并描述网络数据包,其最大的优势就是免费、开源以及多平台支持,在GNU通用公共许可证的保障范围下,用户可以免费获取软件和代码,并拥有对其源码修改和定制的权利,如今其已是全球最广泛的网络数据包分析软件之一。

抓包工具Wireshark 大家都知道,它可以截获和分析网络数据封包,检测网络上的问题,比如网络延迟、数据丢失、拥堵等,以及评估网络性能。

当网络里发现恶意攻击、某人下载流量过大、设备互联丢包、协议交互失败等等情况时,通过Wireshark抓包定位问题根源,是最直接有效的手段。

虽然Wireshark功能强大,但是很多网工使用时一知半解,会碰到许多问题。

比如:

问题出现时间极不固定,甚至10天才出现一次,你会一直守着抓?

数据流量太大,才抓几秒钟就达到了几百兆的抓包文件,然后系统卡死要怎样操作?

报文抓到了,但是报文杂乱无章,该从何看起?

……

如果你也有以上问题,那这篇文章你一定要看。

Wireshark抓包原理剖析

Wireshark的应用场景主要可分为两类:一类是电脑直连互联网的单机环境;另一类则是更为常见的连接交换机的互联网环境。

单机环境下的抓包机制

在「单机情况」中,Wireshark能够直接对本机网卡的网络流量进行抓取。这意味着,所有进出该计算机网卡的数据包,都能被Wireshark精准捕获,为用户分析单机网络活动提供了基础数据。

交换机环境下的抓包方式

在「交换机情况」下,Wireshark需要借助特定手段来获取局域网中的网络流量,常见的方式有端口镜像与ARP欺骗。

  • 端口镜像:该方式借助交换机的特定接口功能,将局域网内的网络流量完整地转发至指定电脑的网卡上。如此一来,Wireshark便能在这台指定电脑上,对从交换机镜像过来的网络流量进行捕获与分析,从而了解整个局域网的网络通信状况。
  • ARP欺骗:由于交换机依据MAC地址转发数据,ARP欺骗的原理便是通过伪装其他终端的MAC地址,使交换机误以为数据应发往实施欺骗的设备,进而让Wireshark能够获取到原本发往其他终端的局域网网络流量,实现对局域网通信的全面监测与分析 。

Wireshark抓包入门与界面介

Wireshark抓包入门

  1. 网卡选择

打开Wireshark后,会径直进入「网卡选择界面」。在该界面中,诸如“WLAN”便是连接无线网络的网卡标识。若要抓取此网卡的网络流量,只需双击对应的网卡名称,Wireshark便会自动启动抓包进程。

Wireshark选择网卡

  1. 停止抓包

若想停止正在进行的抓包操作,可点击Wireshark界面左上角醒目的「红色按钮」,点击之后,抓包过程即刻终止。

Wireshark停止抓包

  1. 保存数据

完成抓包后,若要保存抓取到的数据,可通过两种便捷方式实现。其一,点击界面右上角的「文件」选项,在下拉菜单中选择「保存」,便能将抓包数据妥善留存。

Wireshark保存数据

其二,也可直接点击工具栏上形似磁盘的保存按钮,同样能快速完成数据保存操作。

Wireshark保存按钮

Wireshark界面介绍

Wireshark的主界面布局清晰、功能完备,主要由以下6个部分构成,各部分协同工作,为用户提供高效的网络数据包分析体验。其界面概览如下:

Wireshark 界面介绍

  1. 菜单栏:这一区域集成了众多关键功能选项,主要用于软件的调试以及各项参数的精细配置,通过菜单栏,用户可以深入调整Wireshark的工作模式,以契合不同的网络分析需求。
  2. 工具栏:它集合了日常使用频率较高功能的快捷方式,方便用户快速调用诸如开始抓包、停止抓包、保存数据等常用操作,极大地提升了操作效率,减少了操作步骤。
  3. 过滤栏:在此处,用户能够依据自身需求,灵活指定各种过滤条件,从而精准筛选出符合特定规则的数据包。无论是基于协议类型、IP地址、端口号,还是其他复杂的组合条件,都能通过过滤栏轻松实现数据包的过滤,让分析工作更具针对性。
  4. 数据包列表:作为Wireshark的核心区域,数据包列表以直观的表格形式呈现。每一行都对应着一个独立的数据包,用户可以在该区域快速浏览众多数据包的关键信息,如数据包的序号、捕获时间、源IP地址、目的IP地址、协议类型等,为后续深入分析数据包奠定基础。
  5. 数据包详情:当用户在数据包列表中选中某个数据包后,该区域会详细展示所选数据包的各项具体数据。从链路层协议的头部信息,到网络层、传输层以及应用层的各个字段,都会逐一展开呈现,帮助用户深入剖析数据包的结构与内容。
  6. 数据包字节:此部分展示的是数据包对应的字节流,以二进制形式呈现数据包的原始数据。对于需要深入研究数据包底层编码、协议格式细节,或者进行数据恢复、异常检测等工作的用户而言,数据包字节视图提供了最原始、最底层的数据信息 。

调整界面大小

工具栏中的三个「放大镜」图标,可以调整主界面数据的大小。

Wireshark调整界面大小

设置显示的列

数据包列表是最常用的模块之一,列表中有一些默认显示的列,我们可以添加、删除、修改显示的列。

1)添加显示列

想要在数据列表中显示某一个字段,可以将这个数据字段添加至显示列中。

左键选中想要添加为列的字段,右键选择「应用为列」。

Wireshark添加显示列

选中字段,按 Ctrl + Shift + I ,也可以实现同样的效果。

添加为列的字段会在数据列表中显示。

Wireshark添加显示列

2)隐藏显示列

暂时不想查看的列,可以暂时隐藏起来。

在显示列的任意位置右键,取消列名的「勾选」,即可隐藏显示列。

Wireshark隐藏显示列

3)删除显示列

不需要查看的字段,可以从显示列中删除。

右键需要删除的列,点击最下方的「Remove this Column」 。

Wireshark删除显示列

注意:隐藏字段时,在列名栏的任意位置右键即可;而删除字段时,需要在指定的列名位置右键,以防误删。

3. 设置时间

数据包列表栏的时间这一列,默认显示格式看起来很不方便,我们可以调整时间的显示格式。

点击工具栏的「视图」,选择「时间显示格式」,设置你喜欢的格式。

Wireshark设置时间

4. 标记数据包

对于某些比较重要的数据包,可以设置成高亮显示,以达到标记的目的。

选中需要标记的数据包,右键选择最上面的「标记/取消标记」。

Wireshark标记数据包

选中数据包,按 Ctrl + M 也可以实现同样的效果,按两次可以取消标记。

5. 导出数据包

演示快速抓包时,我们讲过保存数据包的操作,保存操作默认保存所有已经抓取的数据包。但有时候,我们只需要保存指定的数据包,这时候可以使用导出的功能。

1)导出单个数据包

选中数据包,点击左上角的「文件」,点击「导出特定分组」。

Wireshark导出单个数据包

在「导出分组界面」,选择第二个 「Selected packets only」,只保存选中的数据包。

Wireshark导出单个数据包

2)导出多个数据包

有时候我们需要导出多个数据包,Wireshark有一个导出标记的数据包的功能,我们将需要导出的数据包都标记起来,就可以同时导出多个数据包。

点击左上角的「文件」,点击「导出特定分组」。

Wireshark导出多个数据包

在「导出分组界面」,勾选第三个 「Marked packets only」,只导出标记的数据包。

Wireshark导出多个数据包

开启混杂模式

局域网的所有流量都会发送给我们的电脑,默认情况下,我们的电脑只会对自己mac的流量进行解包,而丢弃其他mac的数据包。

开启混杂模式后,我们就可以解析其他mac的数据包,因此,我们使用Wireshark时,通常都会开启混杂模式。

点击菜单栏的「捕获」按钮,点击「选项」。

Wireshark开启混杂模式

勾选 在所有接口上使用混杂模式。

Wireshark开启混杂模式

Wireshark 抓包技巧

一、过滤器捕获技巧

在网络分析领域,Wireshark堪称一款极为强大的工具。大家都知道,Wireshark不仅能够实现本地抓包,还支持通过Remote Packet Capture Protocol(rpcapd)协议进行远程抓包。具体操作很简单,只需在远程主机上安装相应的rpcapd服务例程,就能在本地电脑上借助Wireshark捕获远程电脑的网络流量。

实际工作中,不少网工都遇到过这样的棘手问题。在某企业网络环境下,外网用户通过telnet连接到出口设备时,不定时出现回显不全的状况。为了排查故障根源,网工决定抓取telnet数据包进行深入分析。

于是,他们使用Wireshark对接口的所有数据包进行捕获。然而,仅仅过了2分钟,负责抓包的电脑就死机了。原因在于网络流量过于庞大,最终的结果是,耗费了大量精力和时间,却一个有用的数据包都没获取到。

面对这种情况,学会合理运用捕获过滤器就显得尤为重要。通过设置捕获过滤器,我们可以做到只捕获特定的流量,或者排除某些流量,而捕获其他所有相关流量。这一操作能极大提高抓包效率,避免因海量无用数据导致的设备故障,精准定位所需的数据包,为网络问题的排查与解决提供有力支持 。

使用过滤器的操作步骤如下:

  • (1)依次打开“捕获”→“选项”,选择对应的抓包接口,“所选择接口的捕获过滤器”栏输入过滤表达式,如下图:

Wireshark选择抓包网卡

  • (2)在捕获数据包的窗口中可以看到经过捕获过滤器后的数据包,如下图:

Wireshark抓包界面

  • (3)捕获过滤表达式的格式:【逻辑运算】+【协议】+【方向】+【类型】+【值】

逻辑运算:and、or、not

协议:ether、ip、icmp、arp、tcp、udp等

方向:src、dst、src and dst、src or dst

类型:host、net、port、portrange等

常用的捕获过滤表达式如下表:

二、过滤器显示技巧

在运用Wireshark时,由于常常需要从海量数据包中精准定位自己所需的数据包,显示过滤器的使用就成为了一项不可或缺的技能。

例如,在某城域网的出口路由器上,运维人员发现了大量telnet尝试登录失败的日志。为深入排查问题,在出口处开启抓包,两小时后得到了一个大小为100M的抓包文件。接下来,就需要从这个文件中筛选出所有telnet相关的数据包进行分析。

倘若采用逐个查找的方式,无疑会耗费大量宝贵时间,效率极其低下。而此时,显示过滤器便能大显身手,让数据包筛选工作变得得心应手,高效精准地定位到所需的telnet数据包 。

  • (1)Wireshark打开抓包文件后,在“显示过滤器”栏输入过滤表达式,便可得到经过显示过滤器后的数据包,如下图:

Wireshark抓包过滤示例

  • (2)磨刀不误砍柴工,常用的显示过滤表达式,如下表:

Wireshark常用抓包过滤表达式

三、借助命令行实现长时间抓包

在企业网络环境中,时常会出现一些棘手的问题。例如,部分企业用户遭遇认证服务器侧提示计费服务器“down掉”的状况,而且该问题复现周期长达7天。为查明究竟是接入设备与服务器之间的链路故障,还是服务器未能及时处理radius报文所致,技术人员决定通过抓包来寻找线索。

当在iMC服务器网卡进行抓包操作时,仅仅2个小时,Wireshark就出现了挂死现象。这可让人懊恼不已,辛苦抓取的数据包还未来得及保存便付诸东流。(信息来源:网络工程师俱乐部)

面对此类情况,命令行抓包堪称“一招制胜”的法宝。命令行抓包直接将数据写入硬盘,从根本上避免了内存溢出以及进程挂死等问题。下面,就为大家详细介绍具体的操作步骤:

(1)运用ipconfig查看抓包网卡描述

通过ipconfig指令,能够清晰查看到抓包网卡的相关描述,具体展示如下图所示:

使用 ipconfig 抓包返回示例

(2)切换至Wireshark安装目录,利用tshark -D查看抓包网卡索引号

首先,通过cd命令切换到Wireshark的安装目录。在此目录下,执行tshark -D命令,即可查看抓包网卡的索引号,结果呈现如下:

使用tshark显示网卡索引号

(3)输入tshark命令启动抓包

情况一:问题出现时间不定且频率低,硬盘空间受限

当问题出现的时间难以确定,可能几小时甚至几天才出现一次,同时硬盘空间有限时,我们采用循环抓包法。此方法可持续抓包,并生成指定个数和大小的文件。一旦文件个数超出设定值,便会自动覆盖,以此循环利用硬盘空间。

例如,若要实现抓包文件每达到100KB时自动新建一个文件,且总共生成10个文件,将其保存至D盘根目录,文件超出后自动替换(总体占用1M空间),可输入如下命令:“tshark -b filesize:100 -b files:10 -w d:/yhy1m10.pcap -i 1”。其中,“-b”代表循环抓包;“Filezise”表示每个分包大小(单位为KB);“Files”指总分包个数;“-w”用于指定保存的文件路径及文件名称;“-i”则是网卡接口号。实际操作展示如下:

使用tshark抓包

情况二:问题定位需长时间抓包,硬盘空间充足

若问题定位需要长时间抓包,且硬盘空间充足,期望分析抓包网卡的全部数据,此时可采用持续抓包法。该方法会持续抓包,不断生成指定大小的文件,直至硬盘空间被占满。

例如,若要每个文件大小为20M,并保存到D盘根目录,可输入命令:“tshark -b filesize:2000 -w d:/ yhy20m.pcap -i 1 ” 。待问题复现后,通过按下“ctrl + c”组合键停止抓包。

(4)前往指定文件目录获取抓包文件进行分析

完成抓包操作后,前往指定的文件目录,即可获取抓包文件用于后续分析。以下展示的是循环抓包生成的文件:

tshark抓包指定保存路径

四、TXT文件轻松变身pcap文件

想象一下,你在某电站工作时,发现上送设备CPU的报文老是出现超时状况。为排查问题,你打开调试开关,结果得到了一堆原始二进制数据调试信息。面对这些密密麻麻、毫无头绪的代码,是不是瞬间感到一脸茫然,两眼发懵?就像下面这张图展示的一样:

二进制原始调试报文示例

与之形成鲜明对比的是,当拿到一份.pcap格式的抓包文件,打开查看时,报文的各个字段清晰明了,一切都变得简单易懂。如下图所示:

pcap文件内容示例

如果你还不太清楚如何把原始的.txt格式调试信息转换为.pcap文件,别担心,详细步骤已经为你精心准备好啦:

(1)保存调试信息并放置到指定目录

首先,将获取到的调试信息保存为.txt文件,然后把这个文件放置到Wireshark的安装根目录下。

(2)切换至Wireshark安装根目录

通过“cd”命令,快速切换到Wireshark的安装根目录。操作过程如下图所示:

Wireshark安装目录

(3)执行转换操作

在Wireshark安装根目录下,调用text2pcap.exe程序,轻松将.txt文件转换为.pcap文件。转换过程的实际展示如下:

使用调用text2pcap转换抓包文件

五、Wireshark窗口排列秘籍

热衷于数据包分析的你,想必有过这样的困扰:打开抓包文件后,显示窗口的列常常重叠在一起,就像下面这张图呈现的,源IP地址和目的IP地址都无法完整显示,严重影响分析效率。

Wireshark窗口重叠示意图

以往,你可能通过手动拖动来调整窗口列,但这种方式不仅操作繁琐、耗时费力,而且调整后的效果往往不尽如人意,不够美观。其实,Wireshark隐藏着一个便捷的小技巧——使用快捷键ctrl + shift + R(或者通过“视图”→“调整列宽”路径),一键就能自动调整列框,让窗口布局瞬间变得整齐美观,既节省时间又提升了操作体验。调整后的效果如下图所示:

Wireshark窗口自动排列

六、Wireshark 自动生成流量交互图

在处理认证异常问题时,深入分析radius报文的交互情况至关重要。传统做法是先绘制报文交互图,再逐个对报文进行标注,最后对照标准协议交互过程来排查问题。然而,当协议复杂且报文数量庞大时,这种方式不仅操作起来极为繁琐,还容易因为标注过多而导致画面混乱,难以看清关键信息。

此时,Wireshark中的流量图工具便能大显身手。打开抓包文件后,依次点击“统计”→“流量图”,在弹出的设置窗口中,将“显示”选项选为“显示的分组”。借助这一工具,我们可以轻松完成报文交互图的绘制与标注过程。通过与标准radius协议交互过程进行对比,如下面两张图所示,能迅速且清晰地识别出在哪个环节出现了问题,大大提高了问题排查的效率与准确性。

Wireshark中流量图工具

radius协议交互过程

七、巧用Wireshark,凭MAC识别厂商

在部署WLAN时,不少小伙伴会借助Wirelessmon进行扫描。过程中,可能会碰到一些令人头疼的情况:个别MAC地址以00:74:9C开头的无线SSID,与自己的网络工作在同一信道,而且发射功率极大,对自身网络造成了严重干扰。

此时,若想知晓这是哪家厂商的AP,其实有个简单办法。MAC地址的前3个字节,是设备厂商标识符,通过它就能确定设备所属厂商。

在这方面,Wireshark安装目录下的manuf文件可就派上大用场了。经过查询,你会发现00:74:9C对应的正是R厂商,具体查询结果如下图所示:

Wireshark 根据MAC识别所属厂商

八、Wireshark抓包文件数据包高效统计分析

假设你负责某商场的网络项目,突然遭遇网络流量异常状况。抵达现场后,你迅速使用Wireshark进行抓包,15分钟后获取了一个80M大小的数据包文件。然而,面对如此庞大的数据量,若采用手工统计的方式进行分析,效率实在太低;要是仅凭粗略浏览、凭感觉判断,又难以保证准确性。这可如何是好?(信息来源:网络工程师俱乐部)

别着急,强大的Wireshark早就为你准备好了应对之策。只需依次点击“统计”→“会话”,Wireshark便能分别按照数据包个数和字节大小进行统计。瞬间,你就能清晰看到哪些IP地址之间的流量最为庞大。后续,重点排查这些IP地址即可。以下图为例,10.63.16.77和10.88.14.119之间的流量明显最大。

Wireshark 抓包文件数据包统计分析

九、报文数据字段解码:揭开数据包的神秘面纱

当你在某火车站处理服务器始终无法接收防火墙发出的userlog日志这一棘手问题时,首要任务是判断究竟是服务器无法解析日志数据,还是userlog数据包根本就没有抵达服务器。为此,你在服务器网卡处开启抓包功能,期望从中找到线索。

(1)初次审视,迷雾重重

乍一看抓包结果,映入眼帘的似乎并非userlog数据包,就像面对一团迷雾,看山不是山,抓包数据呈现如下:

userlog数据包

(2)关键发现,拨云见日

在仔细排查过程中,你留意到防火墙上userlog所使用的端口并非默认端口。这一关键发现让你瞬间恍然大悟。此时,通过Wireshark的操作路径“分析”→“解码为”,手动选择对应的端口以及userlog协议,操作界面如下:

解码为userlog数据包

(3)真相大白,一目了然

经过上述解码操作,你终于清晰地看到了userlog数据包的各个字段。此刻,真相大白,看山还是山。从结果可知,服务器实际上已经收到了userlog数据包,问题根源在于服务器无法对其进行解析,具体数据包展示如下:

userlog数据包头

十、抓包文件“瘦身”技巧:精准提取所需数据

你一直勤奋钻研http协议,最近手头有一个50M大小的抓包文件,你需要从中筛选出与http协议相关的数据,并将其保存下来,以便更精巧地插入到word文档中,方便后续查阅。以下是具体的操作方法:

(1)初步筛选,批量导出

首先,利用显示过滤器进行初步过滤,但此时数据包数量依旧较多。别担心,接下来通过Wireshark的“文件”→“导出特定分组”功能,在弹出的选项中,选择“all packets”(所有数据包)和“displayed”(已显示的数据包),然后点击保存。操作界面展示如下:

Wireshark导出分组数据包

(2)精准定位,个别保存

倘若你仅需要保存个别特定的数据包,那么可以先对这些数据包进行“标记分组”操作,随后再次进入“文件”→“导出特定分组”,这次选择“marked packets”(已标记的数据包)和“displayed”(已显示的数据包),最后点击保存即可。具体操作界面如下:

Wireshark导出压缩后的分组数据包

Wireshark 常用包过滤表达式

Wireshark 抓包时的过滤表达式主要分为 捕获过滤(Capture Filter)显示过滤(Display Filter) 两种:


1. 捕获过滤(Capture Filter)

捕获过滤在数据包进入 Wireshark 之前就进行筛选,基于 BPF(Berkeley Packet Filter) 语法,过滤性能高,但不够灵活,一旦开始抓包就无法更改。

常见的捕获过滤表达式

捕获过滤的语法结构一般如下图所示:

常用过滤表达式示例:

# 过滤指定 IP 地址的数据包
host 192.168.1.1

# 过滤源 IP
src host 192.168.1.1

# 过滤目标 IP
dst host 192.168.1.1

# 过滤某个网段的数据包
net 192.168.1.0/24

# 过滤特定端口
port 80
src port 443
dst port 22

# 过滤特定协议
tcp
udp
icmp
arp

# 过滤特定 MAC 地址
ether host 00:11:22:33:44:55

# 过滤特定网卡接口的数据包
ether src host 00:11:22:33:44:55
ether dst host 00:11:22:33:44:55

# 过滤 TCP/UDP 端口范围
portrange 1000-2000

# 组合条件
tcp and port 443
src host 192.168.1.1 and dst port 80

2. 显示过滤(Display Filter)

显示过滤用于抓包完成后在 Wireshark 界面进行筛选,支持更复杂的逻辑,基于 Wireshark Display Filter 语法

常见的显示过滤表达式

显示过滤可使用一下连接符:

==(eq)  //等于,equal

!=(ne)  //不等于,no equal

<(lt)  //小于,less than

>(gt)  //大于,great than

>=(ge)  //大于等于,great equal

<=(le)  //小于等于,less equal

&&  //逻辑“与”运算

||  //逻辑“或”运算

!  //逻辑“非”运算


常用表达式如下:

# 过滤特定 IP
ip.addr == 192.168.1.1
ip.src == 192.168.1.1
ip.dst == 192.168.1.1

# 过滤多个 IP
ip.addr == 192.168.1.1 or ip.addr == 10.0.0.1

# 过滤网段
ip.src == 192.168.1.0/24

# 过滤 TCP/UDP 端口
tcp.port == 80
udp.port == 53
tcp.srcport == 443
tcp.dstport == 22

# 过滤特定协议
http
dns
tcp
udp
icmp
arp

# 过滤 HTTP 请求
http.request
http.response

# 过滤 HTTP POST 请求
http.request.method == "POST"

# 过滤 HTTPS(TLS)
tls

# 过滤 DNS 查询
dns and ip.src == 192.168.1.1

# 过滤 MAC 地址
eth.src == 00:11:22:33:44:55
eth.dst == 66:77:88:99:AA:BB

# 过滤数据包大小
frame.len > 1000  # 数据包大于 1000 字节
frame.len <= 500  # 数据包小于等于 500 字节

# 过滤 TCP 标志位
tcp.flags.syn == 1  # 仅显示 TCP SYN 包
tcp.flags.reset == 1  # 仅显示 TCP RST 包
tcp.flags.fin == 1  # 仅显示 TCP FIN 包

# 过滤错误数据包
tcp.analysis.flags  # 显示所有 TCP 相关的异常包
tcp.analysis.retransmission  # 仅显示 TCP 重传包
tcp.analysis.lost_segment  # 仅显示 TCP 丢失的段

# 组合条件
(ip.src == 192.168.1.1 and tcp.port == 80) or dns
!(arp or icmp)  # 排除 ARP 和 ICMP

3. 两种过滤的区别

对比项 捕获过滤(Capture Filter) 显示过滤(Display Filter)
语法 BPF 语法(简单) Wireshark 语法(复杂)
作用时间 抓包前 进行过滤 抓包后 进行筛选
资源消耗 低(减少存储和 CPU 负担) 高(需要额外计算)
是否可修改 不可修改(需重新抓包) 可随时修改
适用场景 只抓取需要的数据 分析已抓取的数据

如果你的需求是 减少无关数据,提高抓包效率,建议用 捕获过滤。 如果是 事后分析和筛选特定数据包,用 显示过滤 更灵活。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

文章由技术书栈整理,本文链接:https://study.disign.me/article/202509/19.wireshark-packet-capture.md

发布时间: 2025-02-27