ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Wireshark抓包入门到实战:过滤器、TCP分析与安全体检

Wireshark抓包入门到实战:过滤器、TCP分析与安全体检 不少刚开始接触Wireshark抓包的朋友第一天的体验基本都一样软件装好了兴奋地选中网卡点下开始按钮眼睁睁看着数据包像水龙头一样哗哗滚动然后脑子一片空白。这不是因为你笨而是还没建立起“先有疑问再抓包最后看证据”的习惯。这篇我就从Wireshark抓包的安装开始把从基础操作到实战分析的完整路径都捋一遍重点放在那些真正决定你能不能抓到东西、能不能看懂东西的细节上。文章适合刚入门的网络安全学习者也适合正在做接口调试、网络排障的运维开发同学很多课堂上和教程里容易跳过的坑我都会直接点出来。1. 装对、装好Wireshark第一次抓包前的三件准备工作很多人以为抓包遇到的第一道坎是命令记不住其实不是第一道坎永远是环境问题。我见过太多新手倒在了安装阶段所以这部分宁可讲细一点。1.1 驱动、权限和安装包里的坑先说一个很多人压根没注意过的概念Wireshark自己其实不会“抓包”——真正负责从网卡上把数据读出来的是底层的抓包驱动。Windows环境下这个驱动叫npcapmacOS用的是系统自带BPF机制Linux则是标准的内核包接口。Windows用户安装Wireshark 4.x时安装向导会弹出来让你装npcap一定要勾选并让它正常安装。如果之前系统里残留过老旧的WinPcap或者npcap安装失败最常见的现象就是抓包按钮是亮的但点了开始之后列表里一个包都不出现。我在新装系统的机器上遇到过两次解决方法很直接去控制面板卸载掉残留的WinPcap然后重新以管理员身份运行一次Wireshark安装包修复npcap再重启电脑。macOS用户虽然没有驱动安装问题但也要注意系统权限。打开Wireshark后如果提示抓不到接口多半是“系统偏好设置→隐私与安全性”里没有允许网络捕获或者需要重新安装Wireshark自带的ChmodBPF服务脚本。具体的选项位置不同版本略有差异但思路一致不要用sudo强行跑Wireshark先把系统权限授权给应用本身。Linux用户用apt装完Wireshark后大概率会遇到这个问题普通用户打开软件能看见接口但点击开始后提示权限不足。解法是把自己加入wireshark用户组然后注销重登sudo usermod -aG wireshark $USER最后强调一点安装来源一定要去官网下载安装包不要在奇怪的第三方下载站点“高速下载”。Wireshark本身是免费开源软件官网安装包体积不大但在第三方站下载很容易被连环套路轻则捆绑一堆流氓软件重则直接装个带后门的假Wireshark这个问题在安全圈里每年都有中招的案例。1.2 选网卡看三个信息IP网段、连接方式、混杂模式环境装好之后第一次打开Wireshark你会看到一堆网卡接口名。选哪个判断依据就三个本机正在用的IP、网卡类型、连接方式。先把本机IP查出来Windows用ipconfigmacOS和Linux用ifconfig或者ip addr。比如结果是192.168.1.105那就回Wireshark主界面找同样IP段的那个网卡而不是看名字带“WLAN”就选。很多笔记本用户抓不到包纯粹是因为插着网线但选了无线网卡两者看到的网络根本不是同一条链路。再说混杂模式。默认情况下网卡只会把发给本机的数据包传给上层应用局域网里别人的包你是看不到的。勾选混杂模式后网卡才会把共享链路上经过的数据也交上来。这个选项在Wireshark的捕获选项里英文叫Promiscuous Mode建议默认勾上。有一个容易误导的说法是“抓包时不要开混杂模式”那是针对极少数特定分析场景的对刚入门的人来说不开混杂模式只会让你丢掉一大截数据。对于虚拟机环境还得额外注意虚拟机里的流量会经过虚拟网卡如果是NAT模式主机上抓到的可能是地址转换后的包路径不直观。做实验时建议先把虚拟机网络调到桥接模式或者直接在宿主机上抓这样看到的是真实IP路径。1.3 第一次抓包实操验证证明你的环境真的通了选好网卡后不需要急着面对恐怖的全流量。我的建议是先做一个最小验证步骤不超过三分钟在Wireshark选中目标网卡点开始。打开命令行ping一下你所在网段的路由器比如ping 192.168.1.1。等ping跑完几条结果回Wireshark停止抓包。在显示过滤器里输入icmp此时应该能看到一组“请求”和“回应”的ICMP包。如果能看到说明你的Wireshark环境已经通了后面学什么都顺。然后把Wireshark主界面的四个区域认一遍最上面是显示过滤器栏下面是包列表Packet List再往下左边是协议详情Packet Details最下面是原始字节Packet Bytes。入门阶段主要盯包列表里的Time、Source、Destination、Protocol、Length、Info这几列其他暂时不用管。这个最小验证比我见过很多直接“抓一把全流量”的教学要实用得多因为抓全流量产生的几百MB文件分析欲望能直接给你浇灭一半。2. 不同抓包场景各有“脾气”回环、远程、无线网卡Wireshark看起来是个窗口但它面对的抓包场景差异很大。不同场景下你该选哪个接口、能不能抓到、抓到了代表什么这层逻辑不搞清楚后面遇到问题就会乱。2.1 本机访问本机回环流量为什么要选Loopback接口本机浏览器访问本机的服务比如访问127.0.0.1上的Nginx流量根本没经过物理网卡只会走回环接口再绕回协议栈内部。如果你盯着以太网卡或Wi-Fi网卡抓一个包都看不见这就成了“抓包失败”第一大原因。正确做法是在Wireshark接口列表里选名字里带Loopback或lo的那个接口。验证方法也很简单起一个本地Web服务然后在浏览器或命令行里访问127.0.0.1回到Wireshark过滤tcp.port 80你就能看到一条完整的TCP三次握手加HTTP请求。要注意回环接口上所有流量都是127.0.0.1没有硬件地址信息写过滤器时用ip.addr 127.0.0.1才好使。2.2 远程服务器没图形界面tcpdump加本地Wireshark的组合线上服务器是不可能有Wireshark图形界面的但排障经常需要在服务器上看流量。标准做法是先用tcpdump在服务器上落一个pcap文件再把文件拷回本地用Wireshark慢慢分析。基本命令很简单sudo tcpdump -i eth0 -w /tmp/cap.pcap -s 0如果需要缩小范围可以提前加过滤条件避免文件太大sudo tcpdump -i eth0 -w /tmp/cap.pcap -s 0 host 192.168.1.10 and port 80抓完用scp把文件拉回本地scp userserver:/tmp/cap.pcap .这里有几个参数要提醒-s 0表示完整捕获每一个包不截断别为了省空间把Payload砍掉否则分析时发现内容断了一半那才是最头疼的。抓包时长也要控制建议先在本地确认问题大概率发生的窗口比如5分钟或10分钟然后用timeout工具限制时长timeout 300 tcpdump -i eth0 -w /tmp/cap.pcap -s 0 host 1.2.3.4这样就算你忘了停止它也会自动收工不会把服务器磁盘塞爆。每次遇到“Wireshark怎么抓包”这个问题我都建议服务器场景先学tcpdump因为它够快、够省资源而且和Wireshark无缝衔接。2.3 Wi-Fi、USB和手机App的抓取边界Wi-Fi环境是新手最容易产生误解的地方。普通笔记本无线网卡工作在Managed模式只能捕获本机和当前连接Access Point之间收发的数据帧并不能把整个Wi-Fi网络里其他设备的流量都收进来。想实现后者必须网卡硬件支持并手动开启Monitor模式。很多网传的“用Wireshark抓Wi-Fi内别人的包”是硬件都不支持的操作技术上就站不住脚。如果你确实需要做无线安全分析应该在授权范围内找一张支持Monnitor模式的USB网卡来实验。Windows下想抓USB流量Wireshark默认不带这个能力需要在安装时额外勾选USBPcap组件之后会多出一个USBPcap接口。日常抓手机App的包则更推荐代理方案让手机连接电脑所在网络然后在手机上把HTTP代理指向电脑IP电脑上用Wireshark对着对应网卡抓包即可。这里有人会拿Wireshark和Fiddler、Charles对比简单说两句后两者在HTTP/HTTPS调试上确实方便但Wireshark覆盖面更宽、更贴近底层网络协议两者定位不同不存在绝对替代关系。3. 过滤器用得好不好直接决定你是“看包”还是“烦包”如果说抓包是门槛那么过滤器就是分水岭。同一份pcap文件会过滤的人三分钟能锁定目标包不会过滤的人对着上万个包翻到怀疑人生。这一章是全文的实操核心建议动手跟着做。3.1 捕获过滤器与显示过滤器两种语法千万别搞混Wireshark里有两套过滤体系很多人记不住表达式就是因为把两者混在一起想。捕获过滤器是在开始抓包之前设置的决定“哪些包要被录进文件”使用BPF语法写法很短。比如host 192.168.1.10 tcp port 80 or tcp port 443 not broadcast and not multicast显示过滤器是在抓包结束之后对现有数据做筛选的用Wireshark自己的字段语法功能丰富很多。比如同样的需求显示过滤器长这样ip.addr 192.168.1.10 tcp.port in {80, 443}实战中我更推荐一个策略抓包时用尽量宽松的捕获过滤器甚至干脆不设让Wireshark把流量全部记录下来分析时再用显示过滤器层层缩小范围。原因很简单捕获过滤器一旦在录制阶段把流量滤掉那些没有被记录的包就永远消失了后面想找任何线索都没有机会。只要磁盘和性能扛得住宽录窄查才是保底思路。3.2 高频显示过滤器速查表与组合逻辑下面这张表就是我在日常分析里最常敲的表达式建议直接收藏过滤表达式作用适用场景ip.addr 192.168.1.100显示与某个IP相关的双向流量定位某台设备的所有通信ip.src 1.2.3.4只看来源为某IP的包聚焦某个特定来源的流量tcp.port 443只看TCP端口443流量排查HTTPS连接udp.port 53只看DNS请求和响应排查域名解析http显示所有HTTP请求/响应调试本地Web或明文网络服务dns.qname contains example.com显示包含特定域名的DNS查询追踪某个域名何时被访问frame contains password在原始数据帧里搜关键字查找明文敏感信息出现在哪些会话里tcp.flags.syn 1 tcp.flags.ack 0只看SYN包识别扫描行为tcp.analysis.flags显示被Wireshark标记为异常的TCP包疑似丢包、重传、乱序问题tcp.analysis.ack_rtt显示TCP往返时间可以排序定位高延迟的TCP连接这些表达式可以自由组合布尔逻辑用and、or、not加括号。比如“某个IP在非80端口上的HTTP流量”就写成http ip.addr 192.168.1.100 tcp.port 8080新手最容易犯的错误是手敲字段名时大小写弄错。Wireshark字段名绝大部分是小写比如ip.addr不能写成IP.Addr。不想记也行最省事的方式是右键点击包列表里的任意字段选择“作为过滤器应用”或“准备过滤器”Wireshark会自动把严谨的表达式填好你只需要在后面追加逻辑条件。3.3 好用的不止过滤器着色规则、专家信息和统计视图过滤器能帮你快速缩范围但如果你连“这堆包整体上是否异常”都不知道直接往包里扎反而效率低。养成三个习惯很有用。第一看包列表的颜色。Wireshark默认有一套着色规则TCP握手相关包是浅蓝色HTTP是绿色TCP异常比如RST是黑色带红字看到成片的黑色或大面积的TCP重传先警惕。第二打开“分析→专家信息”。这个窗口会把所有包按错误、警告、注意、聊天分组汇总。排障时我第一个看这里如果有大量“TCP RST”“重复ACK”“Out-of-Order”之类的告警基本问题就在那里不需要自己人工翻半天。第三用“统计→协议分级”和“统计→会话”快速建立全局概念。协议分级会按协议类型给出流量占比平时一个办公网络里TCP、UDP、DNS的占比大致有规律突然冒出一个你不认识的未知协议占了大头多半有蹊跷。会话窗口则会按IP对显示双方交换的数据量一台内网机子和一个你从没见过的外网IP交换了数百MB优先级立刻提上来。4. 实战一抓包分析HTTP接口把“为什么慢”问到底光会看包列表还不够抓包分析真正值钱的地方在于能回答“某个接口为什么慢”“某个请求为什么一直失败”这类问题。这里我用一个最经典的HTTP排障场景完整走一遍。4.1 用追踪TCP流还原一次完整请求先在显示过滤器里输入http然后在包列表里找到任意一个HTTP包右键选择“追踪流→TCP流”英文是Follow TCP Stream。Wireshark直接把整个TCP连接里的请求和响应拼接显示出来从请求行到响应头从Cookie到响应体一屏看全。我有个朋友排查“浏览器访问页面要等10秒”的问题一开始怀疑后端代码写差了但在TCP流里看了不到半分钟就发现接口本身的200响应很快慢的是后面加载的一个图片资源服务端处理该图片时迟迟不返回字节。这就是看流的价值——把宏观“太慢”落实成具体哪个请求、哪个阶段慢。如果流内容出现乱码一般是因为传输内容经过了gzip压缩或本身就是二进制文件。这时候不用纠结可视化改看响应头字段比如Content-Encoding是不是gzipContent-Length的大小是否符合预期往往也能定位问题。4.2 用三个时间段拆分一次请求的耗时一次普通的HTTP访问可以拆成三个阶段分别对应不同的耗时逻辑DNS解析时间从DNS请求发出到收到DNS响应的时间差。TCP握手时间从SYN发出到收到对端SYN-ACK的时间差这基本等于网络往返时延。数据响应时间从握手完成到收到首个HTTP响应数据的时间近似等于服务端处理时间。在实际操作中选中两个包看时间列差值就行或者用“统计→流量图”把整条流程画出来阶段之间的关系一目了然。把慢请求按这三段一拆问题责任方立刻清晰现象原因方向DNS解析耗时超过几百毫秒本地DNS服务器慢、缓存失效、递归查询异常SYN发出后迟迟等不到SYN-ACK中间链路延迟大、防火墙丢包、对端负载过高SYN多次重传后才收到SYN-ACK中间链路丢包严重可能存在线路拥塞TCP握手很快但响应数据迟迟不来服务端应用处理慢问题在应用层这个方法不仅适用于HTTPMySQL连接、RPC调用、WebSocket建连统统可以套用。调研一个远程调用慢的问题只要把两端的抓包时间戳对上到底慢在网络的哪个环节一秒就能定性。4.3 HTTPS流量一片密文SSLKEYLOGFILE的调试玩法现在明文HTTP越来越少抓包看到的全是TLS层密文展开来看全是“Application Data”这种数值。这不是抓包没用而是你需要一个合法的调试手段。如果你只是想查看自己浏览器发出的HTTPS内容可以用环境变量SSLKEYLOGFILE让浏览器把TLS握手过程中的会话密钥写到一个日志文件Wireshark读到这份日志后就能在TLS层“解密”展示HTTP明文。具体步骤在系统环境变量里新建一个变量变量名SSLKEYLOGFILE变量值指向你计划保存的日志路径比如C:\tmp\sslkey.log。彻底关闭并重新启动Firefox或Chrome。在Wireshark里打开“编辑→首选项→协议→TLS”在“(Pre)-Master-Secret log filename”里填同一个路径。重新抓包TLS下面的HTTP内容就能看到了。这个方法的边界要清楚它只能解密你自己浏览器产生的流量而且日志文件一旦丢失那批抓包文件里的密文就再也解不开了。另外该文件里包含敏感密钥不要把抓包文件和密钥日志一起外传生产环境千万不要随便开这个变量调试自己的开发环境就好。5. 实战二用Wireshark给内网做一次基础流量安全体检既然是“网络安全入门必学”光会排障还不够还得学会用Wireshark发现网络里的异常。这里分享三个入门级的检查方向全部可以在自己搭建的测试环境里复现。5.1 ARP这一层同一个IP怎么会有两个MAC地址ARP是局域网里最容易做手脚的一个协议但它也特别适合用Wireshark做基础体检。原理很简单测试环境里一台主机A发出广播“谁有192.168.1.1的MAC”正常情况下只有网关来应答。如果有一台主机也在冒充网关并回复自己的MAC地址那么你的抓包里就会出现一个很扎眼的现象同一个IP地址对应了多个不同的MAC地址。定位操作显示过滤器输入arp然后在包列表里加一列“源MAC”字段观察来自同一个IP的ARP响应是不是对应着不同MAC。想更自动化一点可以用“统计→端点”里的MAC标签页查看一个IP关联哪些MAC。还有一种情况是ARP请求风暴。正常网络的ARP请求频率很低如果你在抓包里看到每秒几百上千条ARP请求/响应说明有人在跑扫描工具或者在做ARP泛洪。遇到这种情况先断开可疑主机的网络再根据MAC对照交换机端口表定位物理位置。5.2 从DNS流量里嗅出不对劲的域名DNS是大多数恶意通信绕不开的入口所以分析DNS流量是安全入门的重要内容。显示过滤器输入dnsWireshark会把所有DNS请求和响应列出来重点看查询名qname那一列。有几种DNS特征值得警惕域名是随机字母数字拼接、子域名长到异常、短时间内对同一个域名发起大量形式不同的查询、大量DNS响应状态是No such name即域名不存在。正常用户的DNS查询很规整突然冒出一堆机选风格域名不是广告SDK在搞怪就是有程序在试探域名解析甚至可能在搭建DNS隐蔽隧道把数据编码在查询名中做远程通信。通过dns.qname contains过滤可以快速对比基线。做这类分析时最好能先有一个“这台机器平时查哪些域名”的基线数据异常域名通常是与基线偏差最大的那部分而不是某个特定域名单。5.3 SYN扫描和暴力破解的初步识别安全体检还有一个必备动作就是看TCP连接建立阶段的异常扫描行为。显示过滤器tcp.flags.syn 1 and tcp.flags.ack 0出来的都是只发SYN不带ACK的包。一个正常客户端访问服务端不会一口气对同IP的成百上千个端口发SYN所以一旦这个过滤器结果出现“一对多”的分布很可能是在被端口扫描。暴力破解的典型特征是大量建立连接后又快速断开伴随大量HTTP 401等认证失败响应。配合过滤表达式http.response.code 401再对来源IP做统计基本能锁定暴力破解的源地址。这里要郑重说一句以上安全分析手段全部用于自己搭建的测试环境、自有设备或者明确授权的安全测试场景不要对着不属于你的网络做任何扫描和抓包分析。Wireshark只是取证和分析工具它能记录证据不会拦截异常流量。真要防御还得靠防火墙、入侵检测系统联动这个定位从第一天就要清楚。6. 几个直接影响体验的实用设置和常见坑最后这部分更像是我自己踩坑攒下来的操作笔记每一条都能让后续使用体验明显改善。6.1 时间戳不对理解两种时间显示才会排障很多新手第一眼看见Wireshark的时间列会愣住怎么从0.000000开始其实是默认的“自捕获开始以来的时间”它适合看包与包之间的间隔不适合对表日志。排障时想和服务器日志对齐就需要切到“视图→时间显示格式→日期和时间”。如果你日期时间显示的内容和本地时间相差8小时那是时区没设置。到“编辑→首选项→外观→时间”里把时区设置成Asia/Shanghai。这个小细节能避免一大半日志对不上的问题。6.2 给IP加地理位置标签GeoIP配置经常做安全分析的人都想一眼看出流量来自哪个国家这需要给Wireshark配置GeoIP离线数据库。操作路径下载一份GeoLite2-City.mmdb格式的离线数据库请从可信来源下载然后在“编辑→首选项→名称解析→MaxMind数据库路径”里指定这个数据库所在目录并勾选IP地理信息解析。配置完成后数据包详情里IP层会显示地理位置端点窗口也能按国家维度分组统计。这个配置的实际体验提升非常大尤其是处理“办公室里大量流量非预期地涌向某个海外IP”这种问题时少一个全世界一个个查数据库的步骤结论出得更快。6.3 把藏在流量里的文件取出来导出HTTP对象Wireshark能把HTTP会话中传输的实际文件直接导出来操作路径是“文件→导出对象→HTTP”。在弹出的列表里Wireshark会列出每个HTTP响应中传输的内容支持逐个保存或全部保存。在做安全分析时这个功能相当顺手。比如一个可疑网站给终端下发了一个压缩包你不需要人工从十六进制字节里还原文件直接导出然后放到沙箱环境里分析即可。SMTP等协议也有对应的导出对象选项遇到“从流量里取文件”的需求都优先看这里。6.4 常见问题速查表现象可能原因处理方式点开始抓包后一个包都没有权限不足/npcap驱动没装好/选错网卡管理员运行修复驱动换网卡试只能看到ARP等广播包混杂模式没开或主机不在同广播域检查混杂模式检查网络接入方式数据包内容全是乱码加密流量或压缩内容看TLS层或配置解密密钥打开pcap文件特别卡文件太大、包太多用显示过滤缩小范围导出后再分析本机访问本机抓不到包选了物理网卡没选回环选Loopback接口手机App的包抓不到没走代理/证书校验或SSL Pinning配置代理并安装证书调试环境关闭校验最后再多说一句关于“抓包习惯”的事。玩了这么多年Wireshark我最大的体会是真正高效的分析绝大多数时间花在“想清楚要验证什么问题”上而不是“多会几个按钮”。每次上手抓包之前先把过滤表达式想好并写好抓完先扫一眼专家信息和统计视图再深入包级细节。这套流程能让你在半小时内搞定别人折腾一下午的网络问题也希望能帮你把Wireshark真正变成观察网络世界的那双眼睛。
返回列表