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:portadb shell settings put global http_proxy :0
这样,就能够实现开启go-mitmproxy、利用Agent做证书下载服务、连贯代理、开启Web页面一系列操作了。而用户只须要简略操作,就能体验到残缺的性能。
结语
Sonic目前还在不断前进,心愿大家多多反对,不称心或者须要改良的点欢送提出哦,你也是贡献者之一!哦对了这版本还有很多新性能,大家也能够去游玩