用web抓包调试代理工具时,经常会遇到无法抓取命令行工具或某些客户端的网络请求,因为这些请求不走系统代理,这个给我们的开发工作带来一些不便,有没有工具可以实现抓包调试任意客户端的请求?当然有,本文将讲下如何用whistle和proxifier抓包调试任意客户端的网络请求,不仅支持普通的web请求(HTTP、HTTPS、WebSocket),也支持TCP请求。
先简单介绍下whistle和proxifier:
whistle简介
whistle是基于Node实现的跨平台web抓包调试代理工具:
- 完全跨平台,支持运行在Mac、Windows、Linux/Unix桌面及命令行系统
- 支持抓包调试HTTP、HTTPS、WebSocket及Socket,可以修改请求响应的所有内容
- 内置weinre,支持查看修改移动端网页的DOM结构
- 内置Log功能,支持自动捕获网页的所有js异常及console.xxx输出各种类型数据
- 操作简单,所有操作都可以通过类似配置hosts的方式实现
- 支持通过Node模块的插件扩展功能
有关whistle的详细内容直接访问Github:https://github.com/avwo/whistle。
proxifier简介
proxifier是一个跨平台的设置代理客户端,支持socks和http代理协议,它可以拦截任意客户端的所有网络请求,并把请求代理到指定的代理服务器,proxifier基本用法可以先参考:代理工具Proxifier如何使用。
有关proxifier的详细内容直接访问其官网:https://www.proxifier.com
proxifier官方只有Windows和Mac版本,其它平台如Linux可以有很多替代方案,有需要的话可以自己网上搜索
从上面的介绍可知,通过proxifier拦截任意指定客户端的请求,并通过HTTP代理转发到whistle,即可实现抓包调试任意客户端的请求,下面详细讲下如何安装配置whistle和proxifier实现该功能:
安装配置whistle
-
安装Node(如果已安装可以忽略此步骤):建议安装最新版本Node,直接访问官网安装即可。
-
安装whistle(需要安装最新版本的whistle(
>=v1.10.6
)):npm i -g whistle --registry=https://registry.npm.taobao.org
有些公司可能自己建了npm的镜像,可以用自己公司的npm命令安装或设置
--registry=公司的镜像
-
启动whistle:
w2 start
停止whistle:
w2 stop
重启whistle:
w2 restart
查看whistle版本号:
w2 -V
查看所有命令:
w2 --help
whistle的默认端口为
8899
,如果需要修改端口可以通过参数-p 8888
进行修改,如:w2 restart -p 8888
如何使用whistle请直接看Github上的README。
安装配置proxifier
proxifier是收费软件,有30天免费试用期,可以直接从官网下载安装,或者通过电脑管家的软件管理界面下载,网上也有很多破解的免费版本,有需要的话可以自己网上搜索下载,安装完proxifier后打开后做如下配置:
Windows和Mac的界面交互不太一样,下面会分别给出两者的配置方法
-
去掉自动DNS设置
-
Windows:打开左上角菜单 -> 配置文件 -> 名词解析 -> 勾掉
自动检查 DNS 设置
-> 勾选通过代理解析主机名称 -
Mac:DNS -> 去掉第一个checkbox -> 勾上第二个checkbox
-
-
设置无限循环连接检测
- Windows:打开左上角菜单 -> 配置文件 -> 高级 -> 勾选
无限循环连接检测
- Mac:会自动检测,弹出对话框时点击确定就可以。
- Windows:打开左上角菜单 -> 配置文件 -> 高级 -> 勾选
-
添加代理服务器
-
Windows:打开左上角 -> 配置文件 -> 代理服务器 -> 添加代理服务
地址:
127.0.0.1
端口:
8899
(whistle的默认端口号,具体按whistle实际启用的端口设置)协议:
HTTPS
-
Mac:Proxies -> Add
-
-
忽略Node发出的请求: 配置完成后,用Chrome浏览器打开http://l.wproxy.con,这个时候proxifier会弹出检测到循环连接的对话框,点击确定即可:
-
配置后的效果
配置完成后就可以愉快的抓包任何客户端的请求了。
上面是拦截所有客户端请求,更建议只把想抓包的客户端通过proxifier代理到whistle,可以通过代理规则添加
可能遇到的问题
- 拦截所有客户端请求后台,有些客户端可能采用了SSL pinning技术,导致该客户端的https请求出现证书校验失败(如执行:
git push
),可以禁用掉应域名的捕获HTTPS请求tunnel://github.com disable://capture
或者把该命令行工具添加到proxifier规则里面并设置动作:Direct
。 - 如果要查看TCP请求数据包,可以通过设置
tunnel://host enable://inspect
(host
为Network上显示的域名或ip),这样就可以通过Network右侧->Response->Frames查看TCP请求的帧数据,有关调试TCP(Socket)请参考:利用whistle调试WebSocket和Socket请求。
支持通过proxifier设置代理,方便抓其它客户端的请求