Wireshark实战:用ICMP和SMB2抓包吃透OSI七层模型
2026/9/15 21:36:46 网站建设 项目流程

说句得罪人的话,OSI七层模型很多人是背会的,不是用会的。真正让我把这七层刻进脑子里的,是拿着Wireshark在Windows 10和Server 2022之间一遍遍抓ICMP、SMB2流量,亲眼看到每个报文的每一层头部时,才明白这模型不是考试用的,是所有网络排错和网络安全分析的地图。这篇文章就是把那段实战过程复现一遍,适合刚考完网络认证却没实际抓过包的人,也适合日常被网络问题折磨的运维和想入门流量分析的安全同学。

我会用真实的抓包操作讲两件事:ICMP怎么帮你判断三层通不通,SMB2怎么帮你定位文件共享慢在哪。中间穿插Windows环境下的分层排查思路,最后说说怎么用同样的抓包文件做安全上的判断。

1. 为什么把OSI模型当排错地图,而不是背书大纲

1.1 排错的第一步是回答“丢在哪一层”

你有没有遇到过这种场景:用户报“访问不了服务器”,你ping一下发现通,就觉得网络没问题,结果用户还是说访问不了。另一个场景是ping不通,你第一反应是防火墙,结果关了防火墙也没用。这两个问题本质上是同一个问题:没有先分层。

OSI七层模型在排错里不是理论,是一张定位地图。每层都有自己能看到的证据,交换机的MAC地址表是二层证据,IP路由是三层证据,TCP握手是四层证据,SMB的报错码是七层证据。你要做的不是猜,而是按层收集证据,直到某一层出现明显的异常,问题就定在那了。

我在实战中习惯把排错问题翻译成这样的句子:物理层是看链路有没有电,数据链路层是看MAC帧能不能在本地网段内送达,网络层是看IP包能不能跨网段路由,传输层是看端口和会话能不能建立,应用层是看具体的服务协议是否正常响应。每一层对应一个Wireshark过滤器,排查就是自上而下或自下而上一层一层过。

1.2 最常见的分层定责错误

先泼一盆冷水。ping不通,绝大多数人第一反应是防火墙,但我在实际项目里见过太多反例:网关丢包导致ping不稳定、ARP解析失败导致跨VLAN不通、网线水晶头氧化导致丢包、MTU过大导致大包不通小包通。这些全都不是防火墙拦截。

还有个更隐蔽的错误:ping通了就认为445端口一定通。ICMP是网络层附属协议,不依赖TCP端口;SMB2走的是TCP 445。很多设备会放行ICMP但不放行445,所以用ping的结果去推断SMB共享是否可用,本身在OSI模型上就是跨层误判。正确做法是每一层验证每一层的事,想验证传输层就用Test-NetConnection 10.10.10.20 -Port 445,想验证应用层就直接访问共享看错误码。

1.3 Windows环境里各层常见嫌疑人清单

在Windows 10客户端加Server 2022服务器的环境里,我总结过一张“嫌疑人清单”,每次排错照着过一遍,效率很高:

OSI层常用协议/组件可能故障点
物理层网卡、网线、交换机端口协商速率不对、光口收发异常、水晶头氧化
数据链路层以太网帧、ARP、VLANARP冲突、交换机VLAN划分错误、MAC地址漂移
网络层IPv4、ICMP、路由IP配置错误、网关不可达、路由环路、MTU问题
传输层TCP、UDP端口被防火墙拦截、握手超时、接收窗口为0
会话层/表示层TLS协商、SMB会话加密算法不一致、证书问题、SMB会话复用失败
应用层SMB2、DNS、RPC共享权限、SMB版本协商失败、DNS反查超时

想想看,如果没有这张分层地图,你面对“共享访问慢”这种模糊现象时,很可能直接在服务器上重启服务,结果问题依旧。有了分层意识,你会知道对方可能卡在传输层三次握手,也可能卡在应用层DNS反查,每一步都能用抓包数据验证。

2. 搭建Windows 10与Server 2022的抓包实验环境

2.1 安装Wireshark时的两个关键选择

Wireshark本身是免费开源的,下载安装不复杂,但安装过程中有几个选项很多人直接点了下一步,后面就后悔。

第一个是Npcap勾选。Wireshark在Windows上抓包依赖Npcap驱动,安装时建议把“Install Npcap in WinPcap API-compatible Mode”取消勾选。这个兼容模式是为了让老软件复用WinPcap接口的,对于新装环境没有必要,勾了反而可能因为兼容层引入奇怪的丢包问题。

第二个是“Restrict Npcap driver to Administrators only”这个选项,默认是勾上的。如果你希望普通开发人员也能抓包,建议取消勾选,或者干脆保留默认但提醒自己每次抓包都右键Wireshark选择“以管理员身份运行”。以普通权限打开Wireshark时,可能看不到网卡或者抓不到任何包,这是新手最容易困惑的地方。

安装完验证一下是否正常:打开Wireshark,主界面会列出所有网卡接口,每个接口后面有实时跳动的数据包数字。如果某个接口一直显示0,先检查是不是没开混杂模式,或者是不是接口选择的“适配器”不对。注意,Wireshark现在还支持Windows的“Windows Filtering Platform”相关功能,但主力抓包仍然走Npcap。

2.2 实验网络设计:同一网段与跨网段两种形态

我建议你在虚拟环境里搭,这样敢大胆操作,不怕把生产环境搞挂。用VMware Workstation或VirtualBox都行,装一台Windows 10当客户端,一台Windows Server 2022当服务器。

最简单的网络拓扑是同一网段:

  • Windows 10:10.10.10.10/24,网关10.10.10.1
  • Server 2022:10.10.10.20/24,网关10.10.10.1

把两台虚机的防火墙先做两个放行:一个是“文件和打印机共享(回显请求 - ICMPv4-In)”,这是允许对方ping进本机;另一个是“文件和打印机共享(SMB-In)”,这是允许445端口进本机。如果你懒,也可以临时关防火墙测试,但生产环境别这么干。

跨网段的话,中间要加路由器或三层交换机,Wireshark要在客户端或服务器旁路抓包。跨网段时问题会复杂很多,因为你没法直接看到对端MAC帧,只能依赖IP转发路径。对初学者,我建议先做同网段,把ICMP和SMB2的基础抓包吃透,再考虑跨网段。

实际上,如果你想验证“同一个交换机下不同VLAN不通”这种经典问题,用两个VMnet接口加一个虚拟三层网关也能模拟,但别一上来就搞,容易混淆。

2.3 抓包过滤器与显示过滤器:别用混

这是新手最容易搞混的概念,但抓包能力的分水岭就在这里。

抓包过滤器是在数据包进入Wireshark引擎之前就生效的,它决定了哪些包会被写入内存。语法是BPF,比如:

host 10.10.10.20 and icmp

这条只捕获与10.10.10.20之间的ICMP包。显示过滤器是抓完之后在已捕获的数据里筛选,语法是Wireshark自己的,比如:

icmp

或:

smb2

或组合条件:

ip.addr == 10.10.10.20 && tcp.port == 445

我给你的建议是:排错时尽量用显示过滤器,少用抓包过滤器。原因很简单,抓包过滤器丢弃的包再也找不回来,而排错中最怕的是漏掉上下文。比如你只过滤ICMP,结果发现没有回包,你会少一个证据:到底是谁丢了这个请求?如果这时有ARP请求、TCP重传等“无关”包在旁边,反而能帮你判断是二层问题还是三层问题。当然,在流量特别大的生产网段抓包,用抓包过滤器减少文件体积是合理的,但那是另一个场景。

2.4 抓包前的三个小习惯

我总结了三个每次抓包前都做的事,强烈建议你也养成习惯:

第一,把时间显示格式改成相对时间。菜单路径:View > Time Display Format > Seconds Since Previous Displayed Packet。相对时间能让你在几秒内看出哪个包前停顿了一下,这在SMB2慢查询时特别好用。默认的是绝对时间“X年X月X日几点几分几秒几毫秒”,对判断延迟没有直观感觉。

第二,抓包前先想好“我要验证哪一层”。比如验证三层通不通,就准备静态路由或ping脚本;验证SMB2慢,就要准备一个复制文件的操作脚本。目标是让抓包过程可控,不要漫无目的地抓五分钟全网络流量。

第三,确认Wireshark底部状态栏显示的是“已捕获XX包”而不是“已显示XX包”。这俩数字很容易混淆,已捕获是真正抓到的包数,已显示是经过过滤后显示的包数。如果在显示过滤器下显示包数为0,先别慌,看看是不是过滤器语法写错了,或者抓包接口选错了。

3. ICMP报文逐层拆解:从ping通到ping不通

3.1 ICMP在OSI模型中的身份

先说清楚ICMP的定位。它在Wireshark里看起来是一个独立协议,但从分层角度看,ICMP直接承载在IP之上,属于网络层的附属协议,不经过TCP/UDP,自然也不会有端口号。这意味着你没法用“telnet IP 端口”来检查ICMP通不通,只能靠type和code来理解它的语义。

ICMP最常见的用途就是ping命令的Echo Request和Echo Reply,但这个协议还有大量其他消息类型:目标不可达、超时、重定向、参数错误等。每一条都是网络的“诊断探针”,也是一次排错的现场证词。

3.2 一次成功ping的Wireshark观察

实验环境起来之后,在Windows 10上打开CMD,执行:

ping 10.10.10.20 -t

用 -t 是为了持续ping,方便抓包时在Wireshark里有足够多的包。然后在Wireshark显示过滤器里输入:

icmp

你会看到一组一组往返的包,Echo Request和Echo Reply成对出现。单击其中一个Echo Request包,在Packet Details面板从上往下展开,这个过程就是逐层解剖:

  • Frame:物理层帧,包含实际捕获长度,比如1514字节,这是MTU 1500加以太网头14字节的结果。
  • Ethernet II:数据链路层,能看到源MAC是Windows 10网卡的地址,目的MAC是Server 2022网卡的地址,类型字段0x0800表示上层是IPv4。
  • Internet Protocol Version 4:网络层,看到源IP 10.10.10.10,目的IP 10.10.10.20,协议号01表示上层是ICMP,TTL默认是128。
  • Internet Control Message Protocol:ICMP头,Type=8表示Echo Request,Code=0,Identifier和Sequence Number用于匹配同一个ping进程的请求和响应。

再看对应的Echo Reply包,除了源目标和目的IP互换,Type=0表示Echo Reply,其他字段基本对称。你可以试试用Wireshark的“Follow”功能,但ICMP没有数据流,真正的核心信息在头部。

我自己在实验室经常让新手做一个练习:把以太网源MAC和目的MAC画出来,把IPv4层的源和目的画出来,再标出ICMP Type/Code。做完这个练习,OSI“分层”这个问题就再也不会忘。

3.3 type和code是诊断语言

ICMP的诊断价值集中在type和code组合。我整理了排错时最常用的几个:

TypeCode含义典型场景
00Echo Replyping通
80Echo Requestping请求
30Network Unreachable路由器没有去往目标网络的路由
31Host Unreachable路由器有默认路由但ARP解析不到目标主机
32Protocol Unreachable目标主机不支持IP协议
33Port UnreachableUDP端口不可达(ICMP没有端口,但UDP有)
313Communication Administratively Prohibited被ACL或防火墙管理性拦截
50Redirect for Network路由可以优化,有更优的网关
110TTL Expiredtraceroute利用此字段,也可能路由环路

实战经验:如果ping返回“请求超时”,Wireshark里通常只看到Echo Request发出去,没有Reply回来,说明包被静默丢弃,最大嫌疑是防火墙或策略路由;如果ping返回“目标主机不可达”,那是三层路由器能力之外的IP不可达,往往能在Wireshark看到Echo Request发出去,紧接着回一个ICMP Destination Unreachable。

有一次用户报“服务器ping不通”,我在Wireshark里看到的却是一个Type 3 Code 13,这说明请求包在被管理性拦截,不是服务器本身挂了。按照线索查下去,发现是汇聚交换机ACL把管理网段给拦了。这就是type/code的价值:它直接告诉你是被防火墙拦,还是路由真不可达,省去很多瞎猜。

3.4 用ICMP抓包判断防火墙是否拦截

Windows防火墙默认是拦截入站ICMP Echo Request的,但允许出站。你在Windows 10上ping Server 2022时,如果想通,需要提前在Server 2022防火墙的入站规则里启用“文件和打印机共享(回显请求 - ICMPv4-In)”,或者临时关闭防火墙。

抓包时怎么判断防火墙拦了?如果你在Wireshark里只看到从Win10发出去的Echo Request,一直看不到Server 2022发回的Reply,同时你确认网卡和物理链路没有问题,那大概率是防火墙或主机ACL在丢弃。你再检查一下Server 2022的防火墙事件日志,基本就能坐实。

还有一个跟防火墙无关但很常见的ICMP现象:大包不通小包通。用这个命令可以诊断:

ping 10.10.10.20 -f -l 1472

这里-l 1472是ICMP数据净荷长度,加上ICMP头8字节和IP头20字节,正好1500字节的以太网MTU上限。如果这条不通,但默认32字节的ping通,问题多半出在MTU或中间链路的分片处理,而不是三层路由问题。

4. SMB2抓包:文件共享慢与访问失败的定位

4.1 SMB2的端口和封装:445还是139

SMB2是应用层协议,但它的传输方式有两种:直接用TCP 445端口,或者通过NetBIOS Session Service走TCP 139端口。现代Windows默认首选SMB over TCP 445,纯Windows 10和Server 2022环境不会用139。

抓包时怎么确认当前会话走的是哪个端口?打开Wireshark,在显示过滤器里输入:

tcp.port == 445 || tcp.port == 139

如果看到TCP目的端口是445,说明直接用SMB over TCP。如果在做SMB协商之前先看到139端口的连接,说明会话可能被配置成走NetBIOS了。生产环境性能排查时,我会顺带看一眼有没有139流量,因为通过NetBIOS封装会额外增加解析开销,不太常见但能快速暴露配置问题。

4.2 SMB2六步会话流程

一次正常的SMB2文件共享访问,在Wireshark里看到的是这样一条命令链:

  1. Negotiate(协商):客户端和服务器确认SMB版本和协议细节。
  2. Session Setup(建立会话):身份验证,NTLM或Kerberos。
  3. Tree Connect(连接共享):把客户端连接到具体共享目录,比如\10.10.10.20\share。
  4. Create(创建/打开文件):打开目标文件,并协商读写权限和缓存方式。
  5. Read/Write(读写文件):实际数据传输。
  6. Close(关闭文件)。

在Wireshark显示过滤器里输入:

smb2

你就能看到整条流程。展开任何一个SMB2包的头部,最关键的几个字段:

  • ProtocolId:固定为“FE SMB”,这是SMB2协议魔数,用来区分SMB1和SMB2。
  • Command:当前命令的类型,比如0x0000是Negotiate,0x0001是Session Setup,0x0005是Create,0x0008是Read。
  • NT Status:返回状态,0x00000000表示成功,非零值表示具体错误。
  • MessageId:标识请求/响应之间的关联。
  • SessionId:一次会话的唯一标识,看这个字段能区分并发会话。
  • TreeId:标识具体共享连接。

4.3 看响应时间:复制文件慢怎么定位

SMB2性能问题的经典场景:客户端从共享复制一个大文件,速度只有几MB/s,远低于网络带宽。这时候单纯看数据包的“数量”没有意义,要看“时间”。

Wireshark有个很好用的工具:Statistics > Service Response Time > SMB2。这个面板会把所有SMB2命令按类型统计最小、最大、平均响应时间。如果发现SMB2 Create的平均响应时间异常高,说明打开文件这个动作慢,问题可能在文件锁、服务器防病毒扫描或磁盘IO;如果Read命令慢,可能是网络吞吐或服务器存储性能。

再往前一步,还要看TCP层的表现。在显示过滤器里输入:

tcp.analysis.flags

这个过滤器会显示所有TCP异常标记的包,包括重传、乱序、零窗口等。如果重传非常多,说明链路层或物理层在丢包,问题不在SMB2应用层,而在下面的TCP/IP栈。如果出现大量零窗口包,说明接收端缓冲区满了,问题在应用层处理速度而不是网络带宽。

我遇到过一个经典案例:用户说“复制大文件到服务器只有1MB/s”,抓包一看,TCP层完全没有重传,SMB2 Read响应时间也正常,但紧接着就出现大量零窗口。顺着查下去,发现是服务器上的备份软件在同时进行全盘扫描,把磁盘IO占满了,导致SMB2读数据的处理跟不上。这就是一个“应用层拖垮传输层”的典型。

4.4 常见错误状态码

SMB2不太会用“Connection reset”这种直白的话来告诉你问题,它把错误藏在NT Status字段里。几个实际高频的错误码:

NT Status十六进制含义
STATUS_ACCESS_DENIED0xC0000022共享或文件权限不足
STATUS_LOGON_FAILURE0xC000006D用户名或密码错误
STATUS_BAD_NETWORK_NAME0xC00000CC共享名不存在
STATUS_OBJECT_NAME_NOT_FOUND0xC000003A文件路径不存在
STATUS_SHARING_VIOLATION0xC0000043文件被其他进程锁定

怎么在Wireshark里快速筛出错误包?用显示过滤器:

smb2.nt_status != 0x00000000

这样能过滤出所有返回非成功状态的SMB2响应,再配合Statistics > Endpoints或Conversations看是从哪个IP过来的。如果某个IP大量出现STATUS_LOGON_FAILURE,说明有人在暴力破解密码。如果大量STATUS_ACCESS_DENIED,可能是权限配置问题。

4.5 SMBv1和SMB签名

Windows 10和Server 2022默认都禁用了SMBv1,这是好事。SMBv1是当年勒索软件快速传播的通道之一,也是大量已知漏洞的容器。你在Wireshark里协商阶段能看到协商的Dialect版本,如果是0x0202、0x0210、0x0300、0x0302、0x0311这些,都算SMB2家族。0x0311就是SMB 3.1.1,Windows 10和Server 2022默认启用。

SMB签名是另一个影响性能的点。抓包看Negotiate阶段的“Security Mode”字段,如果客户端或服务器强制要求签名,每个包都要做签名计算,CPU开销会上升,在千兆以上带宽尤其明显。不过现在CPU性能足够强,签名不再是主要瓶颈,而且从安全角度我强烈建议你用组策略强制SMB签名,尤其是连接不应暴露在不可信网络中时。用PowerShell看签名状态:

Get-SmbServerConfiguration | Select EnableSecuritySignature, RequireSecuritySignature Get-SmbClientConfiguration | Select EnableSecuritySignature, RequireSecuritySignature

在抓包里确认签名行为:看Session Setup和Negotiate响应中的Security Mode,有“Signing Enabled”和“Signing Required”两种标记。

5. 分层排错实战:一次共享访问慢的完整排查链路

5.1 现象与初始判断

这段是全文的重头戏,我复现一个真实场景:Windows 10客户端访问\10.10.10.20\share,打开文件时会卡顿5秒,复制大文件速度只有几MB/s。用户报障时通常只会说“网络很慢”,但慢在哪,没有任何证据。

我的第一步永远是先分清“打开慢”还是“复制慢”,因为它们的排查路径完全不同。打开文件慢通常是元数据操作慢,要往Create命令和DNS解析方向查;复制大文件慢是数据通道慢,要往TCP窗口、链路丢包、存储IO方向查。这次用户两个问题都有,那就按从低到高的分层顺序逐个排查。

5.2 从物理层到传输层的检查

物理层和链路层:先确认网卡协商速率。在Windows 10上执行:

Get-NetAdapter | Select Name, InterfaceDescription, LinkSpeed

如果协商速率只有100Mbps,但网卡明明是千兆的,先去查网线和水晶头。这个检查成本最低,但很多人跳过了。

数据链路层:ping通之后,在Wireshark里输入:

arp

看看是否有大量ARP请求或ARP重复应答。如果有,可能是IP冲突或二层环路。

网络层:ping服务器时,用相对时间观察丢包和延迟:

ping 10.10.10.20 -t

如果在Wireshark里看到TCP三重握手本身就有重传,比如SYN发出后隔了1秒才收到SYN-ACK,那问题出在传输层及以下,而SMB2层是无辜的。

传输层:看TCP三次握手。在显示过滤器里输入:

tcp.flags.syn == 1

正常情况下第一个SYN发出后,紧接着就有SYN-ACK回来,时间差应该是毫秒级。如果看到连续几个SYN重传,说明对端根本没有响应,或响应路径上丢包严重。

5.3 顺着SMB2的慢命令找到根因

TCP层正常,那就继续往上传。打开Statistics > Service Response Time > SMB2,按平均响应时间排序。实际排查中我发现Create命令的平均响应时间高达几百毫秒,而Read几乎正常,这说明了“打开文件卡顿”不是数据通道的问题,而是文件打开这个动作被某个额外步骤拖慢了。

继续往下追,按照相对时间逐包往前看,发现每次Create命令发出之前,客户端都会先发一个DNS PTR请求,服务器那边一直在等待PTR查询超时,超时之后才继续后续动作。这个PTR查询是要把客户端的IP反解析成主机名,如果DNS服务器没有配置反向查找区域,或者Windows防火墙拦了DNS流量,每次连接都要等到超时。

这个现象在Wireshark里特别容易看:你会在SMB2的Negotiate或Session Setup命令旁边,看到大量的DNS查询包,而且查的是“10.10.10.20.in-addr.arpa”这种反向记录。显示过滤器可以用:

dns.qry.type == 12

筛选PTR查询。如果看到这些查询后面跟着“No such name”或干脆没响应,就抓到根因了。

5.4 验证修复

修复方式是给DNS服务器添加反向查找区域,或者在客户端和服务器上都加上hosts条目。更简单的做法是调整组策略,让客户端不要强制反查,但生产环境建议正规修复DNS。

修复后重新抓包,还是在同一段复制文件操作中观察。你会发现SMB2 Create命令的平均响应时间从原来的几百毫秒降到了十几毫秒,打开文件的卡顿从5秒变成不到1秒。这个过程就是完整的“抓包 -> 分层定位 -> 修复 -> 验证”闭环。

我特别想强调一点:每次抓包时都养成保存pcapng的习惯,并且在记事本里记下当时做了什么操作、怀疑哪一层、用什么命令。这样修复后再抓一个包,两个文件一对比,效果一目了然。没有这个证据链,问题修没修好全凭感觉,那就不是工程师作风了。

6. 把抓包结果用在安全排查上

6.1 从ICMP流量发现扫描行为

ICMP像一把双面刃,能排障也能被人用于探测。如果你在抓包文件里看到以下特征,要提高警惕:

  • 短时间内有大量不同源IP对同一目标IP发送Echo Request
  • Echo Request的数据净荷长度不标准,比如总是固定的1字节或没有填充字节
  • 包间隔极其规律,比如每秒固定发几个,像脚本在跑

这些特征都可能是主机存活探测或DDoS前的踩点。但要注意一点:ICMP丢包或超时不一定代表攻击,也可能是网络设备策略问题。安全排查要结合上下文,比如同时段Windows安全日志里有没有大量4625登录失败事件,有没有新的共享访问来源。

如果怀疑是ICMP隧道,看净荷内容是否像任意数据。Wireshark支持Follow ICMP流,但更直接的判断是Echo Request和Reply的净荷明显不是常规字母数字,而是随机字节。遇到这种情况,建议在防火墙上限制ICMP报文大小和频率。

6.2 从SMB2流量发现异常访问模式

445端口在安全圈里是个敏感端口。你在抓包文件里发现以下情况时,通常意味着已经有人在试探这台Server 2022:

第一个特征:大量Session Setup失败。用显示过滤器:

smb2.nt_status == 0xC000006D

然后看Statistics > Conversations,同一个源IP发起了几十次登录请求失败,这就是典型的密码喷洒或暴力破解。这时候回到Windows事件日志,查4625事件,确认是否来自同一IP。

第二个特征:非常规时段的批量Tree Connect加Read。比如凌晨三点,一个源IP反复连接高价值共享,并批量读取文件。这可能是内部数据窃取,也可能是某个备份脚本在跑。通过Wireshark里看Tree Connect命令的目标共享名和Read请求的规模,能快速判断是正常备份还是异常拉取。

第三个特征:SMB版本大幅降级。如果抓包里看到客户端协商到SMB 1.0,也就是Dialect 0x0001或0x0202,而你们环境早就禁用了SMBv1,那需要警惕。要么是配置回退了,要么是某个旧客户端在用旧协议连接。绝对不要以为只是兼容性问题,SMBv1的安全风险太高了,必须关闭。

6.3 抓包在取证中的最小样本原则

安全事件取证时,抓包是重要的证据来源,但要注意方法。我的一般原则是:发现异常后,如果条件允许,第一时间在交换机上做端口镜像,把嫌疑主机的流量完整镜像到一台抓包机上,而不是直接在受害主机上装Wireshark。因为如果主机已经被攻破,你在这个主机上抓的包可能都被恶意软件看到甚至篡改。

另一个原则是保存完整的pcapng文件,不要只保存过滤后的包。取证时需要的是原始记录,过滤后的文件会丢失上下文。抓包机上设置好文件分割,比如每个文件500MB,同时记录抓包起始时间和对应的事件日志ID,方便之后和Windows安全日志交叉验证。

有一次我们在排查内网横向移动时,就是靠pcapng里的一段SMB2会话,把攻击者从A机器传到B机器的具体文件名和时间精确还原了,再配合文件系统访问日志锁定了失陷范围。这比靠防火墙日志干巴巴看几次连接要直观得多。所以,别把Wireshark当排障工具,它同时是你的安全监控和取证利器。

最后说点我自己的习惯。抓包排错这件事,最忌讳的就是“凭感觉抓,乱枪打鸟”。我现在每次抓包前都会先问自己三个问题:现在怀疑哪一层?要给谁看这个包?我要从包里得到什么结论?三个问题都能回答,再开始抓。这几年靠这套方法,帮我在不少“网络慢”“访问不了”的扯皮现场,用一分钟的Wireshark截图终结了争论。如果你也想把这套东西变成肌肉记忆,建议先在实验环境里把ICMP和SMB2的每个流程都抓上十遍以上,等你闭着眼能说出一个SMB2 Create包里的关键字段时,你就真的入门了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询