平时开发调试网页或者App,总免不了想知道某个按钮点下去后,到底发了什么数据给服务器。这时候,抓包就成了最直接的办法。很多人会问:手头常用的测试工具能不能抓包分析?答案是,有些可以,有些得配合专门工具才能干这活。
常见的测试工具支持抓包吗?
比如Postman、JMeter这类工具,主要用途是发起请求或做性能测试,它们本身不直接监听网络流量,所以不能像“嗅探器”那样自动捕获你手机App发出的所有包。但它们能“重现”和“分析”抓到的数据。换句话说,它们更适合在你已经知道请求结构的前提下,去模拟和调试。
真正能抓包的是谁?
真正能抓包的工具是像Charles、Fiddler、Wireshark这样的代理型抓包工具。它们的工作原理很简单:让你的设备通过它们设置的代理服务器上网,所有请求先经过它们,再发出去,这样就能看到明文内容(前提是HTTP,HTTPS需要额外配置证书)。
举个例子,你在手机上设置好Wi-Fi代理指向电脑上的Charles,打开一个购物App,刷新首页,Charles就会列出所有请求:图片、商品列表、广告接口,一个不落。点开任何一个,都能看到请求头、参数、返回数据,甚至响应时间。
HTTPS也能抓?
很多人以为HTTPS加密了就看不到了,其实只要在手机上安装抓包工具提供的根证书,照样能解密。但这一步必须手动操作,否则会显示“连接不安全”或直接失败。这也是为什么第一次用Charles抓手机App时,总要跳转去装个证书的原因。
测试工具如何结合抓包使用?
实际工作中,通常是先用Charles或Fiddler抓出请求,复制请求头和参数,然后粘贴到Postman里重放。比如登录接口带了一堆加密参数,手动拼太麻烦,直接从抓包结果里复制过来,改几个值就能测试。
甚至可以把抓到的Har文件导入Postman,自动还原所有请求。这种配合方式,比单纯依赖某一个工具高效得多。
命令行玩家的选择:tcpdump + Wireshark
如果你在Linux服务器上调试,没有图形界面,可以用tcpdump抓包生成pcap文件,再下载到本地用Wireshark分析。比如:
tcpdump -i any -s 0 -w capture.pcap host api.example.com
这条命令会记录所有访问api.example.com的流量,保存为capture.pcap。之后用Wireshark打开,就能逐条查看TCP握手、HTTP请求、响应内容。
移动端抓包小技巧
安卓和iOS都可以通过代理方式抓包,但iOS从10.3以后对未签名证书更严格,必须在“设置-通用-关于本机-证书信任设置”里手动开启完全信任。安卓则通常只需安装证书到系统区或用户区即可。
某些App还会做证书绑定(SSL Pinning),防止被抓包。这时候就得用Xposed、Frida等工具动态绕过验证,属于进阶玩法,普通测试一般用不到。
自动化测试中怎么集成抓包?
在自动化脚本中,也可以嵌入抓包逻辑。比如用Python的mitmproxy库,写个简单脚本就能监听所有请求:
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
if "login" in flow.request.url:
print(f"[Login Request] {flow.request.text}")
def response(flow: http.HTTPFlow) -> None:
if "user_info" in flow.request.url:
print(f"[User Info] {flow.response.text}")
启动这个脚本作为代理,运行App,所有包含login和user_info的请求和响应都会被打印出来,方便后续分析。