引言
作为一款高效免费的抓包工具,wireshark可以捕获并描述网络数据包,其最大的优势就是免费、开源以及多平台支持,在GNU通用公共许可证的保障范围下,用户可以免费获取软件和代码,并拥有对其源码修改和定制的权利,如今其已是全球最广泛的网络数据包分析软件之一。
抓包工具Wireshark 大家都知道,它可以截获和分析网络数据封包,检测网络上的问题,比如网络延迟、数据丢失、拥堵等,以及评估网络性能。
当网络里发现恶意攻击、某人下载流量过大、设备互联丢包、协议交互失败等等情况时,通过Wireshark抓包定位问题根源,是最直接有效的手段。
虽然Wireshark功能强大,但是很多网工使用时一知半解,会碰到许多问题。
比如:
问题出现时间极不固定,甚至10天才出现一次,你会一直守着抓?
数据流量太大,才抓几秒钟就达到了几百兆的抓包文件,然后系统卡死要怎样操作?
报文抓到了,但是报文杂乱无章,该从何看起?
……
如果你也有以上问题,那这篇文章你一定要看。
Wireshark抓包原理剖析
Wireshark的应用场景主要可分为两类:一类是电脑直连互联网的单机环境;另一类则是更为常见的连接交换机的互联网环境。
单机环境下的抓包机制
在「单机情况」中,Wireshark能够直接对本机网卡的网络流量进行抓取。这意味着,所有进出该计算机网卡的数据包,都能被Wireshark精准捕获,为用户分析单机网络活动提供了基础数据。
交换机环境下的抓包方式
在「交换机情况」下,Wireshark需要借助特定手段来获取局域网中的网络流量,常见的方式有端口镜像与ARP欺骗。
- 端口镜像:该方式借助交换机的特定接口功能,将局域网内的网络流量完整地转发至指定电脑的网卡上。如此一来,Wireshark便能在这台指定电脑上,对从交换机镜像过来的网络流量进行捕获与分析,从而了解整个局域网的网络通信状况。
- ARP欺骗:由于交换机依据MAC地址转发数据,ARP欺骗的原理便是通过伪装其他终端的MAC地址,使交换机误以为数据应发往实施欺骗的设备,进而让Wireshark能够获取到原本发往其他终端的局域网网络流量,实现对局域网通信的全面监测与分析 。
Wireshark抓包入门与界面介
Wireshark抓包入门
- 网卡选择
打开Wireshark后,会径直进入「网卡选择界面」。在该界面中,诸如“WLAN”便是连接无线网络的网卡标识。若要抓取此网卡的网络流量,只需双击对应的网卡名称,Wireshark便会自动启动抓包进程。
- 停止抓包
若想停止正在进行的抓包操作,可点击Wireshark界面左上角醒目的「红色按钮」,点击之后,抓包过程即刻终止。
- 保存数据
完成抓包后,若要保存抓取到的数据,可通过两种便捷方式实现。其一,点击界面右上角的「文件」选项,在下拉菜单中选择「保存」,便能将抓包数据妥善留存。
其二,也可直接点击工具栏上形似磁盘的保存按钮,同样能快速完成数据保存操作。
Wireshark界面介绍
Wireshark的主界面布局清晰、功能完备,主要由以下6个部分构成,各部分协同工作,为用户提供高效的网络数据包分析体验。其界面概览如下:
- 菜单栏:这一区域集成了众多关键功能选项,主要用于软件的调试以及各项参数的精细配置,通过菜单栏,用户可以深入调整Wireshark的工作模式,以契合不同的网络分析需求。
- 工具栏:它集合了日常使用频率较高功能的快捷方式,方便用户快速调用诸如开始抓包、停止抓包、保存数据等常用操作,极大地提升了操作效率,减少了操作步骤。
- 过滤栏:在此处,用户能够依据自身需求,灵活指定各种过滤条件,从而精准筛选出符合特定规则的数据包。无论是基于协议类型、IP地址、端口号,还是其他复杂的组合条件,都能通过过滤栏轻松实现数据包的过滤,让分析工作更具针对性。
- 数据包列表:作为Wireshark的核心区域,数据包列表以直观的表格形式呈现。每一行都对应着一个独立的数据包,用户可以在该区域快速浏览众多数据包的关键信息,如数据包的序号、捕获时间、源IP地址、目的IP地址、协议类型等,为后续深入分析数据包奠定基础。
- 数据包详情:当用户在数据包列表中选中某个数据包后,该区域会详细展示所选数据包的各项具体数据。从链路层协议的头部信息,到网络层、传输层以及应用层的各个字段,都会逐一展开呈现,帮助用户深入剖析数据包的结构与内容。
- 数据包字节:此部分展示的是数据包对应的字节流,以二进制形式呈现数据包的原始数据。对于需要深入研究数据包底层编码、协议格式细节,或者进行数据恢复、异常检测等工作的用户而言,数据包字节视图提供了最原始、最底层的数据信息 。
调整界面大小
工具栏中的三个「放大镜」图标,可以调整主界面数据的大小。
设置显示的列
数据包列表是最常用的模块之一,列表中有一些默认显示的列,我们可以添加、删除、修改显示的列。
1)添加显示列
想要在数据列表中显示某一个字段,可以将这个数据字段添加至显示列中。
左键选中想要添加为列的字段,右键选择「应用为列」。
选中字段,按 Ctrl + Shift + I
,也可以实现同样的效果。
添加为列的字段会在数据列表中显示。
2)隐藏显示列
暂时不想查看的列,可以暂时隐藏起来。
在显示列的任意位置右键,取消列名的「勾选」,即可隐藏显示列。
3)删除显示列
不需要查看的字段,可以从显示列中删除。
右键需要删除的列,点击最下方的「Remove this Column」 。
注意:隐藏字段时,在列名栏的任意位置右键即可;而删除字段时,需要在指定的列名位置右键,以防误删。
3. 设置时间
数据包列表栏的时间这一列,默认显示格式看起来很不方便,我们可以调整时间的显示格式。
点击工具栏的「视图」,选择「时间显示格式」,设置你喜欢的格式。
4. 标记数据包
对于某些比较重要的数据包,可以设置成高亮显示,以达到标记的目的。
选中需要标记的数据包,右键选择最上面的「标记/取消标记」。
选中数据包,按 Ctrl + M 也可以实现同样的效果,按两次可以取消标记。
5. 导出数据包
演示快速抓包时,我们讲过保存数据包的操作,保存操作默认保存所有已经抓取的数据包。但有时候,我们只需要保存指定的数据包,这时候可以使用导出的功能。
1)导出单个数据包
选中数据包,点击左上角的「文件」,点击「导出特定分组」。
在「导出分组界面」,选择第二个 「Selected packets only」,只保存选中的数据包。
2)导出多个数据包
有时候我们需要导出多个数据包,Wireshark有一个导出标记的数据包的功能,我们将需要导出的数据包都标记起来,就可以同时导出多个数据包。
点击左上角的「文件」,点击「导出特定分组」。
在「导出分组界面」,勾选第三个 「Marked packets only」,只导出标记的数据包。
开启混杂模式
局域网的所有流量都会发送给我们的电脑,默认情况下,我们的电脑只会对自己mac的流量进行解包,而丢弃其他mac的数据包。
开启混杂模式后,我们就可以解析其他mac的数据包,因此,我们使用Wireshark时,通常都会开启混杂模式。
点击菜单栏的「捕获」按钮,点击「选项」。
勾选 在所有接口上使用混杂模式。
Wireshark 抓包技巧
一、过滤器捕获技巧
在网络分析领域,Wireshark堪称一款极为强大的工具。大家都知道,Wireshark不仅能够实现本地抓包,还支持通过Remote Packet Capture Protocol(rpcapd)协议进行远程抓包。具体操作很简单,只需在远程主机上安装相应的rpcapd服务例程,就能在本地电脑上借助Wireshark捕获远程电脑的网络流量。
实际工作中,不少网工都遇到过这样的棘手问题。在某企业网络环境下,外网用户通过telnet连接到出口设备时,不定时出现回显不全的状况。为了排查故障根源,网工决定抓取telnet数据包进行深入分析。
于是,他们使用Wireshark对接口的所有数据包进行捕获。然而,仅仅过了2分钟,负责抓包的电脑就死机了。原因在于网络流量过于庞大,最终的结果是,耗费了大量精力和时间,却一个有用的数据包都没获取到。
面对这种情况,学会合理运用捕获过滤器就显得尤为重要。通过设置捕获过滤器,我们可以做到只捕获特定的流量,或者排除某些流量,而捕获其他所有相关流量。这一操作能极大提高抓包效率,避免因海量无用数据导致的设备故障,精准定位所需的数据包,为网络问题的排查与解决提供有力支持 。
使用过滤器的操作步骤如下:
- (1)依次打开“捕获”→“选项”,选择对应的抓包接口,“所选择接口的捕获过滤器”栏输入过滤表达式,如下图:
- (2)在捕获数据包的窗口中可以看到经过捕获过滤器后的数据包,如下图:
- (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打开抓包文件后,在“显示过滤器”栏输入过滤表达式,便可得到经过显示过滤器后的数据包,如下图:
- (2)磨刀不误砍柴工,常用的显示过滤表达式,如下表:
三、借助命令行实现长时间抓包
在企业网络环境中,时常会出现一些棘手的问题。例如,部分企业用户遭遇认证服务器侧提示计费服务器“down掉”的状况,而且该问题复现周期长达7天。为查明究竟是接入设备与服务器之间的链路故障,还是服务器未能及时处理radius报文所致,技术人员决定通过抓包来寻找线索。
当在iMC服务器网卡进行抓包操作时,仅仅2个小时,Wireshark就出现了挂死现象。这可让人懊恼不已,辛苦抓取的数据包还未来得及保存便付诸东流。(信息来源:网络工程师俱乐部)
面对此类情况,命令行抓包堪称“一招制胜”的法宝。命令行抓包直接将数据写入硬盘,从根本上避免了内存溢出以及进程挂死等问题。下面,就为大家详细介绍具体的操作步骤:
(1)运用ipconfig
查看抓包网卡描述
通过ipconfig
指令,能够清晰查看到抓包网卡的相关描述,具体展示如下图所示:
(2)切换至Wireshark安装目录,利用tshark -D
查看抓包网卡索引号
首先,通过cd
命令切换到Wireshark的安装目录。在此目录下,执行tshark -D
命令,即可查看抓包网卡的索引号,结果呈现如下:
(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”则是网卡接口号。实际操作展示如下:
情况二:问题定位需长时间抓包,硬盘空间充足
若问题定位需要长时间抓包,且硬盘空间充足,期望分析抓包网卡的全部数据,此时可采用持续抓包法。该方法会持续抓包,不断生成指定大小的文件,直至硬盘空间被占满。
例如,若要每个文件大小为20M,并保存到D盘根目录,可输入命令:“tshark -b filesize:2000 -w d:/ yhy20m.pcap -i 1 ” 。待问题复现后,通过按下“ctrl + c”组合键停止抓包。
(4)前往指定文件目录获取抓包文件进行分析
完成抓包操作后,前往指定的文件目录,即可获取抓包文件用于后续分析。以下展示的是循环抓包生成的文件:
四、TXT文件轻松变身pcap文件
想象一下,你在某电站工作时,发现上送设备CPU的报文老是出现超时状况。为排查问题,你打开调试开关,结果得到了一堆原始二进制数据调试信息。面对这些密密麻麻、毫无头绪的代码,是不是瞬间感到一脸茫然,两眼发懵?就像下面这张图展示的一样:
与之形成鲜明对比的是,当拿到一份.pcap格式的抓包文件,打开查看时,报文的各个字段清晰明了,一切都变得简单易懂。如下图所示:
如果你还不太清楚如何把原始的.txt格式调试信息转换为.pcap文件,别担心,详细步骤已经为你精心准备好啦:
(1)保存调试信息并放置到指定目录
首先,将获取到的调试信息保存为.txt文件,然后把这个文件放置到Wireshark的安装根目录下。
(2)切换至Wireshark安装根目录
通过“cd”命令,快速切换到Wireshark的安装根目录。操作过程如下图所示:
(3)执行转换操作
在Wireshark安装根目录下,调用text2pcap.exe程序,轻松将.txt文件转换为.pcap文件。转换过程的实际展示如下:
五、Wireshark窗口排列秘籍
热衷于数据包分析的你,想必有过这样的困扰:打开抓包文件后,显示窗口的列常常重叠在一起,就像下面这张图呈现的,源IP地址和目的IP地址都无法完整显示,严重影响分析效率。
以往,你可能通过手动拖动来调整窗口列,但这种方式不仅操作繁琐、耗时费力,而且调整后的效果往往不尽如人意,不够美观。其实,Wireshark隐藏着一个便捷的小技巧——使用快捷键ctrl + shift + R(或者通过“视图”→“调整列宽”路径),一键就能自动调整列框,让窗口布局瞬间变得整齐美观,既节省时间又提升了操作体验。调整后的效果如下图所示:
六、Wireshark 自动生成流量交互图
在处理认证异常问题时,深入分析radius报文的交互情况至关重要。传统做法是先绘制报文交互图,再逐个对报文进行标注,最后对照标准协议交互过程来排查问题。然而,当协议复杂且报文数量庞大时,这种方式不仅操作起来极为繁琐,还容易因为标注过多而导致画面混乱,难以看清关键信息。
此时,Wireshark中的流量图工具便能大显身手。打开抓包文件后,依次点击“统计”→“流量图”,在弹出的设置窗口中,将“显示”选项选为“显示的分组”。借助这一工具,我们可以轻松完成报文交互图的绘制与标注过程。通过与标准radius协议交互过程进行对比,如下面两张图所示,能迅速且清晰地识别出在哪个环节出现了问题,大大提高了问题排查的效率与准确性。
七、巧用Wireshark,凭MAC识别厂商
在部署WLAN时,不少小伙伴会借助Wirelessmon进行扫描。过程中,可能会碰到一些令人头疼的情况:个别MAC地址以00:74:9C开头的无线SSID,与自己的网络工作在同一信道,而且发射功率极大,对自身网络造成了严重干扰。
此时,若想知晓这是哪家厂商的AP,其实有个简单办法。MAC地址的前3个字节,是设备厂商标识符,通过它就能确定设备所属厂商。
在这方面,Wireshark安装目录下的manuf文件可就派上大用场了。经过查询,你会发现00:74:9C对应的正是R厂商,具体查询结果如下图所示:
八、Wireshark抓包文件数据包高效统计分析
假设你负责某商场的网络项目,突然遭遇网络流量异常状况。抵达现场后,你迅速使用Wireshark进行抓包,15分钟后获取了一个80M大小的数据包文件。然而,面对如此庞大的数据量,若采用手工统计的方式进行分析,效率实在太低;要是仅凭粗略浏览、凭感觉判断,又难以保证准确性。这可如何是好?(信息来源:网络工程师俱乐部)
别着急,强大的Wireshark早就为你准备好了应对之策。只需依次点击“统计”→“会话”,Wireshark便能分别按照数据包个数和字节大小进行统计。瞬间,你就能清晰看到哪些IP地址之间的流量最为庞大。后续,重点排查这些IP地址即可。以下图为例,10.63.16.77和10.88.14.119之间的流量明显最大。
九、报文数据字段解码:揭开数据包的神秘面纱
当你在某火车站处理服务器始终无法接收防火墙发出的userlog日志这一棘手问题时,首要任务是判断究竟是服务器无法解析日志数据,还是userlog数据包根本就没有抵达服务器。为此,你在服务器网卡处开启抓包功能,期望从中找到线索。
(1)初次审视,迷雾重重
乍一看抓包结果,映入眼帘的似乎并非userlog数据包,就像面对一团迷雾,看山不是山,抓包数据呈现如下:
(2)关键发现,拨云见日
在仔细排查过程中,你留意到防火墙上userlog所使用的端口并非默认端口。这一关键发现让你瞬间恍然大悟。此时,通过Wireshark的操作路径“分析”→“解码为”,手动选择对应的端口以及userlog协议,操作界面如下:
(3)真相大白,一目了然
经过上述解码操作,你终于清晰地看到了userlog数据包的各个字段。此刻,真相大白,看山还是山。从结果可知,服务器实际上已经收到了userlog数据包,问题根源在于服务器无法对其进行解析,具体数据包展示如下:
十、抓包文件“瘦身”技巧:精准提取所需数据
你一直勤奋钻研http协议,最近手头有一个50M大小的抓包文件,你需要从中筛选出与http协议相关的数据,并将其保存下来,以便更精巧地插入到word文档中,方便后续查阅。以下是具体的操作方法:
(1)初步筛选,批量导出
首先,利用显示过滤器进行初步过滤,但此时数据包数量依旧较多。别担心,接下来通过Wireshark的“文件”→“导出特定分组”功能,在弹出的选项中,选择“all packets”(所有数据包)和“displayed”(已显示的数据包),然后点击保存。操作界面展示如下:
(2)精准定位,个别保存
倘若你仅需要保存个别特定的数据包,那么可以先对这些数据包进行“标记分组”操作,随后再次进入“文件”→“导出特定分组”,这次选择“marked packets”(已标记的数据包)和“displayed”(已显示的数据包),最后点击保存即可。具体操作界面如下:
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