背景
- 常用抓包工具:charles,fiddler,mitm等,
- http:设置系统代理
- https: 导入根证书
- 为什么有些app上抓不到包
- no-proxy , 原因:httpclient实现比较多,并不能保证都完整支持http协议规范
- drony,Thor,surge 模拟vpn网络,拦截请求后转发到代理服务
- ssl pinning,例:nodejs 自带根证书,不使用操作系统中的根证书
- 根证书
- https证书校验:可考虑关闭https 证书校验
- 使用http请求
- 导入生产环境的证书(不安全)
- no-proxy , 原因:httpclient实现比较多,并不能保证都完整支持http协议规范
实现思路
目标
- 多租户
- 证书安全
思路
sequenceDiagram
user ->> proxy: new req
proxy ->>proxy: 提取sni ext,判断是否包含此域名证书
proxy ->> capture-server: 无证书,通过socks协议转发请求
proxy ->> user: 有证书,handshake
user ->> proxy: 发送完整请求
proxy ->> capture-server: 解析请求,并通过http-client转发(insecure模式)
capture-server ->> real-server: 解析请求,抓包,并转发请求
效果图:

管理后台

使用说明
说明:
1. 客户端IP 是要抓包的机器(如手机/pc等)的IP地址,从各机器上查看
2. 代理IP 是抓包软件的IP,如charles或fiddler提供的代理地址
操作步骤:
1. 启动charles等抓包软件,记住代理IP,格式如 10.238.23.2:8888
2. 查看要抓包的客户端的IP,如手机或PC的本机IP,格式如:10.238.23.5
3. 在管理后台添加客户端IP和代理IP
4. 在要抓包的机器的设置DNS(10.238.17.13)或修改HOST(10.238.17.13 note.youdao.com)
5. 运行要抓包的app即可
注意:
1. 抓包软件和要抓包的app不应在同一个机器上,如要测试pc上的electron客户端时应在另一台机器上运行抓包软件
参考实现
https://github.com/snaigle/sniproxy