线上的产品出现BUG无法通过代码注入或者获取日志的方式定位问题,或者要抓取第三方应用程序的接口。这时候就需要用到抓包了,它通过一种网络层的方式来获取所有的网络请求。
目前 Windows 上主流的抓包软件有两类
- 监听网卡(Wireshark)
- 监听端口(Fiddler)
Wireshark 通过 libpcap/WinPcap 从底层抓取网络数据包,并通过不同类型的网络接口(包括以太网、令牌环网、ATM网等)获取数据包。
Fiddler 抓包的原理主要是开启一个 HTTP 网络代理服务,监听并拦截本机某端口的 HTTP 请求,再将其转发到目标服务器。
- Fiddler 仅作为监听 HTTP/HTTPS/FTP 的专用软件,简单好用,界面直观。
- Wireshark 是全能软件,除了 HTTP/HTTPS,TCP,ICMP 之类的包也不在话下,但是功能就比较复杂了,操作略显繁琐
https://www.telerik.com/download/fiddler/fiddler4
- 删除之前的所有记录
- 浏览器打开百度,搜索一个关键词,我这里搜索 “数码宝贝”
- 右侧的选项卡切换到 “WebForms”,即可查看到所有请求参数了。该表格中的值字段会将 URLEncode 之后的字符进行解码,从而展现一个原始的字符串,方便查看。
- 首先,将手机与PC连到同一个局域网(同一个WIFI)
- 工具栏 Tools —> Options,打开 Options 对话框。
- 在 Connections 选项卡中,勾选 Allow remote computers to connect,允许远程计算机连接
- 切换到 HTTPS 选项卡,点击 Actions 按钮,Export Root Certificate to Desktop,将 FiddlerRoot.cer 证数导出到桌面。
- 将 FiddlerRoot.cer 下载到手机中
我用的是乐檬3S,andorid 6.0
如果直接点击证数文件,会提示 “无法安装该证数,因为无法读取证数文件”。
解决办法:
设置 —> 安全 —> 凭据存储 —> 从内部存储设备安装。然后打开证数,随便起一个名字,凭证用途选则 “VPN和应用”,点击确定。证数就被安装进去了。
设置 —> 安全 —> 凭据存储 —> 信任的凭据,可以看到,刚刚安装的 Fiddler 证数,被安装到用户证数,这一栏里了,还自动添加了一个前缀 DO_NOT_TRUST
但不影响,至此,证数安装成功
添加证数后,有的手机需要重启一下才能生效,否则很多信息捕获不到
抓取酷狗音乐歌曲链接
手机打开酷狗APP,搜索 “年少有为” 这首歌,点击播放。这时候 Content-Type = audio/mpeg 的就是歌曲链接了。
Android 7.0 及后面的版本,即便是导入了 Fiddler 根证数,应用的 URLConnection、OkHttp、Retrofit、WebView,也仍然不会信任它。
原因在 Android 的官网上有说 https://developer.android.google.cn/training/articles/security-config.html
网络安全配置
配置文件格式
res/xml/network_security_config.xml 文件的格式如下
标签含义
- base-config 配置可信赖的域名和CA(应用范围的自定义)
- domain-config 配置可信赖的域名和CA(网域范围的自定义)
- domain 信赖的域名
- trust-auchors 信任其他CA
- debug-overrides 配置用于调试的CA
- pin-set 固定证数集合,可设置其有效时间
- pin 公钥的哈希值(X.509证书的 SubjectPublicKeyInfo)
- cleartextTrafficPermitted 允许明文的HTTP
自定义可信CA
应用可能需要信任自定义的 CA 集,而不是平台默认值。出现此情况的最常见原因包括:
- 连接到具有自定义证书授权机构(如自签名或在公司内部签发的CA)的主机
- 仅限您信任的CA(而不是每个预装CA)
- 信任未包含在系统中的其他CA
默认情况下,来自所有应用的安全连接(使用 TLS 和 HTTPS 之类的协议)均信任预装的系统CA,而面向 Android 6.0(API 级别 23)及更低版本的应用默认情况下还会信任用户添加的 CA 存储区。 应用可以使用 base-config(应用范围的自定义)或 domain-config(网域范围的自定义)自定义自己的连接。
因此,在 Android 7.0及以上的版本中,Fiddler 的证书会被安装到 “用户区”。但这个用户区又是默认不被信任的。因此,我们只需要添加上述配置,让应用程序信任用户区的 CA 即可
第三方程序,绕过限制
下面结论(暂未验证)摘自:https://blog.csdn.net/qq_15156393/article/details/90520825?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
Android7.0及以上系统,默认只信任系统自带的CA
解决方案