新闻详情

新闻详情

首页 / 资讯中心 / 详情

Wireshark抓包全解析:过滤器、HTTPS与网络排障

发布时间:2026/10/1 18:15:24来源:尧图网络
Wireshark抓包全解析:过滤器、HTTPS与网络排障
上周帮朋友排查一个内部系统的登录慢问题我从抓包到定位总共花了不到二十分钟而在此之前他已经来回折腾了一整天。这件事让我意识到Wireshark 这类抓包工具真正的门槛不在“会不会点开始”而在于你知不知道自己要看什么、在哪一层看、看到的东西能不能信。很多新手第一次打开 Wireshark看到的是一屏花花绿绿的滚动行几秒钟就晕了然后就去搜各种“一键抓到密码”的教程结果要么抓到的全是自己的广播包要么对着加密流量发呆。这篇东西我想把 Wireshark 抓包这件事从头讲透软件怎么选、网卡怎么挑、过滤器怎么写、抓到的包怎么读、抓不到包的时候往哪个方向排查。同时有一件事必须提前说清楚——我会用我自己搭的测试页面演示“明文表单在包里长什么样”目的是让你真正理解 HTTPS 到底在保护什么而不是教你去截别人的账号。所有演示只在自己完全可控的设备和网络里做这一点是前提不是客套话。1. 先把边界划清楚抓包真正的用途在哪1.1 抓包能解决的三类实际问题抓包本质上是把网卡上流过的数据帧原样记录下来供你逐层拆开看。它的价值集中在三个方向。第一类是排障。接口返回超时、连接被重置、页面加载卡在某个资源上、某个客户端连不上服务端——这些问题的答案几乎都藏在包的时间线上。你能看到 TCP 三次握手是不是完成了、重传了几次、服务端是不是一直没回应、DNS 解析花了多少毫秒。这类问题靠日志和猜是解决不了的因为日志只记录应用层看到的结果而抓包记录的是过程。第二类是学习协议。教科书上讲 TCP 三次握手、四次挥手、TLS 握手看十遍不如自己抓一次。你会发现现实里的握手远比示意图复杂有很多选项字段、有窗口缩放、有选择性确认、有会话复用。这种“看到真实报文”的体验是理解网络分层最有效的方式。第三类是自测。你自己写的 App、自己部署的服务、自己开发的小程序在联调阶段经常出现“本地能通、测试环境不通”的情况。抓一次包问题往往立刻现形——可能是请求头少了一个字段可能是走了 IPv6 而服务端只监听 IPv4。1.2 “抓到网页密码”这件事今天基本不成立网上流传的所谓“抓包抓密码”教程绝大多数停留在十几年前的技术环境里。那时候大量网站还在用纯 HTTP 传表单登录请求就是一个 POST表单内容原样躺在数据包里密码字段连编码都没有。而现在的情况完全不同主流站点早已全站 HTTPS表单内容在 TLS 层就被加密成 Application Data你抓到的只有一串密文。TLS 1.3 进一步把握手过程中的证书也加密了你在包里能看到的只有目标域名SNI和少量元数据。浏览器还会做 HSTS 强制跳转你想退回 HTTP 都没有机会。部分应用还做了证书固定连中间人方式的自测都走不通。更重要的是想拿到“别人的”流量需要在你和目标之间做流量劫持比如伪造网关、伪造接入点。这类操作针对的是别人性质完全变了不属于技术学习的范畴本文也不会涉及任何相关方法。真正需要检查自己账号是否被明文传输的正确做法是看你自己的浏览器发出的包——这属于对自己流量的分析完全正当。1.3 我用于演示的实验环境为了让演示可复现又不越界我用的是最简单的自建环境一台我自己的笔记本跑一个静态页面服务另一台我自己的设备去访问它。页面就是我随手写的一个登录表单账号密码是随便填的假数据。服务端用 Python 自带的静态服务器就够cd ~/lab-site python3 -m http.server 8080然后把另一台设备连到同一个局域网访问http://笔记本IP:8080/login.html。这样做的原因很实际如果你在 Windows 本机上访问127.0.0.1默认网卡抓不到必须额外启用 Npcap 提供的回环抓包适配器多一层麻烦。用两台设备走真实网卡包一定抓得到新手不容易在第一步就卡住。注意实验页面里请填假数据。即使是自己的环境养成不输入真实凭据的习惯比记住任何技巧都重要。2. 安装与网卡选择这一步决定后面顺不顺2.1 Windows 下安装有三个选项必须看Windows 安装包从官网下载安装过程中会附带一个底层抓包驱动组件它才是真正从网卡拿数据的那一层Wireshark 只是解析和展示。安装向导里有几个选项值得停下来看一眼第一是驱动兼容模式选项勾上之后能兼容一些老的抓包程序如果你还要用其他同类工具建议勾选。第二是是否安装 USB 抓包组件不做嵌入式或外设调试的话可以不装装了会增加一个额外的驱动。第三是安装路径和快捷方式随意。有一个坑值得单独提有用户反馈过在使用拨号方式上网时出现蓝屏最终定位到的是底层驱动与某些网卡驱动版本共存时的兼容问题。遇到这种情况的处理顺序是先把驱动组件升级到最新版再更新网卡厂商的官方驱动最后才考虑临时卸载驱动组件。抓包工具本身很少是蓝屏的直接原因绝大多数是驱动层的冲突。安装完成后第一次启动界面会列出所有可抓的接口。如果列表是空的九成是驱动组件没装成功重新运行安装包修复一次即可。2.2 macOS 与 Linux 下的权限处理macOS 安装后第一次抓包会提示需要权限安装包自带的权限配置脚本会处理这件事跟着向导走完重启终端就行。无线网卡抓包在 macOS 上需要额外开启监听模式普通模式只能抓到自己设备收发的帧。Linux 下的建议不要直接sudo wireshark。更规范的做法是给底层抓包程序单独授予能力或者把自己加进专门的用户组sudo usermod -aG wireshark $USER重新登录后即可用普通用户身份抓包。这样做的好处是 Wireshark 的解析器长期存在历史漏洞用 root 跑等于把整个系统暴露在解析恶意报文的风险下降低权限是实打实的加固。2.3 选错网卡是新手第一大坑接口列表里的条目比想象中多有线网卡、无线网卡、蓝牙、一堆虚拟网卡、容器网桥、回环。选错一个结果就是“界面一片安静一个包都不动”。判断方法很直观选中某个接口后列表里会显示实时的流量波形。随便打开一个网页波形有明显起伏的那个就是你正在用的网卡。另外几个经验同时插了有线和无线时系统可能只走其中一条看路由表或直接两个都抓对比一下。虚拟机里的网卡要选桥接模式对应的那个适配器选到宿主机的物理网卡是抓不到虚拟机内部通信的。抓本机回环流量必须用驱动组件专门提供的回环适配器普通网卡看不到127.0.0.1的包这是很多人“明明有请求却抓不到”的原因。提示接口列表里的中文名称有时会显示乱码或过长可以点“管理接口”把不常用的接口隐藏掉只留你真正会用的两三个后面抓包效率高很多。3. 过滤器是效率的分界线3.1 两种过滤器别混着用Wireshark 有两套完全不同的过滤语法新手最容易在这里翻车。捕获过滤器在抓包开始之前设置直接告诉网卡驱动“只把符合条件的包交给我”。它的好处是从源头减少数据量适合长时间抓包代价是没抓到的包永远丢了事后无法补救。语法是 BPF 风格比如host 192.168.1.50 and port 80。显示过滤器在抓包之后作用包已经全收进来了只是屏幕上只显示符合条件的。它的好处是随时改条件、原始数据一个不丢代价是遇到大流量时内存和磁盘压力大。语法是 Wireshark 自己的表达式比如http.request.method POST。我的习惯是短时间精确定位用显示过滤器;大于十分钟的长时间抓包一定先用捕获过滤器把范围收窄比如只抓某台主机的某个端口。3.2 日常排查最常用的表达式速查我想看什么显示过滤器写法说明某台主机的所有流量ip.addr 192.168.1.50收和发都会命中某个端口的通信tcp.port 8080不区分方向只要 HTTP 请求http.request响应用http.response定位某个 POST 请求http.request.method POST表单提交一般就是它按域名过滤请求http.host contains example只在明文 HTTP 有效看 DNS 查询dns排查解析慢很有用找重传tcp.analysis.retransmission判断链路质量找握手被拒tcp.flags.reset 1服务端拒绝或连接被中断只看 TLS 握手tls.handshake看协商版本和套件排除本机噪声!arp !icmpv6减少干扰写表达式时有个小技巧直接在输入框里敲字段名的前几个字母Wireshark 会给出自动补全列表点一下就能看到该字段支持的运算符和取值比你翻文档快得多。输入框变绿说明语法正确变红就是写错了。3.3 着色规则和时间显示让流量一眼看懂默认配色已经把 TCP 重传、握手失败、HTTP 错误标成了红色和黑色建议保留并再补几条自己常用的。比如把目标端口是业务端口的包统一标成浅黄把 DNS 标成浅灰滚动的时候眼睛就不用一行行读了。时间列的显示方式也值得改。默认是绝对时间戳排查时更实用的是相对时间右键时间列改成“相对显示”第一条包作为零点后面全部是相对毫秒数。判断“响应慢了 200 毫秒”还是“快了 2 秒”一眼就能看出来。还有一个容易忽略的开关是名称解析。打开后会尝试把 IP 解析成域名看起来友好但它会往流量里插入额外的 DNS 查询包还可能引入解析延迟导致时间线失真。我一般排查性能问题时关掉梳理业务调用关系时再打开。4. 实战拆解明文表单和加密会话差在哪4.1 搭一个只有我自己能访问的测试页面页面本身非常简单就是一个表单form methodPOST action/submit input nameusername typetext input namepassword typepassword button typesubmit登录/button /form注意这里没有任何加密走的是纯 HTTP。这正是十几年前大量网站的真实状态也是所有“抓密码”教程得以成立的前提条件。我用它做演示是为了让加密的价值变得具体可见。在另一台设备上打开这个页面Wireshark 选中有线网卡开始抓包然后在页面里填入假账号假密码提交。4.2 一次明文提交包里到底能看到什么停止抓包后在显示过滤器里输入http.request.method POST回车。列表里会只剩下一到两条记录找到你刚才提交的那一条右键选择跟踪流选择 HTTP 流。弹出的窗口会把这条 TCP 连接上的双向数据按顺序拼成一整段文本。你会清楚地看到请求行、各个请求头以及空行之后的请求体——也就是表单内容。usernametest和password123456原封不动地躺在那里连解码都不需要。如果服务端用的是基础认证用户名和密码会以 Base64 形式出现在请求头里同样是可逆的随手就能还原。看到这里你应该有感觉了所谓“抓包抓到密码”原理上一点都不神秘它成立的条件就一个——传输过程没有加密。任何中间环节只要能拿到这些包内容就是公开的。4.3 换成 HTTPS 之后同样一次登录变成什么样给同一个站点配上证书改用 HTTPS 再访问一次重复同样的操作。把显示过滤器改成tls看看列表里剩下什么。你能看到的只有这些客户端发出的 Client Hello里面包含了支持的加密套件列表和服务器名称指示字段服务端的 Server Hello协商出的版本和套件证书信息TLS 1.3 下这部分也进了加密区之后就是一条条长度各异、内容完全不可读的 Application Data 记录。同样的提交动作同样填了用户名密码但你在包里再也找不到任何明文痕迹。这不是 Wireshark 能力不够而是密码学在正常工作。想要解开这些内容需要拿到会话密钥而会话密钥在握手中通过非对称算法协商除了通信双方第三方在计算上无法获得。4.4 想解密自己的流量有一条正当路径如果你确实需要查看自己浏览器发出的加密内容——比如调试自己开发的接口——有个业界通用的做法设置一个环境变量让浏览器把会话密钥以特定格式写入本地文件然后在 Wireshark 的 TLS 协议设置里把这个文件路径填进去。之后 Wireshark 就能解密由这个浏览器产生的这部分会话。这条路径的关键限制必须说清楚它只对你自己机器上那个浏览器产生的会话有效而且只对设置了变量之后新发起的连接有效。抓到别人的密文接上这个密钥文件是没用的因为密钥根本不同。这也从另一个角度解释了为什么现代站点上的账号信息不可能通过抓包被第三方拿到。结论收一句在今天的技术环境下抓包抓到网页明文密码的场景基本只剩下两种——内网里没人维护的老系统以及开发者自己写着玩的服务。如果你在真实业务系统上抓到了明文那不是抓包技巧好而是那个系统该修了。5. 抓不到、卡住、崩溃高频问题怎么排5.1 抓到了一堆包但想看的内容不在里面这是最典型的一类“伪失败”。包其实抓到了只是你过滤条件写错或者看的位置不对。现象常见原因处理方式全是自己的广播和邻居发现包选中的接口不是业务实际走的网卡换成实时流量有波动的那个接口只有自己的包看不到其他主机之间的通信你现在接的是交换机单播流量不会泛洪给无关端口只能抓自己设备收发的包这是网络设计的正常行为有请求没响应服务端确实没回、被防火墙丢弃、或目标端口不通结合tcp.analysis系列过滤器看重传和重置看不到表单内容站点走的是 HTTPS加密流量本来就看不到属正常抓不到本机内部调用回环流量需要专用适配器启用驱动组件提供的回环接口有一类需要特别提醒在交换机环境下你坐在自己的工位上天然只能看到与自己相关的流量。想看到全网流量需要网络设备侧配置端口镜像这属于网络管理员的运维操作需要明确的授权和规范流程不是个人能随手做的事。5.2 卡住、打不开、崩溃的处理顺序Wireshark 在几种情况下会出现界面无响应一是包速率太高列表刷新跟不上二是显示过滤器写得过于宽泛同时又开了大量着色规则三是磁盘写入跟不上尤其是抓包文件放在机械盘或网络盘上。应对办法很直接先停止抓包再慢慢分析。抓包期间关掉实时滚动勾选“自动滚动”取消能省很多刷新开销。如果每秒包量确实很高先用捕获过滤器收窄比如只抓某个端口。打不开的情况多半和配置有关。配置文件损坏会导致启动卡在加载界面解决办法是找到用户配置目录把里面最近的部分配置文件临时移走让软件用默认配置启动再逐个恢复。这种排查方式比反复重装快得多。5.3 无线、USB、音视频这几类特殊场景无线抓包对硬件有要求。普通无线网卡在常规模式下只能抓到自己关联的网络的帧想抓管理帧或做更全面的分析网卡必须支持监听模式而不少消费级网卡在这个功能上支持有限。新一代的独立无线网卡模块在监听能力和频段覆盖上会好一些选择前建议先查清楚具体型号对监听模式的支持情况。USB 抓包需要单独安装对应的组件抓的是 USB 总线上的数据和网络抓包是两套完全不同的解码体系。做外设调试时很有用但要注意 USB 设备在传输层往往还有自己的加密或私有协议抓到原始字节只是开始。音视频流是另一个常见需求。用实时传输协议传输的音视频抓到之后需要手动指定解码方式才能把这条流转成可播放的文件。做法是在某一条流上右键选择解码为对应的协议类型然后在电话或语音菜单里把流提取出来导出。这一步新手容易漏看到一堆 UDP 包就以为抓失败其实内容都在只是没告诉软件怎么解读。6. 把抓包用成生产力长时间与自动化6.1 长时间抓包的两个保命配置连续抓几个小时甚至几天光靠内存肯定撑不住。正确做法是启用环形缓冲设置每个文件的大小上限和最多保留的文件数量写满一个自动切下一个超出数量的最老文件被覆盖。举个例子设置每个文件 100 MB、最多保留 20 个那么占用上限就是 2 GB滚动覆盖既能保证设备不被打爆又能在问题发生后回溯最近一段时间。配合捕获过滤器把范围收窄这个方案可以稳定跑很久。命名规则建议用时间戳加序号方便事后定位“问题发生在下午三点左右”时直接翻到对应文件。同时把注释功能用起来分析时看到关键包就加个标记或写一行注释换台机器打开依然能看到比在聊天窗口里贴 IP 靠谱得多。6.2 命令行与脚本化什么时候该放弃图形界面图形界面适合交互式排查但批量处理和定时任务就得靠命令行工具。底层命令行程序在安装时已经一起装好了它能干的事和图形界面基本一致还能直接输出成表格或 JSON方便用脚本继续加工。tshark -i eth0 -f tcp port 8080 -a duration:60 -w capture.pcapng tshark -r capture.pcapng -Y http.request.method POST -T fields -e ip.src -e http.host第一行是抓 60 秒、只抓 8080 端口的流量存成文件第二行是把文件里所有 POST 请求的源地址和主机名提取成两列。这套组合在需要定期采集、汇总分析时特别顺手。用 Python 调用的封装库也有人用但这里有个明显的坑大量老教程基于 Python 2.7 编写而那个版本早已停止维护很多环境里装完根本跑不起来。现在应该直接上 Python 3.8 以上并且注意库本身不负责抓包它只是调用底层命令行程序所以环境变量里的程序路径必须配置正确否则会报找不到可执行文件。6.3 移动端流量的观察思路移动端排查的思路和桌面完全一致区别只在“怎么让流量经过你能抓的地方”。常见做法是让手机和电脑处在同一个局域网再把手机的流量引导到电脑上然后用抓包工具观察。需要提前有心理预期的是现在的主流应用大量使用加密绝大多数请求在抓包工具里只能看到域名和连接建立过程看不到具体参数。部分应用还做了证书固定连中间人方式都直接拒绝连接。这种情况下正确的方向是找应用自己的调试日志、找服务端的埋点而不是在抓包上死磕。能看到域名和连接时序本身对排查网络问题就已经足够有价值了。7. 我踩过的坑和几条硬经验7.1 关于“抓密码”这件事几个必须澄清的误区第一个误区是认为抓包工具能“破解”加密。抓包工具只做记录和解析不具备任何密码学破解能力。TLS 保护的内容除非你能提供会话密钥否则永远是一串密文。任何号称能直接还原 HTTPS 密码的工具要么在骗你要么是在诱导你装别的东西。第二个误区是把过滤器写错当成“抓不到”。我见过太多次明明包就在列表里只是过滤条件写反了方向或者字段名拼错了。写表达式时先看一眼输入框的颜色绿色再回车能省下大量时间。第三个误区是忽视抓包位置。你抓到的永远只是“流经你选中网卡的那部分流量”这个范围既受网络拓扑限制也受网卡本身状态限制。理解了这一点很多“为什么抓不到”的疑问会自己消失。7.2 几条省时间的操作习惯抓包前先想清楚三个问题要抓哪台设备、哪一层的问题、大概什么时候发生。这三个问题想明白了接口、捕获过滤器、时间窗口自然就定了。抓包时先看统计再看细节。协议分层统计能告诉你这个文件里都有哪些协议、各占多少比例会话统计能直接按流量大小排出前几名通信对端。有了这两张图你再去翻具体的包方向会清晰很多。分析完立刻保存一份只包含关键包的过滤结果。原始的几百兆文件留着占地方又容易泄露信息把关键的那几十个包导出成单独文件写清时间、现象、结论下次再遇到同类问题时直接复用这比任何笔记都管用。最后再分享一个我自己体会很深的点抓包最大的价值不是“抓到什么秘密”而是让你第一次真实地看到数据在网络里长什么样。当你能一眼看出三次握手是不是正常、重传发生在哪一段、服务端的响应到底卡在哪个环节时那些原本靠猜的问题就变成了可以计算的问题。这个转变比任何一条神奇的过滤器都值钱。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Java大乱斗闯关游戏源码解析:从主循环到对象池的实战指南 2026/10/1 19:07:50

Java大乱斗闯关游戏源码解析:从主循环到对象池的实战指南

简介:基于Java开发的大乱斗闯关游戏源码,面向具备基础Java语法、希望深入了解游戏开发流程的学习者与爱好者。项目演示了如何利用Swing/JavaFX构建图形界面,通过线程实现游戏循环,并处理角色移动、攻击、碰撞检测等核心逻辑&#…

阅读更多 →
main.py不是屎山,而是深度代理系统的指挥中枢 2026/10/1 19:07:50

main.py不是屎山,而是深度代理系统的指挥中枢

1. 为什么6000行的main.py不是“代码屎山”,而是藏宝图的索引页? 你打开一个叫 Deep Agents Code 的开源项目, main.py 文件右下角显示:6247 行。光标往下滚三秒还没到底,函数名像地铁站名一样密集—— run_agent…

阅读更多 →
6000行main.py解构:CLI状态中枢与Textual响应式架构 2026/10/1 19:07:50

6000行main.py解构:CLI状态中枢与Textual响应式架构

1. 项目概述:当6000行main.py成为你的“代码迷宫”你有没有过这种体验:打开一个开源项目的根目录,第一眼就看到那个刺眼的main.py——文件名朴素得像刚学Python时写的第一个脚本,但点开之后,光是滚动条滑到底部都需要三…

阅读更多 →
Agent Hooks与Checkpointer:让Agent从全自动变为可掌控的工程实践 2026/10/1 19:07:50

Agent Hooks与Checkpointer:让Agent从全自动变为可掌控的工程实践

1. 为什么说Agent需要“人为可掌控” 做了五年React业务开发后转Agent开发,我第一感觉其实是有点恍惚的:以前写前端,数据流完全掌握在自己手里,状态一变页面变,逻辑清清楚楚;写Agent之后倒好,给…

阅读更多 →
Shell多行注释详解:冒号+here-doc的三种方案与避坑指南 2026/10/1 19:07:43

Shell多行注释详解:冒号+here-doc的三种方案与避坑指南

1. 为什么Shell没有原生块注释:先看清这门语言的脾气1.1 从C、Python转过来的人,几乎都会在注释上卡一次很多从C、Java或者Python转过来写Shell脚本的人,第一周都会问同一个问题:Shell里到底怎么给一段代码加多行注释?…

阅读更多 →
bzip2实战指南:压缩率、参数选型与备份场景对比 2026/10/1 19:07:36

bzip2实战指南:压缩率、参数选型与备份场景对比

去年处理一批线上数据库备份任务,我在日志服务器上对着三种压缩命令犹豫了半天:gzip快但是压不狠,xz压得狠但是慢得让人抓狂,轮到bzip2的时候,我发现自己其实已经很久没正儿八经用它干过活了。后来整理服务器清理计划&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉