分享环节:
- 代理服务功能介绍
- 解决哪些场景
- 如何快速使用
- 抓包服务思路
- 抓包服务实现
- 遇见哪些问题和解决办法
- 抓包服务展望
一、代理服务功能介绍
- 代理ip直显。一般方式:Mac:ifconfig | grep “inet” | Windows:ipconfig | Charles:Help→Local IP Adress→en0
- 代理设置简单。手机wifi设置+扫描二维码+安装证书
- 代理方式操作简单。全局开关+代理方式+共享代理+实时生效
- 保留历史数据,和即时数据区分开定时任务。历史数据保留7天,即时数据每天清空
- 小工具扩展。个人信息:mid+uid+tuid
- 抓包数据简洁雅观。请求顺序、请求信息清晰明了
二、解决哪些场景
- 产运测试&预发环境验收麻烦
- 出现问题,保留第一现场
- 共享抓包数据
- 大大减轻安卓手机安装证书困难
- 快速获取信息
- 有效远程沟通
三、如何快速使用
- 配置代理。
- 模糊查询。
四、抓包服务思路
对比开源Whistle、Anyproxy发现一些短板:
- 实现代理比较麻烦,要根据规则编写rule.js脚本
- 指向域名后,前端并未实时变更
- 要么工具少,要么工具齐全,但使用成本高
- 只有即时数据,没有历史数据
期望的工具:
- 抓包数据共享,不再本地化
- 代理设置操作尽可能简单
- 安装证书尽可能简单
- 历史数据可以追溯
- 衔接小工具,扩展不局限于redis、api等
五、抓包服务实现
技术链路:客户端—>Mitmproxy—>MongoDB—>Django—>App工厂
为何用到Mitmproxy、MongoDB:
- Mitmproxy是python第三方库,易于服务集成
- MongoDB,存储文档类型数据,和Mitmproxy输出数据很契合,尤其像header、query、body不确定具体返回字段,取数也不需要转化,提高存储和读取性能
Mitmproxy+MongoDB实现数据存储和清洗:
- python脚本绑定端口启动Mitmproxy服务
- 启动客户端后,抓包数据解析和存储。request、response对象解析,存储为历史数据和即时数据
- 定时任务:每周删除一次历史数据,每天清洗即时数据
- 实时读取Map Remote、Map Local、Rewrite配置以及全局开关并生效
Django+Mongodb读取数据并保存代理配置:
- 实现新增、编辑、删除代理配置
- 实现临时表,用于即时代理
- 实现全局开关
- 实现模糊查询即时数据和历史数据
- 实现读取单个请求数据明细
Vue+Django实现数据展示以及工具操作:
- 展示二维码下载证书
- 实时展示抓包服务ip和端口
- 实现代理操作页面
- 展示即时数据和历史数据
- 展示单个请求数据明细
- 实现Copy、Curl、Repeat
六、遇见哪些问题和解决办法
- 手机浏览器不能下载apk,初步排查是包体过大,mongodb拒绝访问。暂时未解决
- 当https指向http时,mitmproxy拒绝访问。原因是mitmproxy官方未对http2兼容,关掉http2配置即可
- Vue.js轮询太短,比如1s,那么在下拉表格查看数据时,出现短暂卡顿。暂时未解决
- 如果部署到ECS集群,如何像VPN一样保证局域网一致。暂时未部署
- 如何将request请求转化成Curl格式,从而被复制。参照Curl格式用js模拟
七、抓包服务展望
- 扩展工具:如何更贴近业务。开发个性化实用工具
- 后端部署服务。MongoDB成本以及解决局域网问题
- 如何实现共享的同时也能独立分化。每个人都能使用不同代理服务,但也能相互访问