v1.3.2-beta 已发布啦~ 这次 Sonic 云真机的版本有个很亮眼的功能,就是在线代理网络抓包。
1、打开对应 tab 页面,下面以今日头条 App 为例
2、首次使用需要安装证书,点击下载证书按钮,手机会自动跳转到下载页,下载证书后安装即可
3、点击开始代理,就可以使用啦~
4、点击对应接口可以看到详细信息
过去我们手机抓包本来就是不太方便,连接 wifi、手动配置代理、信任证书、开启服务等等步骤比较麻烦。不少用户提出这个需求后决定动手做下这个事情,将 http 和 https 的抓包放到平台上,确实能解决不少用户的烦恼啊,话不多说,开干。
接下来对 go-mitmproxy 进行了定制改造与优化,当然优化的点我也会提交 pr 给原作者,原作者也十分满意,后续也欢迎 sonic 一同建设。毕竟共同建设比自己二开成长会更快呀!
优化点:
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~
定制部分:
定制部分主要针对 sonic,所以这部分就没有提交 pr 了。定制结果就是 Sonic 第二个周边生态sonic-go-mitmproxy
定制与优化部分完毕了,接下来就是接入到 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 目前还在不断前进,希望大家多多支持,不满意或者需要改进的点欢迎提出哦,你也是贡献者之一!哦对了这版本还有很多新功能,大家也可以去玩耍