v1.3.2-beta 已公布啦~ 这次 Sonic 云真机的版本有个很亮眼的性能,就是在线代理网络抓包。
先上应用教学
1、关上对应 tab 页面,上面以今日头条 App 为例
2、首次应用须要装置证书,点击下载证书按钮,手机会主动跳转到下载页,下载证书后装置即可
3、点击开始代理,就能够应用啦~
4、点击对应接口能够看到详细信息
背景
过来咱们手机抓包原本就是不太不便,连贯 wifi、手动配置代理、信赖证书、开启服务等等步骤比拟麻烦。不少用户提出这个需要后决定动手做下这个事件,将 http 和 https 的抓包放到平台上,的确能解决不少用户的懊恼啊,话不多说,开干。
技术预研
- 常见的抓包工具是 fiddler、charles,桌面端的移植到 Web 端力量是比拟大的。根本能够马上排除。
- js 有一个 whistle,过后感觉就不错,npm 能够间接部署,并且性能强,附带 web 页面。惋惜目前逐步排除 npm 依赖,缩小用户装置门槛,所以这个临时作为保底计划。
- python 有个不错的工具叫 mitmproxy,间接 py 部署,有证书,有 web 页面,都齐全了。惋惜 sonic 目前曾经排除了 py 依赖,所以同上,临时作为保底计划
- 哎?原来还有人做了 go 版的 mitmproxy,叫 go-mitmproxy,应用起来不错,该有的都有了,而且 go 打包后的二进制文件能够间接运行,不须要额定依赖,行,就选你了。
革新 go-mitmproxy
接下来对 go-mitmproxy 进行了定制革新与优化,当然优化的点我也会提交 pr 给原作者,原作者也十分满意,后续也欢送 sonic 一起建设。毕竟独特建设比本人二开成长会更快呀!
优化点:
- go-mitmproxy 默认证书生成在用户根目录.mitmproxy 文件夹上面,这个有一个不够好的中央是用户须要先找到证书能力 push 给手机装置,那么 sonic 作为平台化的货色,这个必定是不够敌对的。于是微调了代码,给原我的项目加上了自定义证书生成目录,这样的话 sonic 的 Agent 端也能够间接做一层文件转发。手机只须要去到 Agent 下载页即可下载。
-
go-mitmproxy 默认没有生成 cer 证书,只有 pem 证书。然而有的安卓机器不辨认 pem 证书,于是我也加以优化,加上了 cer 证书的生成。
func (ca *CA) saveCert() error {file, err := os.Create(ca.caCertFile()) if err != nil {return err} defer file.Close() err = ca.saveCertTo(file) if err != nil {return err} return ca.saveCertTo(file) cerFile, err := os.Create(ca.caCertCerFile()) if err != nil {return err} defer cerFile.Close() err = ca.saveCertTo(cerFile) if err != nil {return err} return err }
-
go-mitmproxy 默认的 web 页面高低滚动时,只是接口列表的表头吸顶,然而头部比拟重要的筛选输入框没有做这个解决,于是乎咱们的前端小伙也帮忙优化,最终做成了整个吸顶。我也对表宽度加上了自定义伸缩适配,适配较小分辨率的浏览器。
.top-control { position: sticky; display: flex; align-items: center; background-color: #fff; top: 0; padding: 10px; }
最终提交 pr 如下:
当然也欢送大家参加建设 go-mitmproxy~
定制局部:
- 次要是替换 react 默认 logo 与去除局部外链,打造更贴合 Sonic 业务的界面
- 缩小 arm 平台的依赖
定制局部次要针对 sonic,所以这部分就没有提交 pr 了。定制后果就是 Sonic 第二个周边生态 sonic-go-mitmproxy
接入 Sonic
定制与优化局部结束了,接下来就是接入到 Sonic 外面去。
个别咱们应用代理第一步是连贯 Wifi,目前 wifi 列表和连贯 Wifi 的性能咱们还在打磨,目前实现的成果不够精细化,所以目前须要用户本人手动连贯 Wifi。
第二步是配置代理,配置代理有看过一些开源我的项目:https://github.com/steinwurf/adb-join-wifi,根本大部分的我的项目写法跟这个差不多,的确很不便,一条指令连贯 wifi 加上配置代理。惋惜大部分 API 都曾经过期了,安卓 10 开始大部分 API 用不了,那这种状况怎么办呢?
Sonic 目前只能选用全局代理,而后用户退出的时候勾销全局代理来实现。那么这时候又有人问了,全局代理勾销之后不是要重启手机吗?
其实是能够做到不必重启手机的,只不过目前百度的话 99% 的帖子都找不到这个正确答案(可能太多人复制粘贴了):
adb shell settings put global http_proxy ip:port
adb shell settings put global http_proxy :0
这样,就能够实现开启 go-mitmproxy、利用 Agent 做证书下载服务、连贯代理、开启 Web 页面一系列操作了。而用户只须要简略操作,就能体验到残缺的性能。
结语
Sonic 目前还在不断前进,心愿大家多多反对,不称心或者须要改良的点欢送提出哦,你也是贡献者之一!哦对了这版本还有很多新性能,大家也能够去游玩