十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

抓包工具选型与实战:八款免费工具覆盖全场景

抓包工具选型与实战:八款免费工具覆盖全场景 干这行久了几乎每天都要跟网络请求打交道抓包工具属于那种“平时想不起来、一调试就到离不开”的装备。不管是前端调接口、后端查超时还是运维定位网络故障甚至是安全测试看流量手里没有一套顺手且免费的抓包工具很多问题根本无从下手。这篇博文我把目前主流的全平台免费抓包工具全部过一遍从底层网卡抓包到HTTP/HTTPS中间层拦截从PC端到移动端从普通流量到USB、蓝牙这类特殊场景一次性讲清楚各自的定位、适用场景和基础玩法。全文基于我这些年实际用下来的经验不会只列个工具清单就完事重点放在怎么选、怎么配、怎么避开那些坑。1. 先摸清抓包工具的分类逻辑选型才不会乱很多人一开始就纠结“哪个抓包工具最强”其实这个问法不太对。抓包工具之间不是简单的强弱关系而是原理不同、各管一段。搞清楚它们的抓包方式才知道什么场景该用哪个。1.1 三种主流抓包机制决定了工具的适用边界第一种是网卡层抓包代表是Wireshark和tcpdump。这类工具直接接管网卡把经过网卡的所有数据包原封不动地拷贝一份出来然后做协议解析。这种方式的优势是抓得全、看得深TCP/IP层面的握手、重传、丢包全部一览无余缺点是你得自己从海量数据包里捞有用的信息而且拿到的往往是加密流量看不到HTTP请求的具体内容。第二种是本地代理抓包代表是Fiddler、Charles、mitmproxy。这类工具在电脑或手机上启动一个本地代理服务把应用程序的流量引到代理上来再由代理转发出去。因为流量在代理这边过了一道手所以可以解密HTTPS、改写请求、断点调试非常贴合接口开发调试场景。缺点是只对“愿意走系统代理”的程序有效部分App不走系统代理就抓不到另外它看到的只是应用层TCP底层的状况一概不知。第三种是系统级协议栈转发常见于移动端抓包工具。手机端没法像PC一样随便装个代理就能全局生效很多工具会通过系统提供的网络流量转发能力把全部流量导到本地处理然后再交给抓包引擎。这类工具的好处是不用root也能实现全局抓包适合在手机上直接抓App的流量。选型逻辑其实很简单你要分析TCP/IP底层选Wireshark你要分析HTTP/HTTPS接口选Fiddler或mitmproxy你在服务器上排查选tcpdump你要在手机上无root抓包用PCAPdroid这类工具。全平台不等于一个工具打天下而是组合起来覆盖全部场景。1.2 “全平台”和“免费”的真实含义“全平台”通常指Windows、macOS、Linux三大桌面系统再加Android、iOS两个移动端。严格意义上几乎没有一款工具能同时完美覆盖这五个平台更常见的是同一工具在不同平台有不同形态或者干脆是“PC端抓包 手机端配合”的组合方案。“免费”也要分两层看。Wireshark、tcpdump、mitmproxy这些是开源软件完全免费且无功能阉割Fiddler有免费版和付费版免费版功能已经足够日常调试还有一类像Charles虽然名气很大但属于付费软件只是允许免费试用这篇文章我主要围绕真正免费或免费版够用的工具展开。搞清楚这两点你在网上搜“抓包工具大全”时才不会被各种软文带偏。2. 八款主流免费抓包工具逐个拆解2.1 Wireshark网卡层抓包的绝对王者Wireshark是全世界使用最广泛的开源协议分析工具没有之一。它支持Windows、macOS、Linux安装包自带Npcap或WinPcap驱动装完就能直接抓包。图形界面右侧是实时滚动的数据包列表中间是协议树下面是十六进制数据区一眼就能看清每个包的结构。我用它最多的场景是定位“接口慢但不报错”的问题。有个后端服务偶发超时应用层日志完全看不出异常用Wireshark一抓发现TCP重传率特别高进一步看是服务端和客户端之间的MTU设置不一致导致分片丢包。这种问题用代理类工具根本发现不了只有网卡层抓包才能看到。Wireshark还支持非常强大的过滤语法比如只看某个IP的HTTP请求、只看TCP重传包、只看DNS查询等。初次上手不用记太多掌握几个高频过滤条件就不慌了ip.addr 192.168.1.10 // 只看这个IP的流量 tcp.port 443 // 只看443端口 http // 只看HTTP协议 dns // 只看DNS查询 tcp.analysis.retransmission // 只看TCP重传提示Wireshark抓的是经过网卡的所有流量在公共网络或公司网络里使用时要格外注意隐私边界只分析自己有权限的流量不要对他人通信内容做不必要的窥探。2.2 Fiddler Classic / Fiddler EverywhereHTTP调试第一梯队Fiddler是Windows平台最老牌的HTTP/HTTPS调试代理工具Fiddler Classic版本免费但官方已宣布停止维护新项目建议直接上Fiddler Everywhere的免费版。它支持Windows、macOS、Linux三大平台界面分左右两栏左边是所有会话列表右边是请求详情、响应详情和Inspectors面板。Fiddler对前端的价值在于“断点调试”。你可以设置断点让请求停在发送前手动修改请求参数再放行也可以让响应停在返回前临时改Response数据来测试前端不同状态下的表现。还有个很常用的功能是Composer不用写代码就能直接构造一个HTTP请求去测试后端接口。它内置的抓包过滤规则也很有意思比如你只关心某个域名可以设置Filters只显示该域名的会话。右键任意一条会话还能一键导出为cURL命令、保存为.saz文件方便团队协作时把请求场景发给别人复现。我实测下来Fiddler Everywhere免费版的会话数限制对日常调试几乎没有影响除非你一天要抓几万个请求。2.3 mitmproxy可编程的命令行代理mitmproxy长得像个“黑框框工具”但它是我个人最喜欢的抓包工具之一。它基于Python生态支持Windows、macOS、Linux核心是一个命令行交互式代理。启动后在终端里实时显示经过的请求支持键盘操作查看详情更重要的是所有功能都能通过Python脚本扩展特别适合做自动化测试和流量分析。使用方式很简单终端里执行一条命令就能启动mitmproxy -p 8080然后让手机或浏览器把代理指向运行mitmproxy的机器IP和8080端口即可。默认监听地址是本地如果需要让局域网设备连进来可以加参数mitmproxy --listen-host 0.0.0.0 -p 8080mitmproxy还有一个叫mitmdump的命令行模式不带交互界面专门用来跑脚本批量处理流量比如把每个请求的URL、状态码、耗时记录到日志文件里。对于要写脚本做接口监控的同学这比Fiddler灵活太多。2.4 tcpdump服务器排查必备的轻量级选手tcpdump是Linux/Unix平台上最经典的命令行抓包工具很多服务器镜像默认自带即使没装也能通过包管理器一行命令搞定apt install tcpdump # Debian/Ubuntu系 yum install tcpdump # CentOS/RHEL系它没有图形界面但正因为轻量特别适合在服务器上临时抓包取证。比如怀疑某个端口被扫描、确认某个服务是否在对外发包、验证iptables规则是否生效直接在服务器上抓几秒钟就够了tcpdump -i eth0 port 80 -w http.pcap这条命令把eth0网卡上80端口的流量保存到http.pcap文件之后可以用Wireshark打开这个文件做可视化分析这就是非常经典的“服务器上采集、本地上分析”组合拳。tcpdump的参数非常多但日常用到最多的就是-i指定网卡、-w保存文件、port或host做过滤半小时就能上手。2.5 Burp Suite CommunityWeb安全测试向的抓包利器Burp Suite是Web安全测试领域的标准工具Community版免费。它本质上也是一个代理工具内置了代理服务器、爬虫、Repeater等模块。和Fiddler偏开发调试不同Burp更偏安全测试比如截获请求后可以发送到Repeater里反复修改重放用来探测接口的边界情况。如果你做的是Web开发、接口安全测试或者对“渗透”方向感兴趣Burp Community完全可以满足基础学习需求。它的姊妹工具和Wireshark配合使用一个管应用层、一个管传输层基本能把一个Web请求从输入到返回的全链路看得明明白白。缺点是需要Java环境内存占用偏高老电脑跑起来会有些吃力。2.6 移动端与特殊场景手机抓包、USB抓包、蓝牙抓包手机抓包是很多人最头疼的环节热搜里“小程序抓包工具”“微信小程序抓包工具”就反映了这个需求。我的经验是Android上首选PCAPdroid开源免费无需root通过系统流量转发能力实现全局抓包能导出pcap文件还内置了解析功能iOS上常用的免费方案是Stream界面清爽支持过滤和域名分组。这两款工具都能在手机上独立工作也可以配合电脑上的Wireshark做深度分析。USB抓包是热搜里的另一个高频词。Windows上Wireshark配合USBPcap驱动就能抓USB总线流量Linux下则用usbmon模块。这类抓包常用于调试USB外设协议比如自定义HID设备、USB转串口通信异常、U盘枚举失败等思路和网络抓包类似只是分析对象从网络包换成了USB请求块URB。蓝牙抓包稍微特殊一点分为两个方向一个是抓HCI层主机控制器接口的日志可以用Wireshark直接打开蓝牙适配器抓取Windows上需要配合支持抓包模式的蓝牙适配器另一个是抓BLE应用层流量常用nRF Sniffer配合Wireshark完成。这类场景偏嵌入式开发和硬件调试普通应用开发者接触较少但遇到蓝牙连接不稳定、数据收发对不上号的问题时HCI日志是最直接的证据。下表把上述工具按“平台”和“适用场景”做了个快速对照方便你收藏后直接选工具平台支持抓包层级免费程度最佳场景WiresharkWindows/macOS/Linux网卡层完全开源免费网络协议分析、底层排障tcpdumpLinux/Unix/macOS网卡层完全开源免费服务器临时抓包Fiddler EverywhereWindows/macOS/LinuxHTTP代理层免费版够用前后端接口调试mitmproxyWindows/macOS/LinuxHTTP代理层完全开源免费自动化流量处理、教学Burp Suite CommunityWindows/macOS/LinuxHTTP代理层社区版免费Web安全测试PCAPdroidAndroid系统流量层完全开源免费手机全局抓包USBPcapWindowsUSB总线层完全开源免费USB设备调试nRF SnifferWindows/macOS/LinuxBLE协议层免费软件蓝牙低功耗调试3. 抓包核心实操细节证书、权限与过滤工具选好只是开始真正决定你能不能抓到有效数据的是环境配置和细节处理。这一节我把最关键的几个环节拆开讲。3.1 先解决权限问题抓不到包九成是权限没到位Wireshark安装后第一次抓包可能提示“没有权限打开网卡设备”。Windows上通常需要以管理员身份运行或者安装驱动后重启一次。macOS和Linux上则要注意当前用户是否在可访问网卡的用户组里Linux还可以用setcap给Wireshark的dumpcap组件单独授权这样就不用每次sudo了sudo setcap CAP_NET_RAWeip /usr/bin/dumpcap手机端抓包同样涉及权限。Android 7及以上版本默认不再信任用户安装的CA证书这会直接导致HTTPS解密失败iOS从较新版本开始对证书信任的管理也更严格。解决办法是在开发者选项或描述文件里明确开启对应证书的完全信任后面讲证书安装时会详细说。3.2 HTTPS解密原理为什么装了证书还是看不到内容代理类工具要解密HTTPS本质上是做了一次“本地中间人”操作工具用自己生成的根证书扮演服务器和客户端建立一条加密通道再和真正的服务器建立另一条加密通道。客户端只要信任了这个根证书就会认为自己连接的就是真实服务器从而把明文数据交给工具。这解释了三个常见问题。第一为什么必须在设备上安装并信任工具的根证书不信任的话客户端校验证书时直接报错请求根本发不出去。第二为什么有些App装了证书还是抓不到这些App做了证书锁定内置了服务器证书的指纹客户端只认预先固定的证书工具伪造的证书过不了校验。第三为什么Fiddler和Wireshark对HTTPS的处理完全不同Wireshark在网卡层看到的HTTPS本来就是密文要解密需要额外配置SSLKEYLOGFILE把浏览器导出的会话密钥喂给Wireshark而Fiddler因为是中间人天然持有解密后的明文不需要这套操作。3.3 证书安装三步走Windows、Android、iOS以Fiddler Everywhere为例解密HTTPS前必须安装根证书。Windows上打开Fiddler后依次点击“Settings”和“HTTPS”选项卡勾选“Capture HTTPS traffic”然后点击“Trust the certificate”按钮证书会自动写入系统信任区。Android上安装稍微讲究一些。把证书导出为.cer文件传到手机在设置里搜索“加密与凭据”选择“安装证书”里的“CA证书”选中刚才的文件即可。安装后还要确认一下“信任的凭据”里“用户”标签页能看到该证书。如果目标App是调试自己开发的App建议直接在AndroidManifest里配置networkSecurityConfig明确信任用户证书这样才不会被系统默认策略拦下。iOS上把证书文件通过Safari打开会提示安装描述文件安装后在“设置-通用-关于本机-证书信任设置”里把对应的开关打开否则证书装了但不被信任等于白装。注意证书是敏感资产Fiddler或mitmproxy生成的根证书私钥如果泄露别人就能用它解密你所有设备上的HTTPS流量。在公共环境或团队共享电脑上用完抓包工具后一定要把根证书从系统信任区移除。3.4 过滤是抓包的第一生产力Wireshark界面会让你看到成百上千条包如果不加过滤眼睛会直接瞎掉。这里有个容易混淆的概念抓包过滤和显示过滤。抓包过滤在抓包开始前就设置只抓符合条件的包不满足条件的直接丢弃能大幅降低存储和CPU开销。Wireshark的抓包过滤用的是BPF语法常见写法是host 192.168.1.10 and tcp port 443显示过滤则是在已经抓到的包集合里做筛选数据已经全部落盘只是显示时藏掉不符合条件的行。日常调试用显示过滤最多因为它灵活改一行条件立刻刷新http.request.method GET http.host contains api.example.com tcp.flags.syn 1大流量抓包时我建议组合使用启动前用抓包过滤圈定IP和端口抓完再用显示过滤精确定位具体报文。这样既省资源又能在复杂流量里快速找到目标。4. 实操全流程三个高频场景现场演示光讲理论不落地等于白说。我挑三个工作中最常遇到的抓包场景完整走一遍流程。4.1 场景一用Wireshark抓本机HTTP请求并追踪完整TCP流假设你正在调试一个本地Web应用启动后访问http://localhost:8080/api/users但响应一直不符合预期。想看看请求发出后TCP层到底发生了什么那就打开Wireshark。第一步在网卡选择界面选“Loopback: lo”或“Adapter for loopback traffic capture”对应Windows的Npcap Loopback Adapter因为访问localhost时流量只在回环接口上走选物理网卡会抓不到。第二步设置抓包过滤为tcp port 8080点开始。此时去浏览器刷新一次页面让请求真实地走一遍。第三步停止抓包。在显示过滤框输入http就能看到刚才的HTTP请求和响应报文。右键点击那条GET /api/users的报文选择“Follow”再选“HTTP Stream”Wireshark会把这次TCP连接里的所有HTTP载荷拼起来以可读文本形式展示请求头、请求体、响应体一目了然。这个操作最关键的价值在于你能同时看到这次请求的TCP握手是不是正常、有没有重传、HTTP响应到底晚在哪一毫秒这是浏览器开发者工具给不了的底层视角。提示如果请求是本机发到远端服务器选网卡时就不要选Loopback了改成实际上网的Wi-Fi或以太网卡抓包过滤保持tcp port 443即可。需要注意HTTPS默认443端口是加密的Wireshark要看到明文需要额外配置TLS解密配置方式见下一节。4.2 场景二用Fiddler Everywhere抓HTTPS接口和微信小程序流量微信小程序抓包一直是热搜词实际步骤并不复杂。核心思路是让手机流量统一走Fiddler本地代理。先在电脑上启动Fiddler Everywhere打开“Settings”确认HTTPS解密已开启。再确认“Connections”里的监听端口是8888。然后在同一局域网里让手机手动设置代理代理地址填电脑的局域网IP代理端口填8888。Android和iOS都支持手动代理设置一样的位置在Wi-Fi详情里改。设置完成后打开微信随便进一个小程序刷新页面。回到Fiddler看到会话列表里出现大量域名。为了聚焦小程序本身的请求可以在左下角过滤器输入小程序的API域名比如api.xxx.com。点击任意一条会话右侧会展示请求头和响应头响应体如果已经是解密后的明文JSON说明HTTPS解密成功可以进行断点调试或参数修改。这里有几个非常容易踩的坑。第一手机和电脑必须同一网段且路由器没有开启AP隔离否则手机根本连不上电脑的代理端口。第二代理设置后如果小程序报网络错误先检查电脑防火墙是否放行了8888端口。第三Android 7以上系统如果没做证书信任配置即使装了证书也解不开小程序里的HTTPS这会直接表现为会话列表里能看到请求、但响应体全是乱码。第四部分小程序在代码里做了证书校验或不走系统代理这类情况Fiddler就无能为力了需要用PCAPdroid在系统流量层抓取或者市面上的专用hook方案但这属于深度逆向范畴不在本文讨论范围内。需要提醒一句分析小程序或App流量时一定要确认自己有合法授权只对自己开发和负责的应用做调试。对第三方应用抓包在不了解其协议合规要求的情况下有可能构成合同违约或法律风险建议把抓包对象严格限定在学习、开发和自有资产范围里。4.3 场景三用mitmproxy加tcpdump完成服务器接口链路分析线上接口偶发超时你的第一反应往往是先上tcpdump因为服务器上装图形界面不现实而tcpdump几乎零依赖。第一步确认网卡名称ip a第二步抓10秒的80端口流量保存成文件tcpdump -i eth0 tcp port 80 -w /tmp/debug.pcap -G 10 -W 1第三步如果此时接口是HTTPS线上环境一般不方便做中间人解密我们就从网络层找线索。把debug.pcap下载到本地用Wireshark打开看TCP Stream的往返时间、重传率、窗口大小。如果看到大量Dup ACK说明链路丢包严重如果看到服务端很久才回SYN-ACK说明服务端accept队列可能满了。如果你有条件在测试环境做更深度的接口分析可以启动mitmproxy把被测服务的流量指向它。比如把测试App或后端调用链路的HTTPS请求全走mitmproxy一边跑测试脚本一边用mitmdump把每个请求的耗时记下来mitmdump --listen-host 0.0.0.0 -p 8888 -w flows.mitm后续用mitmproxy的web界面输入web启动在浏览器里回放和分析比在终端里看舒服得多。这套组合拳能同时覆盖“传输层有没有问题”和“应用层到底是哪个接口慢”两个层面基本能把线上疑难杂症缩小到可定位范围。5. 常见问题与排查技巧实录网上搜索抓包相关热词时很大一部分人其实是被问题逼到这一步的。这一节我把高频问题按现象、原因、解决办法整理成速查表直接对号入座即可。现象常见原因排查与解决Wireshark打开后抓不到任何包网卡选错或驱动未安装成功确认选的是实际通信网卡Windows重装Npcap驱动macOS在系统设置里为Wireshark授权Fiddler抓不到手机流量代理没设置对、端口没放行、AP隔离检查手机代理IP和端口检查电脑防火墙把手机和电脑连同一路由器HTTPS响应体全是乱码证书未安装或未信任重新安装根证书Android确认用户凭据已启用iOS确认“证书信任设置”开关已打开抓包过程中应用网络报错证书校验失败或应用不走代理确认证书是“CA证书”类型部分App不遵守系统代理改用PCAPdroid类工具抓包文件巨大Wireshark卡死没设抓包过滤跑了太久启动前用BPF过滤缩范围使用环形缓冲区限制文件大小限制抓包时长手机抓包时证书反复失效手机系统时间不准导致证书有效期校验失败校准手机时间后再安装证书5.1 抓包列表一直为空先别怀疑工具第一次用Wireshark时抓不到包的经历我估计人人都有。多数情况不是工具坏了而是网卡选错了。笔记本同时开着Wi-Fi、有线网卡和蓝牙网卡默认选的未必是真正通信的那个。另外一个高频原因是环境问题公用Wi-Fi或公司网络开启AP隔离后手机即使能上网也无法访问电脑上的代理端口。还有个容易忽略的点是代理环境和抓包工具的联动关系。如果你本机已经开了系统代理比如某些加速类软件、公司合规代理那么Fiddler这类代理工具和已有代理之间会存在端口抢占或流量环路抓包结果可能异常。排查时先把系统代理关掉再用Fiddler单独监听往往能解决一半问题。5.2 HTTPS解密失败的几类原因与对策解密HTTPS出现乱码或空白大致有三类。第一是证书问题按上面表格里的方式排查。第二是TLS版本和加密套件问题旧版本工具可能不支持TLS 1.3抓包时代理会报错升级工具版本就能解决。第三是会话复用问题客户端和服务端通过TLS会话票证直接恢复了之前加密会话代理没有对应的对称密钥此时看到的还是密文。遇到这种情况在Fiddler设置里启用“忽略TLS会话复用”或重开一次应用进程即可。Wireshark解密HTTPS的思路不同不使用中间人代理而是利用浏览器或应用导出的会话密钥。Firefox和Chrome支持SSLKEYLOGFILE环境变量设置后会把TLS会话密钥写入指定文件Wireshark在“Protocols-TLS-Pre-Master-Secret log”里指向该文件就能解开抓到的HTTPS包。这个技巧在排查浏览器与后端之间的加密问题时特别有用比如想验证证书链、检查ALPN协商结果。5.3 小程序和App抓包为什么总有例外从热搜词就能看出小程序和App抓包需求极大但现实很骨感。微信小程序框架有一部分内置组件不走标准系统代理这会导致Fiddler默认抓不到部分App使用了HTTP/2甚至QUIC协议代理工具版本太旧就识别不了还有一类App直接在代码里做了证书锁定即使证书信任配置全对中间人代理依然会被拒绝。应对策略是分层的。遇到App不走系统代理第一反应是在Android上用PCAPdroid这类系统流量层工具全局抓包遇到证书锁定如果没有合法授权建议停止绕过行为而是从自己的测试包里关闭证书校验、用官方调试接口排查遇到抓包工具不支持新协议优先升级工具版本或换用支持QUIC的Wireshark新版。这里要特别注意证书锁定是应用开发者保护通信安全的手段强行绕过它去抓第三方App流量不仅可能破坏安全性也可能触碰法律边界务必在自己拥有权限的范围内操作。5.4 网课视频抓包这个话题我多说两句热搜词里“网课视频抓包工具”一直存在。从纯技术角度讲在线视频不论走什么协议本质都是把视频内容分片传输抓包可以看到这些分片的URL、编码格式和下载流程。很多人的诉求是“把自己已经购买权限的视频缓存下来方便离线回放”。我的建议是技术可以研究但边界要清楚。对于明确允许离线下载的平台直接用官方客户端缓存功能即可对于不允许下载的课程内容抓包破解下载属于绕过技术保护措施的行为在合同和法律层面都有风险。如果你真的想学习这块技术更稳妥的方式是自己搭一个测试视频服务或者找一些CC0授权、开放下载的公开视频做分片协议分析理解原理完全足够没必要踩红线。6. 选型之外我再分享三点实操心得第一抓包工具不是越多越好而是按照“底层一套、代理一套、手机一套”的配置来沉淀自己的工具箱。我的固定组合是Wireshark加tcpdump负责底层和服务器Fiddler或mitmproxy负责接口调试手机端PCAPdroid备用。这样无论遇到什么网络问题都能快速切换到对应工具不用临时去网上翻教程。第二养成“抓包前先定目标”的习惯。每次抓包前先想清楚三件事我要看的流量是网卡层的还是应用层的这个流量走不走代理是HTTPS还是明文HTTP把这三件事想明白抓包成功率至少提高一半也能少做很多无用功。第三抓包数据本身是高度敏感的。流量里可能有密码、Token、身份证号、聊天内容拷贝pcap文件时要像对待数据库备份一样谨慎。调试完及时清理临时文件不要把包含真实用户数据的抓包文件随意上传或分享给别人。哪怕是在自己公司里也要遵守数据安全规范只保留解决问题所必需的那部分数据。
返回列表