首页 / 资讯中心 / 文章详情

Wireshark零基础抓包实战:从安装到看懂TCP三次握手与HTTP请求

Wireshark零基础抓包实战:从安装到看懂TCP三次握手与HTTP请求 ★ FEATURED ARTICLE
打开Wireshark的第一分钟很多人是懵的。满屏滚动的数据包、密密麻麻的十六进制、陌生的协议缩写界面像飞机驾驶舱。但别被它吓住——Wireshark本质就是个“网络行为录像机”把经过你电脑网卡的每一个数据包如实记录下来再翻译成你能看懂的协议语言。这篇文章要做的就是零基础保姆级带跑一遍从下载安装、选网卡、抓出第一个包到看懂TCP三次握手和HTTP请求再到拿它排查一次真实的网络故障。全程不需要任何前置经验你只要能双击图标、会打开命令行就够了。我最早学Wireshark时走了不少弯路这篇就是想把这套工具最基础、最高频用的那20%功能一次讲透让你看完就能上手用起来。1. 先搞懂Wireshark抓的是什么一切从“旁观”开始1.1 数据包就是网络上的快递包裹网络通信说穿了就是把数据切成一小块一小块外面套上不同协议的外壳再从一个设备发到另一个设备。这每一小块就叫一个“数据包”就像快递包裹有寄件地址和收件地址IP地址有对应具体应用的端口比如80是网页、53是DNS解析还有内容Payload。一个网页、一条消息、一次接口调用底层都会被拆成几十上百个这样的小包按顺序发出去再在对面拼起来。Wireshark做的事就是让电脑网卡进入“混杂模式”。正常情况下网卡只接收发给自己的数据帧就像收发室大爷只认本单位的信。混杂模式一开大爷变勤快了所有路过的信封他都拆开看一遍、登记一下再放行。Wireshark就是那个“登记处”它把网卡拷贝过来的原始帧解析成你能看懂的协议结构然后在界面上展示出来。这个“旁观”逻辑很重要。Wireshark不主动发任何数据它只做记录和解析不改动网络内容。所以你在自己电脑上用Wireshark抓自己的流量是完全没有副作用的但同时它也只能抓到“经过你这块网卡”的流量抓不到别人电脑发出去、不走你网卡的那些数据。这也是后来很多人认为“Wireshark啥都能抓”的误解源头等下第7章我会专门说。1.2 零基础学它到底图什么我见过不少新手问同一个问题“我又不是网管学这个有啥用”说实话越是这种想法越建议学一下因为它的价值远超“网管专用工具”这个标签。第一学网络协议最直观的方式。TCP/IP协议栈、三次握手、DNS解析、HTTP请求这些概念书里讲一百遍不如你在Wireshark的包列表里肉眼看一遍。协议不是抽象概念它就是一行行带时间、带IP、带摘要的真实记录看一眼就终身难忘。第二排查网络问题最有说服力的方式。网页打开慢、游戏掉线、接口偶发超时、设备连不上Wi-Fi这些都是网络问题。与其靠猜“是不是DNS慢了”“是不是防火墙拦了”不如抓包看现场。Wireshark能把“网络层到底发生了什么”这件事变成铁证省去无数扯皮。第三切安全分析和后端调试的必修课。抓包分析是网络安全分析的基本功也是接口联调时定位“参数到底传没传过去”的终极手段。这篇文章就是写给完全没抓过包的零基础读者目标很明确只讲最常用、最高频的那20%功能把这部分吃透你日常使用就够用了。2. 安装与启动先避开几个劝退新手的坑2.1 Windows安装Npcap才是关键很多新手在Windows上装Wireshark一路点“下一步”结果打开后找不到网卡或者抓包时提示没权限然后就卡在第一步。说实话安装这一步最关键的其实不是Wireshark本身而是它依赖的抓包驱动。Windows下Wireshark抓包依赖Npcap这是让网卡进入混杂模式、从底层捕获原始数据包的驱动程序。安装Wireshark时向导会弹出来让你装Npcap一定不要跳过。安装Npcap的过程中有一个选项“Install Npcap in WinPcap API-compatible Mode”建议勾选。这个兼容模式能让老工具正常调用新版驱动属于宁可用不到也别不勾的稳妥选项。两个高频坑先打预防针。第一个旧电脑上以前装过WinPcap的装新版Wireshark前最好把旧的卸干净。Wireshark 3.x之后默认基于Npcap两套驱动混着装容易出现接口列表空白或者抓包报错这种玄学问题。第二个Wireshark图标双击后如果抓包时提示无法访问接口或者网卡列表是空的99%是因为没管理员权限。右键图标选择“以管理员身份运行”这个问题基本就消失了。这不是Wireshark设计不合理而是Windows对底层网络驱动的权限管控就是如此。Mac和Linux相对省心一些。Mac装完直接能用不需要额外驱动。Linux某些发行版装完Wireshark后当前用户可能没有抓包权限需要把用户加入wireshark用户组并重新登录或者临时用sudo运行这个细节发行版文档里都有遇到了查一下就行。2.2 打开界面你只需要盯住这几个地方启动Wireshark后你会看到首页列出当前电脑的所有“网络接口”。内网有线网卡、Wi-Fi无线网卡、蓝牙适配器、虚拟机虚拟网卡……都会出现在列表里。Windows上通常叫“以太网”和“WLAN”Mac上叫“Wi-Fi”Linux上叫eth0、wlan0之类的名字。这里面有一块尤其值得新手记住回环接口。Windows上叫“Npcap Loopback Adapter”Mac和Linux上叫lo0。它专门用来抓“本机自己的程序访问本机自己的服务”这种流量。为什么要单独提它因为第一次做实验时用回环接口抓包是最干净、最可控的选择不会被局域网广播包干扰后面第3章我会带你在它上面做第一次完整抓包。双击接口图标就开始抓包了。进入抓包界面后你会发现窗口分三块最上面的包列表中间的包详情树下面的包字节十六进制视图。新手阶段中间和下面可以暂时不看把精力放在两个地方即可顶部的显示过滤器栏以及上面的包列表。界面顶部还有一个红色鲨鱼鳍图标开始抓包和红色方块停止这俩看清楚操作就不会迷路。3. 第一次抓包从选网卡到看到第一个HTTP请求3.1 选哪块网卡新手最纠结的事第一次抓包最常见的问题是“我到底该双击哪块网卡”。这里给你一个简单判断想抓访问互联网网站的流量就选WLAN或者以太网想抓本机程序访问本机服务的流量就选回环接口。我不建议你一上来就去抓互联网流量。无线网卡上的流量嘈杂得很ARP广播、各种设备连接、后台程序的网络请求几十秒就能刷出几千个包小白根本不知道看哪里。强烈建议第一次实验用回环接口流量完全在本机内部走包量小、协议干净配合过滤条件你能非常清晰地看到一次HTTP请求从连接到响应的全过程。先在小范围内建立“抓包成功”的信心再去挑战嘈杂的物理网卡这个顺序很重要。3.2 完整抓包流程动手做一次比看十篇都强这套流程我拆成五步你跟着做一遍10分钟内就能看到属于自己的HTTP数据包。前提是电脑上装了Python一般Mac和Linux自带Windows可以装一个也可以用任意能监听端口的本地服务替代。第一步打开Wireshark双击回环接口Npcap Loopback Adapter或lo0。此时界面就开始滚包了但流量很杂暂时不用管。第二步在顶部显示过滤器栏输入http回车。顶部过滤栏变成绿色说明语法正确包列表里就只剩HTTP相关流量。这时候列表很可能还是空的——因为你还没发起任何HTTP请求这很正常。第三步打开一个命令行窗口Windows是CMD或PowerShellMac/Linux是终端执行命令python -m http.server 8000这会在你当前文件夹里起一个临时的HTTP服务监听8000端口。命令行会打印出类似“Serving HTTP on 0.0.0.0 port 8000”的提示看到它说明服务起来了这个命令行窗口先别关它要保持运行状态。第四步打开浏览器地址栏访问http://127.0.0.1:8000。浏览器会打开一个文件目录列表页面这个页面本身就是你的HTTP服务返回的内容。第五步回到Wireshark窗口。此时包列表里应该出现了好几个包先是最前面的TCP三次握手然后是HTTP GET请求再然后是HTTP响应。你可以看到Info列里有[SYN]、[SYN, ACK]、[ACK]随后是HTTP GET / HTTP/1.1和HTTP/1.1 200 OK之类的摘要。恭喜这就是你的第一组完整网络对话。没有Python环境的话可以装一个或者用网络调试工具起个临时监听端口实在不行就访问网上少数仍提供明文HTTP的测试地址。但我得提醒你这类明文HTTP测试地址越来越少而且现在浏览器经常自动强制升级HTTPS效果不如本地服务可控。本地起服务这个方案永远是最稳、最干净的练手环境。3.3 停止、保存和重新打开看到目标包之后点击左上角红色方块停止抓包。接下来养成一个习惯先保存再细看。菜单栏选择File → Save As保存成.pcapng格式的抓包文件。这个格式已经是抓包分析的事实标准保存、分享、重新打开都很方便。我建议所有新手把“抓包、保存、分析”三个动作拆开抓包阶段只管抓保存阶段结束抓取然后慢慢分析。现实中很多故障抓包要及时保存否则Wireshark一旦崩溃内存里的数据就全丢了。工作场景下抓包文件是可以反复研究的资产保存好就是给自己留后路。4. 过滤器是灵魂两种过滤器如果不分清后面全乱4.1 抓包过滤器和显示过滤器不是一回事Wireshark有两套过滤器名字只差一个字但完全是两码事新手几乎必混。抓包过滤器Capture Filter在开始抓包之前设置位于捕获选项界面里。它的作用是在数据包进入Wireshark之前就进行“物理过滤”不符合条件的包根本不会被记录。它的语法是BPF风格写的是host 192.168.1.1、tcp port 80这种简短格式不需要字段名。显示过滤器Display Filter在抓包已经正在进行或结束后使用就是顶部那条绿色/红色栏。它的作用是在已经抓到的包里做“显示筛选”包其实都还在内存里只是界面只给你看符合条件的。它的语法是Wireshark自己的表达式格式比如ip.addr 192.168.1.1。最经典的错误是把host 192.168.1.1这种抓包过滤器语法输入到顶部显示过滤栏然后回车看到红色报错“host is not valid”。这个报错我见过新手问得最多。有些教程直接让新手在顶部输入host xxx然后说看报错这对零基础特别不友好。记住这一条顶部那条栏只认ip.addr、tcp.port、http这种字段语法抓包过滤器一般用不到需要“只记录某台机器的流量”时才去Capture Options里写。用一张表总结区别点抓包过滤器显示过滤器设置位置开始抓包前Capture Options抓包过程中或结束后顶部过滤栏底层语法BPF风格Wireshark表达式作用时机抓到包之前就丢弃抓到的包只是隐藏不显示典型写法host 1.2.3.4ip.addr 1.2.3.4会影响保存文件是不符合的包根本不进来否数据都在只是不显示4.2 显示过滤器记住这十几个表达式就够用了显示过滤器才是你日常用得最多的东西。零基础阶段脑子里装下下面这些就够。ip.addr 192.168.1.1 只看和某个IP有关的所有包不区分方向 ip.src 192.168.1.1 只看某个IP作为源地址发出的包 ip.dst 192.168.1.1 只看发给某个IP的包 tcp.port 8000 只看某个TCP端口上的包 udp.port 53 只看某个UDP端口上的包常用来看DNS http 只看HTTP协议包 dns 只看DNS协议包 arp 只看ARP协议包 !arp 不看ARP协议包排除噪声 tcp.flags.syn 1 只看TCP SYN包 http.request.method GET 只看HTTP GET请求 http.response.code 500 只看500状态码的HTTP响应 frame contains secret 只看包内容里包含特定字节串的包组合条件也很有用逻辑运算符就是且、||或、!非还可以用小括号改变优先级ip.addr 192.168.1.1 tcp.port 80 这个IP的80端口流量 (ip.addr 192.168.1.1 tcp.port 80) || dns 这个IP的80端口流量加上所有DNS在过滤栏输入表达式后栏的颜色会给你反馈绿色是语法完全正确黄色是语法能理解但可能有歧义红色是语法错误。先用简单表达式回车后看列表变化再逐步加条件。这套反馈机制很友好慢慢就能建立语感。4.3 不想记语法右键流式过滤法如果你实在记不住语法Wireshark给了你一条捷径右键构建过滤器。在包列表里选中某个包的某一行字段右键菜单里有一项“Apply as Filter”应用为过滤器子菜单再选“Selected”选中项Wireshark会自动用这个字段值生成一条显示过滤器。比如你看到一条TCP SYN包右键它的端口字段自动生成的过滤器就是tcp.port 8000右键源IP字段就生成ip.src 127.0.0.1。我的建议是刚开始完全可以用这种“右键法”建立直觉看着自动生成的表达式多观察它是怎么把字段名和值拼起来的慢慢就能自己手写了。过滤器是Wireshark的半条命你把这节练熟操作效率已经超过很多用了一两年还只会傻傻翻包的人。5. 把包读懂三次握手和HTTP请求10分钟拆给你看5.1 包列表每列都是啥过滤做好后该学会看包了。包列表各列看起来多实际核心就六列No是包序号Time是时间默认从开始抓包那一刻累计的秒数Source是源IPDestination是目的IPProtocol是协议类型Info是一句话摘要。其中最值得看的就是Info列大部分情况下你直接读它就知道发生了什么。Length列有用但一般不用多看某些场景判断“是不是有人发超大包”时才有价值。Info列的聪明之处在于Wireshark已经帮你把最关键的协议信息压缩成了一句话。比如TCP的连接过程就显示[SYN]、[SYN, ACK]、[ACK]HTTP请求就显示HTTP GET / HTTP/1.1HTTP响应就显示HTTP/1.1 200 OK。你的分析起点永远是这一列详情树和十六进制是为深入追查准备的零基础阶段读懂这列就是胜利。5.2 TCP三次握手类比你打个电话用前面第3章的本地HTTP实验你抓到的前三个TCP包正好就是一次标准的三次握手。我带你逐包看一遍。第一个包客户端发出[SYN]翻译成人话就是客户端问服务器“在吗我想建立连接。”第二个包服务器回[SYN, ACK]“在呢连接可以建立收到你的请求了。”第三个包客户端回[ACK]“好确认收到咱们开聊。”三个包一唱一和一个TCP连接就建立了后面紧跟着的HTTP请求就是在这个连接上传输的。这里有个细节Wireshark默认显示的是相对序列号。你看SYN包的Sequence Number是0ACK包也是0或1这不是巧合而是Wireshark为了阅读方便把握手包的起始序号都归零计算了。绝对序号是随机数不方便人眼对比相对序号才是给人看的。如果你抓到一个只有[SYN]发出、永远没有[SYN, ACK]回应的连接那问题就定位在“对方根本不响应你的连入请求”可能是IP防火墙拦截、端口没开、路由不通。这种“只发出去没人理”的包特征是网络排查里极高频出现的信号记住它。5.3 HTTP请求和响应Follow TCP Stream一键看全文三次握手的下一批包就是HTTP层了。Info列里你会看到HTTP GET / HTTP/1.1然后过几行是HTTP/1.1 200 OK。这里有当年让我震撼的瞬间原来网上传的HTTP内容就是纯文本。选中任意一个HTTP包右键选择“Follow”跟踪再选择“TCP Stream”TCP流。Wireshark会把整个TCP连接所有数据按顺序拼起来弹出一个窗口里面就是完整的明文请求请求行、请求头、空行、响应状态、响应头、响应体一目了然。这个功能对理解前后端交互、排查接口传参问题极其有用。如果看的是HTTPS流量Follow TCP Stream看到是一堆不可读的密文那是因为内容被TLS加密了这本身是正常现象不是软件问题。零基础阶段不必纠结解密用你的本地HTTP服务练好明文分析之后要学HTTPS解密再进阶。6. 实战网页打不开的时候怎么用Wireshark定位问题6.1 抓包策略先抓大范围再逐步锁定前面全是基础现在来点真格的。场景某天你访问某个网站或者内部系统页面打不开提示超时或者解析失败。在不清楚问题在哪一环的情况下怎么用Wireshark把问题揪出来我的抓包策略是“先全抓再过滤”。第一轮可以不设抓包过滤器直接选对应网卡开抓同时打开浏览器刷新一次失败的页面然后停止抓包。然后在显示过滤器里输入dns || http || tcp.port 目标端口或者先只看dns把流量范围缩小到你关心的这次连接上。全抓的好处是你不预设“肯定没问题”的环节后面分析不会被自己先入为主带偏。如果访问的服务器IP可以确认再追加一条ip.addr 服务器IP进一步把范围锁死到这台服务器。但注意域名到IP的换算本身也是排查对象所以DNS流量一定不要在你第一次过滤时就排除掉。6.2 三句话判断法DNS、TCP、HTTP逐层排查定位网络问题其实可以简化成“一层一层往下看”每一层都有非常明确的包特征。第一层看DNS。有DNS请求但没有DNS响应那问题大概率出在DNS服务器或域名解析服务上如果连DNS请求都没有说明本地解析配置有问题或者程序压根没走域名解析。DNS查询通常是UDP 53端口协议列显示DNS很好认。第二层看TCP。如果DNS正常、拿到了IP就看TCP连接抓到的包里有没有[SYN]、[SYN, ACK]、[ACK]完整三次握手。只有SYN没有回应多半是服务器拒绝连接或防火墙拦截对应到浏览器就是“连接超时”。三次握手完成了但页面还是打不开那就进第三层。第三层看HTTP层。对于HTTP站点直接看状态码400系列是请求本身有问题500系列是服务器端错误。对于HTTPS站点看到TLS包之后要关注握手过程如果TLS握手在中途失败通常和证书、协议版本、加密套件有关。排查到哪层用显示过滤器就锁定哪层例如dns、tcp.port 443 tcp.flags.syn 1、http.response.code 399。这三句话的判断链路是我觉得新手最快能上手的网络故障排查框架。遇到数据包本身疑点Wireshark还会用一种非常显眼的方式提醒你——典型的“可疑包”会用黑色底、红色字标出来Info列里有明显提示看到别忽略。6.3 统计功能用Statistics菜单快速找重点有人觉得Wireshark只会傻抓包其实它的统计功能非常强排查现场最有用的是这两个。Statistics → Conversations会话统计能列出所有通信双方的流量汇总按发送字节数和接收字节数排序。当你不确定“到底谁在消耗网络”时打开这个面板哪个IP对哪台机器占了大量流量一眼就看到了。Statistics → HTTP → RequestsHTTP请求统计会列出所有HTTP请求每行有请求路径、状态码、响应时间。响应时间是排查“网页慢”的利器页面整体慢看是不是某几个请求耗时特别长如果请求耗时都在毫秒级但页面还是慢那问题就出在前端渲染跟网络无关。我之前帮一位A同学排查接口偶发超时就是在这个面板里看到某个请求耗时到了8秒目标一下子从几十个接口缩小到一个后面再抓包看这个流的具体细节很快就找到是某次查询在特定参数下触发了慢SQL。这种排查思路真的能省一晚上的低效分析。7. 零基础避坑速查五个常见问题与几个好习惯7.1 抓不到包先检查这三样新手最常见的挫败感就是“我明明开抓了怎么一个包都没有”。遇到这种情况按顺序检查三件事。第一权限。Windows下还没用管理员身份运行Wireshark的先关了重开。第二网卡。想抓本机服务却选了WLAN那永远抓不到回环流量想抓物理网卡却选成了虚拟网卡同样一无所获。第三过滤条件。显示过滤器不够严谨比如想抓HTTP但输入了http.request.method POST而你访问的页面恰好是GET列表当然空空如也。先把过滤条件清空看包有没有出现再用排除法锁问题。7.2 HTTPS显示成“TLS”不等于抓不到别被吓退现在打开任何网站基本都是HTTPS你发现Wireshark里没有HTTP明文而是一堆标记为TLS的包。这不是Wireshark坏了也不是加密就彻底没法分析而是内容加密后Wireshark正常展示的是加密记录层。零基础阶段不要跟HTTPS死磕练习用第3章的本地HTTP服务分析公司内网明文接口也行。等你理解了TCP和HTTP基础再去了解TLS解密比如借助SSLKEYLOGFILE记录会话密钥完全是另一个话题到时候你会感谢当初没被吓退。7.3 时间显示格式排查耗时问题前先改这个我见过很多新手排查“哪一步慢”盯着默认的Time列看到一个包显示“12.345678”就觉得是它慢。这个数字是抓包开始后的累计时间想知道“这一个包和上一个包之间隔了多久”直接看它是不行的。排查耗时请先改时间显示格式View视图菜单 → Time Display Format时间显示格式 → Seconds Since Previous Displayed Packet相对上一个包的秒数。改成这个格式后每个包显示的数值就是“距离上一包的间隔”哪个包间隔突然变大它十有八九就是慢的元凶。这个细节很少被零基础教程提到但实际排查时价值极大。7.4 记住这几个快捷键日常操作效率翻倍Wireshark的菜单层级很深鼠标一路点很费时间这几个快捷键建议直接记住。CtrlE 开始/停止抓包 CtrlK 打开抓包选项设置抓包过滤器的地方 CtrlF 在界面中搜索会在当前过滤栏直接输入关键字 CtrlM 给数据包打标记标记后有颜色标柱 CtrlG 跳到下一个标记包组合用法是抓包时先CtrlK选好网卡CtrlE开始看到目标包后CtrlE停止CtrlF在过滤栏输入关键字定位CtrlM给关键包打标CtrlG逐个跳到标记包分析。这一套组合下来几乎没有多余动作。7.5 默认颜色规则不要嫌它花直接用Wireshark默认给不同类型的包配了颜色HTTP是绿色DNS是浅蓝TCP是浅紫UDP是淡蓝可疑包是黑底红字。新手一开始会觉得花花绿绿干扰判断但我建议你不要急着改配色默认颜色本身就是靠大量实践调出来的“视觉索引”。用久了你会发现扫一眼包列表的颜色就能大致判断流量构成。真要改配色等你能熟练过滤了再说。最后说点我的个人体会。Wireshark上手最大的障碍从来不是功能复杂而是信息过载——满屏的包不知道看哪个。我花了很长时间才养成的习惯是永远先过滤再分析永远带着一个明确问题去抓包我正在找哪个IP、哪个端口、哪类协议。你把这篇文章的实验流程完整做一遍从起本地HTTP服务到抓到包再到Follow TCP Stream看全文大概20分钟就能建立起完整的抓包分析链路。之后再听到三次握手、DNS解析、HTTP协商这些词你脑子里浮现的不再是抽象概念而是一张张真实的包截图。踩过几次坑之后我现在几乎每次碰到网络相关的疑难问题第一反应都是开Wireshark验证现场它依然是网络分析领域最趁手的基础工具没有之一。
阅读完成 · 觉得有帮助?
咨询建站