关于fiddler:什么Sonic-云真机还能在线代理网络抓包

21次阅读

共计 2210 个字符,预计需要花费 6 分钟才能阅读完成。

v1.3.2-beta 已公布啦~ 这次 Sonic 云真机的版本有个很亮眼的性能,就是在线代理网络抓包。

先上应用教学

1、关上对应 tab 页面,上面以今日头条 App 为例

2、首次应用须要装置证书,点击下载证书按钮,手机会主动跳转到下载页,下载证书后装置即可

3、点击开始代理,就能够应用啦~

4、点击对应接口能够看到详细信息

背景

过来咱们手机抓包原本就是不太不便,连贯 wifi、手动配置代理、信赖证书、开启服务等等步骤比拟麻烦。不少用户提出这个需要后决定动手做下这个事件,将 http 和 https 的抓包放到平台上,的确能解决不少用户的懊恼啊,话不多说,开干。

技术预研

  1. 常见的抓包工具是 fiddler、charles,桌面端的移植到 Web 端力量是比拟大的。根本能够马上排除。
  2. js 有一个 whistle,过后感觉就不错,npm 能够间接部署,并且性能强,附带 web 页面。惋惜目前逐步排除 npm 依赖,缩小用户装置门槛,所以这个临时作为保底计划。
  3. python 有个不错的工具叫 mitmproxy,间接 py 部署,有证书,有 web 页面,都齐全了。惋惜 sonic 目前曾经排除了 py 依赖,所以同上,临时作为保底计划
  4. 哎?原来还有人做了 go 版的 mitmproxy,叫 go-mitmproxy,应用起来不错,该有的都有了,而且 go 打包后的二进制文件能够间接运行,不须要额定依赖,行,就选你了。

革新 go-mitmproxy

接下来对 go-mitmproxy 进行了定制革新与优化,当然优化的点我也会提交 pr 给原作者,原作者也十分满意,后续也欢送 sonic 一起建设。毕竟独特建设比本人二开成长会更快呀!
优化点:

  1. go-mitmproxy 默认证书生成在用户根目录.mitmproxy 文件夹上面,这个有一个不够好的中央是用户须要先找到证书能力 push 给手机装置,那么 sonic 作为平台化的货色,这个必定是不够敌对的。于是微调了代码,给原我的项目加上了自定义证书生成目录,这样的话 sonic 的 Agent 端也能够间接做一层文件转发。手机只须要去到 Agent 下载页即可下载。
  2. 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
    }
  3. go-mitmproxy 默认的 web 页面高低滚动时,只是接口列表的表头吸顶,然而头部比拟重要的筛选输入框没有做这个解决,于是乎咱们的前端小伙也帮忙优化,最终做成了整个吸顶。我也对表宽度加上了自定义伸缩适配,适配较小分辨率的浏览器。

    .top-control {
      position: sticky;
      display: flex;
      align-items: center;
      background-color: #fff;
      top: 0;
      padding: 10px;
    }

最终提交 pr 如下:

当然也欢送大家参加建设 go-mitmproxy~

定制局部:

  1. 次要是替换 react 默认 logo 与去除局部外链,打造更贴合 Sonic 业务的界面
  2. 缩小 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 目前还在不断前进,心愿大家多多反对,不称心或者须要改良的点欢送提出哦,你也是贡献者之一!哦对了这版本还有很多新性能,大家也能够去游玩

正文完
 0