whistle简介:
whistle是基于Node实现的跨平台web调试代理工具,类似的工具有Windows平台上的Fiddler,主要用于查看、修改HTTP、HTTPS、Websocket的请求、响应,也可以作为HTTP代理服务器使用,不同于Fiddler通过断点修改请求响应的方式,whistle采用的是类似配置系统hosts的方式,一切操作都可以通过配置实现,支持域名、路径、正则表达式、通配符、通配路径等多种匹配方式,且可以通过Node模块扩展功能。官网地址:http://wproxy.org/whistle/。
whistle安装与使用
1.安装Node
先检查下电脑是否已安装v0.10.0以上版本的Node,为获取更好的性能,推荐安装最新版本的Node。如果你的系统已经安装了v0.10.0以上版本的Node,可以忽略此步骤,直接进入步骤2安装whistle。
进入windows命令行,输入命令:
$ node -v
查看Node的版本号(如下图:)
如果没有安装或者版本号低于v0.10.0,就需要重新安装一下,具体步骤如下:
Windows或Mac系统,访问https://nodejs.org/
下载后LTS版本的Node,选择默认安装即可。
默认安装在C:\Program Files\nodejs (注意这里有坑:不要自定义安装到其他盘,我修改到D盘后,环境变量都设置了,后面安装完whistle,但是一直启动不了,提示不是内部命令,后面重新安装到默认路径就好了)
安装完Node后,执行命令:node -v 检查下是否安装成功,如果能正常输出Node的版本号,表示Node已安装成功(Windows系统可能需要重新打开cmd)。
2.安装whistle
Node安装成功后,执行如下npm命令安装whistle (Mac或Linux的非root用户需要在命令行前面加sudo,如:sudo npm install -g whistle)
$ npm install -g whistle
npm默认镜像是在国外,有时候安装速度很慢或者出现安装不了的情况,如果无法安装或者安装很慢,可以使用taobao的镜像安装:
$ npm install cnpm -g --registry=https://registry.npmmirror.com
$ cnpm install -g whistle
或者直接指定镜像安装:
$ npm install whistle -g --registry=https://registry.npmmirror.com
whistle安装完成后,执行命令 whistle help 或 w2 help,查看whistle的帮助信息,检查下是否已安装成功,如果能正常输出whistle的帮助信息,表示whistle已安装成功。
3.启动whistle
最新版本的whistle支持三种等价的命令whistle、w2、wproxy
启动whistle:
$ w2 start
如下图:
重启whistle:
$ w2 restart
停止whistle:
$ w2 stop
4.配置代理
配置信息
代理服务器:127.0.0.1 (如果部署在远程服务器或虚拟机上,改成对应服务器或虚拟机的ip即可)
默认端口:8899 (如果端口被占用,可以在启动时通过 -p 来指定新的端口,更多信息可以通过执行命令行 w2 help (v0.7.0及以上版本也可以使用w2 help) 查看)
- 浏览器代理
Chrome:安装Chrome代理插件-官方推荐的安装Proxy SwitchyOmega
firefox:地址栏输入访问 about:preferences,找到 Network Proxy,选择 手动代理配置(Manual proxy configuration),输入代理服务器地址、端口,保存即可。
- 移动端代理:
需要在设置中配置当前Wi-Fi的代理(需要保证所连wifi和代理服务器处在同一网络),下图以 iOS 为例:
PS: 如果配置完代理,手机无法访问,可能是whistle所在的电脑防火墙限制了远程访问whistle的端口,关闭防火墙或者设置白名单:http://jingyan.baidu.com/article/870c6fc317cae7b03ee4be48.html
访问配置页:
启动whistle及配置完代理后,用Chrome浏览器(由于css兼容性问题界面只支持Chrome浏览器)访问配置页面
可以通过以下两种方式来访问配置页面:
方式1:域名访问 http://local.whistlejs.com/ (如果你的浏览器未配置代理会提示无法访问,可以下面的方式2和3进行访问)
方式2:通过ip+端口来访问,形式如 http://whistleServerIP:whistlePort/
e.g. http://127.0.0.1:8899 方式3:通过命令行参数 -P xxxx 自定义webui的端口(xxxx表示要设置的端口号),自定义端口支持上述两种方式访问,也支持 http://127.0.0.1:xxxx
如果能正常打开页面,whistle安装启动完毕,可以开始使用。
5.安装根证书
如果whistle的设置页面可以正常打开,表示我们可以代理http请求了。如果你的页面和接口全部是http请求,就可以忽略安装https证书的这一步了。
下载根证书,开启捕获HTTPS请求:
如上图下载完根证书后点击rootCA.crt文件,弹出根证书安装对话框。
手机端设置:
iOS
手机设置代理后,Safari 地址栏输入 rootca.pro,按提示安装证书(或者通过 whistle 控制台的二维码扫码安装,iOS安装根证书需要到连接远程服务器进行验证,需要暂时把Https拦截功能关掉)
下载后,在设置-通用-描述文件中,选择whistle证书,点击安装
iOS 10.3 之后需要手动信任自定义根证书,设置路径:设置 > 通用 >关于本机 > 证书信任设置
Android
whistle 控制台二维码扫码安装,或者浏览器地址栏 rootca.pro 按提示安装
部分浏览器不会自动识别 ca 证书,可以通过 Android Chrome 来完成安装
(小米手机不知道是什么问题下载的证书无法打开,可以通过下面的方法)
下载后,进入手机设置 → 更多设置 → 系统安全 → 从存储设备安装 → 选择该证书,安装证书即可
常见手机:小米手机,华为手机,在安装证书时需要设置手机锁屏密码
android 6.0 之后的一些app在成功安装证书后仍然无法对https连接进行手抓包,有可能是该app没有添加信任用户自定义证书的权限。请确认该app是否有如下配置:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
开始抓包:
更多操作大家可以参考官网文档,菜单简介见下图: