ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

网络抓包从入门到实战:工具选型、HTTPS解密与常见问题排查

网络抓包从入门到实战:工具选型、HTTPS解密与常见问题排查 网络抓包这四个字听起来像网络安全工程师才会碰的东西但实际上——凡是写过接口、联调过App、排查过线上问题的人早晚都会用上它。你把手机连到电脑上打开抓包工具所有经过的请求和响应全部摊在眼前域名、路径、参数、请求头、返回值、状态码、耗时一目了然。就像在一条管道上装了一面透明玻璃数据流经过时你能看清每一个字节。这篇文章把我从入门到踩坑的记录完整整理出来涉及工具选型、HTTPS证书、代理配置以及大家最容易遇到的“抓包时设备显示无网络”问题适合刚开始接触网络抓包、或者正在被接口调试卡住的开发者。1. 网络抓包的基本认知先把“看不见的流量”搞明白1.1 抓包的本质在数据通路上加一面“镜子”要理解网络抓包先看网络通信的一个基础事实任何一次网络请求本质上都是数据包从源地址流向目标地址的过程。应用层发数据、传输层分段、网络层封装再通过物理网卡发出去。正常情况下这些包走得很顺畅用户只能看到“加载成功”或“加载失败”的结果中间过程对普通开发来说是个黑盒。抓包干的事情就是在这个黑盒上开一扇窗。实现思路有两条一条是“旁路观测”也就是在网卡层面把所有经过的数据包复制一份出来典型代表是Wireshark搭配混杂模式适合看全网络流量另一条是“主动代理”也就是让设备把流量统一交给一个中转程序先经过程序记录保存再转发到真实服务器典型代表是Charles、Fiddler、reQable这类工具。多数刚入门的朋友其实不需要关心网卡底层理解“抓包工具就是中间人”就够了。1.2 学抓包能解决哪些实际问题我接触过的用抓包解决问题的场景非常杂但归纳起来无非四类。第一类是接口联调。后端说自己接口已经返回了前端说没拿到数据两边对着同一个问题吵来吵去。这种时候抓包工具是唯一能让两边闭嘴的裁判请求有没有发出去、发送的字段叫什么名字、后端实际返回了什么、状态码是200还是500全都有记录。第二类是App逆向分析和接口研究。自己负责的App打包上架后想看正式环境下的请求是否正常又不想在代码里打一堆Log抓包是最直接的办法。别人家的App如果涉及恶意行为分析、流量合规检测也需要用抓包手段去观测它的行为。第三类是定位网络层的“玄学问题”。比如某些用户反馈页面一直转圈但你自己的手机完全正常再比如某些接口在Wi-Fi下能用移动网络下就超时还有证书过期、DNS解析异常、代理冲突这类问题肉眼根本看不出来只有抓包才能给出确认。第四类是学习HTTP协议。说实话看十篇讲HTTP的博客不如自己抓一次请求来得记忆深刻。请求头里有哪些字段Cookie是怎么带的重定向之间发生了什么抓一次包全明白了。1.3 先明确一条底线既然抓包能看到流量内容那么合法的使用边界一定要先说清楚抓包的对象应该是自己开发的应用、自己拥有的设备或者已经获得明确授权的服务。未授权的个人数据采集、流量窃听都属于越界行为。行业内测、开发调试、安全研究都应该在授权范围内进行。这是从业者互相之间不必多说、但必须遵守的基本规矩。2. 主流抓包工具怎么选五款工具横向拆解2.1 抓包工具的两条技术路线工具选型之前先要明白工具背后的工作方式因为“适合自己的工具”完全取决于这张表。被动旁路型工具直接监听网卡上的所有数据包不需要目标设备做任何设置。优势是“用户无感”能看到TCP三次握手、TLS握手细节对底层协议分析很有价值劣势是看到的东西太底层全是十六进制字节流和TCP段想要筛选出某个App的单个HTTP请求需要费不少功夫。主动代理型工具则是把抓包软件变成一个中间代理。设备上的流量先发送到代理端口代理记录完再转发出去。优点是结构清晰能直接看到HTTP请求方法、URL、请求头、响应体非常适合开发联调和App分析缺点是需要手动配置设备的代理地址并且HTTPS流量要额外安装证书才能解密。2.2 五款常用工具对比工具运行平台工作方式HTTPS解密上手难度典型场景WiresharkWindows/macOS/Linux旁路监听需配置SSLKEYLOG偏高网络协议分析、底层排障tcpdumpLinux/macOS旁路监听不方便高服务器端流量抓取FiddlerWindows/macOS主动代理一键开启中等Web开发、Windows环境CharlesWindows/macOS/Linux主动代理一键开启中等移动端App调试reQableWindows/macOS/Android主动代理虚拟网卡一键开启低移动端抓包、跨端联调这里面reQable是最近几年崛起较快的工具它把代理模式、虚拟网卡模式、容器抓包做进了同一个界面而且对新手更友好。热搜里的“reqable抓包 无网络”问题我后面专门用一节来拆解。这里先记住一个选型判断如果你主要抓App的HTTPS流量优先选代理型工具如果你要排查TCP握手、DNS、TLS层的问题Wireshark无法替代。2.3 我的选型建议如果你只有一台Windows电脑又要抓Android手机上的App流量我的推荐顺序是reQable第一、Charles第二、Fiddler第三。前两者跨平台一致性好适合在电脑和手机之间切换操作。如果只是偶尔抓一次装Fiddler也能用Windows下它的兼容性没问题但是新版Fiddler Everywhere已经改名成Progress Telerik的付费产品免费版有会话数量限制这点要有心理准备。如果你是Mac用户Charles和reQable是首选两边对Apple Silicon适配都做得较早代理模式下iOS设备的证书安装流程也顺畅。团队协作时共性需求其实就一个电脑上开着代理手机填上IP和端口装上证书流程完全统一。3. 从零开始完成一次App抓包reQable实战3.1 环境准备与代理配置我以reQable为例把一次完整的抓包流程拆开来讲这样其他工具也能按照相同逻辑迁移。第一步下载并安装reQable桌面版。安装完成后先不着急抓包把电脑的IP地址记下来。Windows在命令行输入ipconfigmacOS输入ifconfig找到当前所在局域网段的IPv4一般长这样192.168.x.x。第二步手机和电脑连接到同一个Wi-Fi。这一点很重要如果手机用的是流量、电脑连的是Wi-Fi它们不在同一网段代理根本不通。第三步在reQable中开启代理服务。reQable的主界面左上角有个开关点击后会显示“HTTP代理已开启”监听端口默认是9000可以改成自己想要的固定端口。这时工具已经处于“等待流量”的状态。第四步在手机上设置代理。以Android手机为例打开Wi-Fi设置长按当前连接的Wi-Fi进入修改网络选择“高级选项”把代理方式改成“手动”主机名填入电脑IP端口填入9000保存。iPhone的设置也类似在Wi-Fi详情页最下方有“配置代理”。配置完成之后用手机随便打开一款应用或浏览器访问一个网页回到reQable界面就能看到会话列表里出现了一条条请求记录。这里我多说一句很多新手卡在这一步是因为手机和电脑不在同一网段或者手机没连接到和电脑相同的Wi-Fi排查方向完全不用往抓包工具本身上想。3.2 配置HTTPS证书解密加密流量刚完成上面的步骤你会发现请求是出现了但请求内容打不开显示“TLS握手失败”或者“证书不受信任”请求体、响应体全是乱码。这是正常现象。默认情况下App使用HTTPS协议传输数据。HTTPS的全称是“HTTP over TLS”数据在发送前经过加密代理工具无法直接看到明文。要看到明文内容就得让手机“信任”抓包工具自己签发的证书。流程是在reQable中点击“安装证书”生成reQable CA证书然后手机浏览器访问一个特定地址通常是reqable.com/ssl下载证书并安装。Android 7及以上系统需要在设置-安全-加密与凭据-安装证书中安装CA证书安装完成后还需要在“信任的凭据”里确认证书处于“已启用”状态。关键点在这里Android 7.0以上默认只信任系统证书而用户手动安装的证书属于“用户凭据”两者权限完全不同。reQable在Android端内置了一套“虚拟网卡证书注入”方案能帮助用户把证书装成“系统级”但对一部分App来说仍然走了弯路。这就是很多教程里提到的“装了证书还是抓不到HTTPS包”的根源之一。3.3 实操演示定位一次登录接口的完整请求链路我模拟一个实际场景你在调试自己App的登录功能发现点击登录后一直提示“用户名或密码错误”。这时候不需要去问后端、也不需要加日志直接看抓包结果。回到reQable会话列表找到刚才触发登录操作的请求。通常能看到一条POST类型的请求URL指向类似 /api/login 的路径。点击这条记录界面右侧会展示完整信息请求行中可以看到请求方法、路径、HTTP版本请求头里看Content-Type是什么类型、Cookie怎么带的请求体里看提交参数的名字和后端约定的是否一致响应部分看状态码、响应体内容。如果状态码是200响应体里却返回了“用户不存在”说明请求参数根本没错了问题出在后端数据里如果状态码是404说明路径拼接错了如果状态码是500那就基本能断定是后端服务异常。抓包的价值正在于此把争论从“我感觉是……”变成“数据表明……”。我个人的建议是抓包时要养成记录完整链路的习惯。比如登录操作整个过程通常会有几次302跳转、一次Cookie下发、一次登录校验请求顺序和依赖关系都要在会话列表里看清。不要只看最后一跳要顺着时间顺序把整个流程看串起来。3.4 过滤器使用快速找目标不等于瞎翻App使用过程中产生的请求可能有几十条甚至上百条其中还夹杂着广告SDK、统计SDK、日志上报的流量。如果每条都点开看效率极低。reQable的过滤器支持按主机、路径、关键字搜索Charles和Fiddler也有类似功能。想快速定位某个App的请求最简单的方式是先清理一次会话然后只打开目标App操作完要看的页面就立刻关掉它再回工具里看。这样产生的会话基本都来自目标App干扰项很少。再加上关键词过滤比如想看登录就直接输入“login”结果就非常集中。4. 重点专题开启抓包后“设备显示无网络”的完整排查4.1 问题现象描述“reqable抓包 无网络”这个搜索词我估计是很多新手共同的拦路虎。现象很统一手机端设置好代理后原本刷得动的内容全部打不开连浏览器都显示“无法访问此网站”。看到这个现象第一反应往往是“代理配错了”但实际排查下来会发现根因远比“配错”更多样。我把这类问题归纳成几个大类按照排查顺序列在下面建议直接照着这个顺序走。排查顺序检查项快速判断方法1电脑IP与手机网段手机上用浏览器访问电脑IP:端口能打开证书下载页则正常2代理端口是否被占用查看reQable监听状态换一个不冲突的8000-9999端口3HTTPS证书是否已信任到手机“信任的凭据”里确认CA证书存在且启用4目标App是否禁用代理换个系统自带浏览器访问HTTP网站能通就说明代理本身正常5抓包工具是否开启了虚拟网卡模式同时开启虚拟网卡和系统代理会造成流量环路二选一6电脑防火墙是否放行端口临时关闭防火墙或添加入站规则测试一次4.2 根因一证书没装到位导致HTTPS请求全部失败先说一个最容易忽略的细节代理配置好以后不是所有流量都能正常跑。HTTP明文流量是可以直接转发的但HTTPS流量如果证书没有被设备信任设备端的TLS校验会直接失败。表现在用户界面上就是“无法访问”“连接被重置”“SSL握手失败”看起来像断了网实际上是被安全机制拦下来的。这个问题的解法分平台。iPhone比较直接安装描述文件后还要去“设置-通用-关于本机-证书信任设置”里把reQable CA证书的开关打开。Android则要分版本Android 7以下用户证书默认可用Android 7以上App默认不信任用户证书只有部分应用会在manifest里显式声明信任用户证书因此同样的安装流程在不同App上表现完全不一样。还有一点很多人装了证书后没有重启抓包工具的代理服务旧连接一直保持着无效的TLS会话。重启一下reQable的代理开关重新连接通常就能解决。4.3 根因二App显式禁用了代理现在很多头部App都在网络安全配置networkSecurityConfig里做了限制要么禁止使用用户代理证书要么干脆禁用了所有代理流量。这是为什么某些新手用reQable抓抖音、微信的包时发现别的App都能抓到数据唯独这些大厂App显示无网络。这个现象不是工具的问题而是目标App主动检测并断开了代理连接。常见的检测手段有三类一是检查系统代理设置发现设置了就拒绝连接二是校验证书链不认用户证书就抛异常三是部分App会做SSLPinning也就是在代码里写死服务端证书的公钥指纹任何中间人证书都会触发校验失败。对这种情况常规的做法是换用“虚拟网卡模式”抓包。reQable的Android版本支持本机虚拟网卡抓包这种模式不依赖系统代理App的代理检测就骗不过去了但证书信任问题仍然存在能抓到包不代表能解开TLS。要想对加密流量做深度解读还要视App的安全策略而定这部分已经超出入门范围作为了解即可。4.4 根因三代理与虚拟网卡的双层回路reQable同时提供了“系统代理模式”和“虚拟网卡模式”两种抓包方式。问题在于如果用户在桌面上开启了系统代理手机端也配置了同一个代理地址然后手机端又开启了reQable的虚拟网卡那么流量会在“手机→代理→虚拟网卡→代理”之间来回打转形成环路。表现就是网络时断时续、超时严重甚至完全无网络。判断方法很简单到reQable设置页查看当前启用的模式把虚拟网卡和系统代理根据场景做二选一。普通App调试用系统代理模式就够只有遇到代理检测类App再换虚拟网卡模式。4.5 根因四代理地址与防火墙问题有人配置时图省事在手机代理地址那栏填了127.0.0.1然后怎么抓都抓不到。这里的原理需要说透手机和电脑是两台不同的设备“本机”的IP地址在每台设备上指的是自己。电脑上的127.0.0.1是电脑自己而手机上的127.0.0.1是手机自己。如果手机代理填的是127.0.0.1它只会尝试连接自己身上的9000端口而手机上没有监听9000端口自然无网络。正确填法应该是电脑的局域网IP例如192.168.1.23。另一个是防火墙拦截。Windows系统默认防火墙可能会拦截外部设备对reQable端口的连接请求。表现是手机浏览器直接访问“电脑IP:端口”打不开如果排除了网段问题大概率就是防火墙干的。可以加一条入站规则允许TCP端口9000通行或者临时关闭防火墙验证。4.6 验证网络是否恢复的最快方法配置完代理和证书后不要直接打开目标App先用一套固定组合验证手机浏览器访问一个纯HTTP网站比如 http://neverssl.com能打开说明代理链路是通的。手机浏览器访问“电脑IP:端口”能打开证书下载页说明代理服务和防火墙正常。安装并信任证书后再访问一个HTTPS网站能打开说明证书链路正常。三步全通再去抓App的包成功率会提高很多。这套验证顺序也是我多年踩坑后留下的肌肉记忆能节省大量排查时间。5. 抓包中的高频问题速查与实战进阶经验5.1 高频问题速查表问题可能原因解决建议抓不到任何请求手机没走代理检查代理IP和端口确认手机和电脑同网段只有HTTP能抓HTTPS是乱码证书未安装安装reQable CA证书并确认“信任的凭据”中有它某一款App无网络其他正常App禁用代理或SSLPinning改用虚拟网卡模式或分析App安全策略抓包时断时续代理和虚拟网卡同时开启确认当前只用一种模式电脑上Wireshark抓不到手机流量监听网卡选错确认选了电脑连接Wi-Fi的那张网卡而非Loopback抓包工具能启动但服务端口不通防火墙拦截检查入站规则或临时关闭防火墙验证手机能上网但电脑上代理状态没计数代理配置在系统全局生效但异步延迟重启手机Wi-Fi或等待几秒后再试5.2 Wireshark补位代理工具之外的定位能力代理型工具也有它的盲区它只能看到应用发出、经过代理的流量看不到TCP握手细节、看不到DNS解析过程、看不到那些不走系统代理的UDP流量。当问题出在TCP层或DNS层时就要让Wireshark临时补位。举个例子某个接口总是偶发超时Charles里看到的是请求发出后很久才收到响应但超时的具体原因无从判断。这时候在电脑上开Wireshark选择正确的网卡过滤条件设为“tcp.port 443”就能看到完整的握手、传输、挥手过程。如果你在第几个TCP段出现了重传基本就能定位弱网或丢包问题。当然Wireshark抓到的包是加密的配合SSLKEYLOG环境变量可以解密一部分TLS流量但配置过程相对复杂入门阶段不需要强求。5.3 从抓包到“看得懂”看请求的五个切入点很多新手抓到了包却不知道该看什么。我给你一个简单有效的切入点清单。第一先看请求行。请求方法是GET还是POST、PUT还是DELETE能初步判断操作类型。第二看URL路径。路径通常直接反映后端接口架构比如 /api/v1/order/create 就能看出下单操作、接口版本和资源层级。第三看请求头。Content-Type决定了参数格式是form还是JSONAccept决定客户端期望的返回数据格式Cookie和Authorization是身份凭证接口401时优先检查这两个字段。第四看请求体。重点核对参数名和参数值是否与后端约定一致是否存在拼写错误、多传少传。第五看响应体。先看HTTP状态码再看业务状态码很多系统是“HTTP 200但业务失败”所以不能只看状态码就下结论。5.4 两条少有人提的实战经验最后分享两个工具之外的实战心得。第一个抓包时把电脑和手机的屏幕录制开着或者至少记录下操作时间点。抓包会话列表是按时间排列的但人的记忆不靠谱。我吃过一次亏抓了十分钟的包然后忘了哪次点击对应哪条请求只能重新再来一次。后来习惯在操作前先停顿两秒、操作完马上看一眼reQable让会话列表和操作步骤逐一对应。第二个抓包前把手机Wi-Fi的“自动连接”关掉同时将锁屏间隔调长。Android系统后台频率限制、iOS的App状态冻结都有可能让代理连接意外中断导致流量忽有忽无。保持屏幕常亮能减少“抓包抓一半发现数据忽然断掉”的尴尬。说实话网络抓包这件事难度不在于工具不会用而在于你不知道流量背后发生了什么。多用几次、多踩几次坑把这些经验沉淀成自己的判断逻辑后面遇到再难的问题你都会形成一套固定的解决惯性。如果这篇文章能帮你少走两步弯路那今天这个“从入门到能用”的目标就完成了。
返回列表