☰
从Wireshark抓包看懂网络通信:web渗透入门先补流量分析基本功
2026/10/13 3:53:04 网站建设 项目流程

很多朋友一听说web渗透,第一反应是Kali里那些看起来特别“厉害”的工具,感觉装好工具就能横扫一片。但你真坐上工位,打开Wireshark抓上两分钟流量,大概率会发现自己压根不知道眼前这一行行数据在讲什么。我在带新人的时候见过不少这种情况:漏洞原理背得头头是道,可给他一个真实的抓包文件,让他指出哪个包是TCP握手、哪个包是HTTP请求,却卡壳了。web渗透入门的第一课,不该是某款攻击工具的使用教程,而是先学会从流量层面看清一次网络通信的全过程。这就是我写这篇东西的初衷,围绕Wireshark抓包和常用协议分析,把Kali、web渗透这些词背后的基本功给补上。适合零基础刚入门、以及想把网络协议基础补齐的安全爱好者。

1. 为什么web渗透入门先要啃下“流量分析”

1.1 流量是攻防两端绕不开的第一现场

网络世界里的所有动作,最终都会变成数据包。无论是你打开一个网页,还是某个程序在后台偷偷上报数据,本质都是把一串封装好的字节从一台设备发送到另一台设备。安全领域的攻防也一样,就算你用的是看起来很“高级”的手法,落到网络上仍然表现为一次请求、一次响应、一条连接、一个DNS查询。所以我把话说得直白一点:看不懂流量,就谈不上真正理解web渗透,因为所有测试动作都发生在协议交互过程中。

我常举一个例子:很多人看过某个点击按钮触发了一个查询操作,但你不抓包,就不知道这个操作到底是GET还是POST,参数放在URL里还是放在请求体里,返回值是基于什么规则拼出来的。浏览器开发者工具确实能看一部分,但它只能看到浏览器自己发出的HTTP层流量,看不到TCP握手、丢包重传、DNS解析过程,也看不到不是浏览器发起的请求。Wireshark补上的正是这个视野差,它把从网卡出来的每一层协议都摊在你面前,让你真正看到通信的全貌。

1.2 抓包能力在web渗透里的实际用途

web渗透测试的核心工作之一,是理解目标Web应用的通信逻辑。你带着“流量视角”去做信息收集和测试,效率会完全不一样。只说几个我在实战中天天用到抓包的场景:看响应头判断服务类型和安全配置,比如Server字段、是否设置CSP、Cookie是否带HttpOnly;看请求频率和参数位置,判断接口的设计习惯;看一次页面加载过程里发生了多少次重定向,301、302之后又去了哪里;以及看站点加载过程中访问了哪些第三方域名,这些都是不需要“攻击”就能完成的排查和测绘。

反过来,你在过滤栏里输入一个IP或者一个协议关键字,就能把那台机器相关的所有通信行为拉出来,再按照时间线重放一遍。这种能力不仅渗透测试需要,做安全巡检、故障排查、日志审计同样需要。可以说抓包分析是网络安全领域最通用的底层技能,甚至比会十种漏洞利用工具都重要。掌握了这个技能之后,你再去看那些所谓“漏洞演示”,会发现他们每一步操作都没离开我说的这个框架:改一个请求结构,观察返回变化,如此循环。

1.3 Wireshark与Burp Suite、tcpdump的定位差异

很多新手会问,既然有了Burp Suite为什么还要学Wireshark。我的理解是,它们在抓包模型上根本不冲突,甚至互补。简单列个表:

工具抓包位置核心优势典型使用场景
Wireshark网卡层、全协议栈可视化强,协议解析完善,能看TCP/IP/DNS等底层交互协议学习、全流量分析、网络排障
Burp SuiteHTTP/HTTPS应用层代理可以修改和重放请求,跟web渗透测试流程深度绑定测接口、改参数、观察应用层行为
tcpdump命令行抓包,类似Wireshark内核部分轻量、远程服务器上操作方便生产环境、无图形界面的场景

我让新人先从Wireshark入手,是因为它的图形界面能帮你把“层层封装”这个概念建立起来,而且协议字段会帮你自动解析成能看懂的名字,不需要你背十六进制。等协议基础扎实了,再去用Burp改请求包,会顺很多。反过来,如果一上来就只盯Burp,你很容易变成只会点按钮,不会看底层发生了什么。

2. 搭好环境:Kali下Wireshark的安装与抓包第一课

2.1 Kali下安装Wireshark,以及我踩过的权限坑

Kali里通常已经预装了Wireshark,你可以在终端直接输入wireshark启动,也可以在菜单里找到它。不过我用过几个精简版镜像,发现有时候默认没装全,这时候用下面两条命令补上就行:

sudo apt update sudo apt install wireshark -y

安装过程中有个交互式问题:“非超级用户是否允许抓包?”,建议选“是”。如果不小心选了“否”,你会发现普通用户启动Wireshark以后根本看不到网卡列表,网上有人会用sudo wireshark硬启动,但我更推荐把当前用户加入wireshark用户组:

sudo usermod -aG wireshark $USER

然后注销重新登录,或者重启一次系统,再打开Wireshark就能正常抓包了。这里有个很典型的坑:我在刚开始练习的时候,因为急着噼里啪啦敲命令,装完就直接用普通用户启动,结果界面是出来了,网卡列表却是空的,折腾好一会儿才发现是权限问题。所以启动之前先确认一下自己在哪个组,能省很多时间。

2.2 抓包第一步:选对网卡和启动抓包

Wireshark启动后,第一个界面会列出检测到的网卡接口。常见的有eth0、wlan0、lo,还有特殊的any。eth0是有线网卡,wlan0是无线网卡,lo是回环接口,专门指本机访问本机服务时的通信路径。如果你要在浏览器里访问一个远程网站,就选eth0或wlan0;如果你在测试一个本地起着的服务,就选lo,否则什么都抓不到。

选好网卡后,点工具栏那个蓝色鲨鱼图标开始抓包,红色方块表示停止。抓的包默认不会自动保存,需要手动存成pcapng文件。这里我想多说一句:新手最容易犯的错是抓完包就关,结果发现刚才花了半天抓的流量全没了。抓到有用的包,先保存,再慢慢分析。保存的文件可以分享给别人,但里面很可能包含Cookie、Token之类的敏感信息,发出去之前一定要做脱敏处理。

2.3 数据包列表、详情、字节流三个面板怎么看

Wireshark的主界面主要分三块。最上面是数据包列表,一行就是一个包,能看到时间、源地址、目的地址、协议、长度和信息概要;中间是数据包详情,选中的包会在这里按协议层级展开,从链路层一路到应用层;最下面是数据包字节流,显示这个包对应的十六进制和ASCII内容。

新手刚开始很容易陷入一个误区:只盯着最上面列表里那几行蓝色的概要信息看,以为那就叫“看懂包了”。其实关键信息都在中间的详情面板里。我建议你做个练习:随便ping一下自己的网关,然后抓ICMP包,再选中其中一个包,从最下面的链路层开始,逐层往上点开,看每一层做了什么封装。这个过程就像拆快递,最外层是收货地址,往里一层是物流单号,再往里才是你要真正处理的东西。把封装关系搞明白,后面看TCP和HTTP就轻松了。

3. 半小时学会Wireshark核心过滤语法

3.1 两类过滤器别混淆

Wireshark有两条完全不同的过滤路径,很多人一开始都会搞混。第一类叫“捕获过滤器”,是在抓包开始前设置,它的作用是让网卡从源头就只留下你关心的流量;优点是省磁盘、省CPU,适合长时间抓大流量。第二类叫“显示过滤器”,是在抓包结束或抓包过程中使用,它不会删除已经抓到的包,只是让你在结果里筛选出需要的部分;优点是灵活,随时改都不用重新抓。

这两类语法也不一样。捕获过滤器用的是BPF语法,写法比较简洁,比如host 192.168.1.1表示只抓来自或去往这个IP的包。显示过滤器用的是Wireshark自定义的字段表达式,比如ip.addr == 192.168.1.1。我把话说在前头:入门阶段主攻显示过滤器就够了,因为绝大部分分析场景都是先抓再筛。只有在要按小时甚至按天持续采集流量时,才需要认真研究捕获过滤器,避免把所有无关数据都堆到硬盘里。

3.2 显示过滤的常用必会表达式

我列几个使用频率最高的显示过滤表达式,建议你照着手敲一遍,形成肌肉记忆:

过滤目标表达式
只看某个IP的流量ip.addr == 192.168.1.1
只看某个端口的流量tcp.port == 80
只看HTTP协议http
只看DNS协议dns
只看ICMP协议icmp
看GET请求http.request.method == "GET"
看TCP握手包tcp.flags.syn == 1
组合条件(ip.addr == 192.168.1.1 and http) or dns

看到规律没有?显示过滤器的核心语法就是“协议名.字段名 == 值”,很像程序语言里的对象属性判断。想组合条件时用and、or、not,复杂条件记得加括号。输入框底色也能给你反馈:绿色表示语法正确,红色表示表达式写错了,仔细看多半是大小写或者空格问题。

3.3 快速定位:Follow Stream与右键过滤

显示过滤器只是第一步,真正高效的分析方式是组合使用。右键一个包,你会发现菜单里有“追踪流”这个选项,点进去选TCP流,Wireshark会把这条TCP连接上的完整数据内容拼接起来展示。这在web渗透分析里实在太常用了,比如抓一条HTTP明文流量,你不需要逐字段看,直接在流窗口里就能看到完整的请求行、请求头和响应体,甚至能直接看到登录时有没有把密码明文发出去。

另一个高频操作是右键-应用为过滤器-选中,它会自动根据你选中的包或字段生成过滤条件。我平时排查一个可疑站点时,习惯先过滤该站点IP,再右键任意一个HTTP包追踪TCP流,把整个交互过程完完整整读一遍。这一通操作下来,比对着包列表傻看几个小时有效得多。

4. 把TCP握手和挥手看明白,web渗透才不会瞎

4.1 三次握手:SYN、SYN-ACK、ACK

任何一次TCP连接建立,都要先经过三次握手。你可以想象成两个人在打电话:A说“喂,你听得到吗”(SYN);B说“听得到,你能听到我吗”(SYN-ACK);A说“我也听得到”(ACK)。传输通道确认正常之后,才开始传正事。这个过程的三个包,在Wireshark里非常容易识别,抓一个HTTP请求,看列表最前面三个包,Flags列分别是S、SA、A。

你可能会问,为什么是三次不是两次?因为第二次握手只让B确认了A能发、自己能收,可A还不能确认B的话自己一定收得到,只有A再回一个ACK,双方才都确认了收发能力没问题。我见过有人死记硬背这个原理,我建议你直接在Wireshark里把三个包选中,看Seq和Ack字段的变化,比背十遍都有用。Wireshark默认显示相对序号,也就是说Seq从0开始,这个设计就是为了防止新手被随机初始序号搞得晕头转向。

这部分跟web渗透有什么关系?关系很大。你判断一个TCP端口是否开放,本质上就是看这个握手能不能完成。发送SYN后如果收到SYN-ACK,说明端口开放;如果收到RST,说明端口关闭;如果完全没响应,可能是防火墙过滤。虽然现在有很多现成工具帮你做这件事,但你可能不知道它们背后就是利用了TCP握手特性,这个底层逻辑必须清楚。

4.2 四次挥手与连接状态

断开连接时用的是四次挥手。还是那个通话类比:A说“我这边话说完了,要挂电话了”(FIN);B说“知道了”(ACK);B还有话没说完,继续补充;等B也说完了,再发一个“我也讲完了”(FIN);A最后回一个“好,挂吧”(ACK)。如果你抓到的包里FIN后面跟着的ACK不止一个,不要觉得奇怪,因为挥手确实需要四次,而且有可能被中间状态合并。

有个名词叫TIME_WAIT,出现在主动关闭连接那一方。它的作用是确保最后一个ACK能送达对方,所以会等上一段时间再彻底关闭。大量TIME_WAIT通常意味着服务器在频繁主动断开连接,这在高并发短连接场景下很常见,做网络优化和排障时经常要关注。新手可以不用深挖这块,但看到Wireshark里出现FIN、TIME_WAIT别慌,它们都和TCP状态有关系,理解状态迁移能帮你判断连接到底卡在哪一步。

4.3 HTTP连接复用与TCP异常提示

HTTP和TCP的关系初学者容易搞混,其实HTTP是跑在TCP之上的应用协议,一个TCP连接上可以跑很多个HTTP请求,这就叫连接复用。Wireshark的包列表里有个Stream列,同一个数字表示同一条TCP连接。如果访问一个页面时,几十个HTTP包都在同一个Stream里,说明连接复用得很好,不需要频繁握手开销。

抓包时间长了,你还会看到列表里出现[TCP Retransmission]、[TCP Dup ACK]、[Out-of-Order]之类的警告。这些通常是网络丢包、乱序或超时的表现。初学者有个通病,一看到红色告警就觉得是“被攻击了”,其实多半只是无线信号差或者路由器忙不过来。先看统计数据里有没有大面积重传,再结合自己的网络环境判断,别自己吓自己。

5. 真实web请求的完整协议链:DNS、HTTP、HTTPS

5.1 DNS解析:地址栏敲回车后发生的第一件事

你在浏览器输入一个域名,第一步不是发起HTTP请求,而是先问“这个域名对应哪个IP”。负责回答这个问题的就是DNS。Wireshark里过滤dns,能看到DNS请求和响应的成对出现。请求包里有Queries区域,直观显示域名和记录类型;响应包的Answers区域会给出解析结果。

DNS查询走的是UDP的53端口,一般是一条查询、一条响应,非常短小。web渗透过程中为什么也要看DNS?因为很多恶意通信、可疑外联行为,第一步都会通过DNS去寻找目标地址。安全分析人员经常说“先看DNS,再看HTTP”,就是这个原因。另外有个实际技巧:Wireshark默认可能会自动把IP地址反解析成域名,这个功能有时候会让抓包变慢、显示变乱,可以在“视图-名称解析”里关掉,改成不解析,保留原始IP地址。

5.2 HTTP明文协议:一条请求看穿数据结构

HTTP是web渗透的主战场。过滤http之后,选中一个请求包,在详情面板找到Hypertext Transfer Protocol这一层,你可以展开看到请求行,方法、路径、版本号都在这里。往下的Request Headers区域,是一大堆请求头,Host、User-Agent、Cookie、Referer,每一个字段都有明确含义。如果是一个POST请求,请求体里通常会放参数,这些参数就是web应用接收用户输入的直接入口。

响应包也类似,第一行是状态码和原因短语,常见的就是200 OK、302 Found、404 Not Found。Headers区域里能看到Content-Type、Location、Set-Cookie这些字段。为什么说抓包对web渗透入门很重要?因为整个web安全的世界,本质上就是你不停修改这些请求元素、再观察响应变化的过程。先能逐行读懂一张HTTP报文,后面所有分析和测试才谈得上。

有一个新手必须先补上的认知:HTTP是明文协议,意味着如果用户访问的是不带加密的HTTP站点,抓包就能直接看到密码、Cookie、聊天内容。我第一次抓到别人明文登录请求时非常震撼,也一下子理解了为什么现在到处都在推HTTPS。这类例子不是教你干坏事,而是让你从机制上明白为什么明文协议有风险。

5.3 HTTPS加密流量:密码学在抓包里的体现

现在大多数网站都上了HTTPS,Wireshark里看到的协议列往往是TLSv1.2或TLSv1.3,再往下就是大段看不懂的Application Data。这部分内容已经被加密,普通人抓包拿到的只能是一堆密文。你不需要因此失望,因为TLS握手本身还有大量信息可以看。过滤tls.handshake.type == 1,能看到ClientHello,里面包含客户端支持的加密套件列表,还有一个叫SNI的字段,用于告诉服务器“我要访问哪个域名”,这个字段在握手阶段是明文的,很多网络排查和安全分析会用到它。

想在Wireshark里解密自己的测试流量,也不是不行。方法是用支持SSLKEYLOGFILE的浏览器或curl,先设置环境变量记录密钥日志,然后在Wireshark的协议设置里填上这个日志文件路径,重新抓包就能看到解密后的HTTP明文。注意我说的是“自己的测试流量”,这句话是底线。未经授权去解密别人的通信,性质就完全不同了。另外,入门阶段我不建议在这一块花太多时间,先用HTTP明文把协议逻辑打通,等后面需要分析自己手里的恶意样本或自家应用时,再来研究TLS解密。

6. 一次完整抓包实操:从DNS到页面请求全流程拆解

6.1 搭一个零依赖的本地实验环境

纸上谈兵说了半天,总得上手抓一次。有个最省事的办法,用Python自带的HTTP服务在本地起一个测试站,不需要任何外网依赖:

python3 -m http.server 8080 --bind 127.0.0.1

看到Serving HTTP on 127.0.0.1 port 8080就说明起来了。然后另开一个终端,用curl带上-v参数发起请求:

curl -v http://127.0.0.1:8080/

curl会输出详细过程,包括TCP连接、发送请求、收到响应。关键在于,Wireshark这边要选中lo网卡再开始抓包,因为访问的是本机回环地址,走的是回环接口。新手如果选了eth0或wlan0,会发现自己抓了半天什么都看不到,就是因为流量根本没经过那块网卡。

6.2 一步步看懂每一次通信的帧结构

按上面的步骤操作,停止抓包后过滤http,你会看到一次完整的通信流程。由于访问的是127.0.0.1,没有DNS查询环节,最前面应该是三个TCP握手包。第一个包客户端向服务器发SYN,第二个包服务器回应SYN-ACK,第三个包客户端回复ACK。紧接着,客户端发出一条GET / HTTP/1.1请求,服务器很快返回HTTP/1.1 200 OK的响应。如果你用lo口抓包,可能看不到太复杂的链路层信息,但TCP层和应用层的结构依然完整。

我让你做这一步,目的就是亲手把前面讲的协议顺序串起来。找一个包,点开它的TCP层,看Flags字段是不是ACK、Seq和Ack值如何变化;再点开HTTP层,看请求方法、路径和Host头。我带的不少新人就是通过这个练习,第一次真正理解了什么叫“层层封装”。别贪多,今天只抓这一个请求,把每个字段都点开看一遍,比乱抓一小时有效。

6.3 用流量图和会话统计把包变成画面

抓完包之后,还有一个非常容易忽略的入口,在“统计”菜单里。里面有个“流量图”功能,能把整个交互过程按时间顺序画成一条条箭头,直观展示谁先发了SYN,哪个包是什么时候到的。对于梳理复杂会话、向别人解释抓包结果,流量图都非常好用。

另外“统计-会话”和“统计-端点”能按IP和端口汇总流量,快速看出哪台机器跟谁通信最多。还有“I/O图表”,可以把过滤条件变成随时间变化的曲线,适合发现周期性行为。这一块对入门不要求全部精通,但知道有这些入口,已经能让你在分析一个陌生抓包文件时少走很多弯路。

7. 抓包常见的坑和排查思路

7.1 为什么抓不到包,或者抓到的包少得可怜

我遇到过很多次新人跑来问,为什么我点了开始抓包,列表里却几乎空的。第一个要排查的就是网卡选没选对,尤其在本机服务场景下必须选lo,选成eth0肯定抓不到。第二个是浏览器缓存,如果你访问的页面走的是强缓存,可能根本没发HTTP请求出去,自然抓不到流量,这时用curl请求或者无痕窗口能解决问题。还有一个隐蔽问题,无线网卡在普通环境下通常只能收到自己发出的包和发给自己的包,别指望开个混杂模式就能收到别人家手机流量,这种想法本身就跑偏了。

如果是在虚拟机里跑Kali,网卡选择更讲究。NAT模式下虚拟机对外通信的流量实际经过宿主机,你在虚拟机里抓到的未必是完整链路;桥接模式下虚拟机直接使用宿主机所在网络,相对更接近真实情况。想知道具体发生了什么,可以在宿主机和虚拟机里同时抓包对比,这样能帮你搞清虚拟化网络模型的差异。记住先抓自己的流量,练熟了再谈更复杂的场景。

7.2 过滤栏没反应、语法报错

这是几乎每个人都会撞上的坑。最常见的是在显示过滤栏里输入了捕获过滤器语法,比如host 1.2.3.4或port 80,结果输入框标红、一条数据都过滤不出来。显示过滤器的正确写法是ip.addr == 1.2.3.4、tcp.port == 80,运算符和值之间的细节不能省。大小写也有讲究,字段名和协议名基本都是小写,字符串值可能区分大小写,写之前不确定就先从右键菜单里自动生成,再手动修改。

另外,过滤后一条数据都没有,不代表抓包失败,先去掉过滤条件看看原始数据里到底有没有对应协议。有时候你过滤http,但访问的是HTTPS,加密流量根本不会显示为http协议,所以列表自然为空。这个时候要么改抓HTTPS相关字段,要么干脆先访问明文测试站,别在错误的方向上硬耗。

7.3 看到一堆乱码,是加密还是压缩?

刚开始抓包的人,看到列表信息里全是乱码会慌,以为抓包出了问题。其实有两种常见原因。第一种是流量本身被加密了,协议列显示TLS,那属于HTTPS的正常加密内容,Wireshark没有密钥就解不开,只能看握手阶段的明文控制信息。第二种情况是响应内容被压缩,比如服务器返回gzip编码的数据,Wireshark默认不会帮你解压,所以字节流看起来也是乱的。你可以点开HTTP层的Header区域,看Content-Encoding字段,如果是gzip,把响应体解压后就能看到原始内容。

需要再次强调,这里没有任何“破解别人流量”的黑魔法。正规解法就是配置自己的密钥日志、用自己的测试服务,或者选择明文测试环境。看到加密不乱动,也是一个安全从业者该有的素养。

7.4 抓包文件太大、界面卡顿怎么办

抓到一半发现卡顿,往往是因为捕获范围太大。我建议在抓包前就设置捕获过滤器,只保留需要的主机和端口,比如只抓某个IP的HTTP流量,其他全部扔掉。长时间采集时,还可以在抓包选项里打开多文件模式,设置每个文件大小和时间长度,让Wireshark自动滚动保存,避免单个文件大到打不开。

分析阶段,尽量用显示过滤器和导出功能缩小范围。在“文件-导出特定分组”里勾选Displayed,导出的只是当前过滤后看到的包,而不是整个大文件。另外,分享抓包文件前一定记得脱敏,我见过有人把生产环境的登录Token直接发到群里,结果造成了很不好的影响。这个习惯从第一次抓包就要养成。

8. 零基础后续怎么走,以及我一直坚持的合规底线

8.1 我的学习路线建议

如果你是完全零基础,我给一个我实际带人用过的路线。第一阶段,花两周时间只练Wireshark,目标是把TCP三次握手、四次挥手、DNS解析、HTTP请求响应这几个基础流程彻底看熟;每天给自己布置一个小任务,比如今天必须找到一个301跳转的完整过程,明天必须抓到一次带Cookie的请求。第二阶段,在本地搭建一些可合法测试的环境,配合Burp Suite去观察和修改请求,但每次修改前都要先在Wireshark里看清原始结构。第三阶段再去看web漏洞原理和Kali里的其他测试工具,会发现自己突然能看懂所有演示和文档。

别急着追求“精通”。我说的这个阶段安排,目的是让你一步一步建立对网络通信的直觉,而不是急着背工具命令。说实话,我见过太多人收藏了无数教程,真正打开Wireshark抓过包的却没几个。动手永远是第一位的,抓包这件事只有亲自做一遍、踩几个坑,才算真学会。

8.2 标题里的“黑客技术”,我更愿意叫“白帽安全测试”

关于标题里那个“黑客技术”,我必须认真说一句:零基础学习网络安全,目标应该是成为能帮助系统变安全的测试人员,而不是破坏者。Wireshark这类工具本身没有正邪之分,它既可以帮助你做防御分析,也可以被滥用去窥探隐私,关键取决于使用者的目的和授权范围。我把自己的底线放在这:只抓有权限的设备流量,只在自建环境和有书面授权的目标上做测试,抓到的敏感数据用完即删,绝不保留。

这条底线不是我随便说说的,而是职业安全和法律风险的红线。哪怕你只是出于学习目的,只要行为越界,后果都不堪设想。所以我建议每个入门的人,在第一天就把合规意识刻进脑子里。安全这条路很长,走得稳比走得快重要得多。

最后再分享一点个人经验吧。我见过成长最快的那些人,不是记忆力最好、工具用最熟的,而是愿意花一个下午,把一条从DNS到HTTP的完整流量从头到尾跟着看一遍的人。Wireshark不会直接告诉你哪里有漏洞,但它会诚实地把整个通信过程摆在你面前。看懂了包,你再回头去学Kali里那些工具,会有一种“原来都是通的”的踏实感。希望这篇东西能帮你把这一课补上,后面的路还长,咱们慢慢走。

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

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

立即咨询