抓包思路的产生
抓包是什么
- 官网解释:抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。
- 简而言之:截取请求包,想干啥干啥
为什么要抓包
- 分析bug(接口传参、返回body、header请求头)
- 接口调试(Map、Rewrite、Throttling、Repeat、Filter、breakingpoint)
- 请求记录(功能、对接)
抓包工具有哪些
目前常用:Fiddler、Charles、F12
不常用:Wireshark、Sniffer、Postman
开源工具:阿里的Anyproxy、腾讯的Whistle、python第三方库mitmproxy
抓包工具都有哪些短板
- Fiddler:只适用于Windows系统,且安装环境依赖java
- Charles:只适用于Mac系统,不支持二次开发
- F12:只适用于web,不支持二次开发
- Postman:需要浏览器设置代理,不支持二次开发
- Anyproxy:JS开源,可视化页面内容较少,规则文件执行单一
- Whistle:JS开源,配置规则太繁琐
目前来说,Whistle是最接近理想的抓包工具
为什么不用以上工具
- Fiddler、Charles只能在本地部署
- Postman代理设置对于除测试人员门槛较高
- Anyproxy、Whistle定制规则不够理想,操作复杂
理想型的工具是什么样
- 拥有Charles的可视化Map、Rewrite等功能
- 支持共享、服务化,降低新手使用门槛
- 自定义规则且能批量处理,操作简单
- 一键下载安全证书,避免各个安卓系统安装证书的困难
- 可扩展性,对接自动化、小工具、监控等
有什么办法去实现
- 怎么获取抓包请求流?
python+第三方库mitmproxy能通过flow的方式获取到抓包数据,每个flow包含请求明细。
python+标准库socket能获取到任何方法的二进制数据,暂不使用。 - 请求流如何展示?(MVC模式)
- 存储flow数据
- 服务端api高效查询数据
- 前端调用api获取数据并格式化展示
- 怎么存储flow数据?
- 是当前所有flow汇总到一个集合插入还是每一个flow插入?由于实时性,每一个flow插入
- 插入什么db?flow更像一个包文件,优先采用mongoDB,采用键值对的形式存储
- 怎么高效查询数据?
- 一个search api查询所有数据的请求部分
- 一个search_one api查询每个flow的所有部分
- 怎么展示数据?
- vue table调用search
- 点击任意cell调用search_one
- 怎么自定义规则?
- 一个map_remote api插入mongoDB,一个search_remote api查询remote规则
- 同理map local、rewrite
实现抓包服务技术结构:
- 获取flow数据并存储:python+mitmproxy+mongoDB
- 实现api:python+Django+mongoDB
- 实现可视化:antd vue
- 实现安全证书二维码:qrcodejs2