whistle
TypeScript icon, indicating that this package has built-in type declarations

2.9.94 • Public • Published

whistle logo

Whistle

NPM version node version Test coverage npm download NPM count License

中文 · English

Whistle 是基于 Node.JS 实现的操作简单、功能强大的跨平台抓包调试工具,可作为 HTTP 代理(默认)HTTPS 代理Socks 代理反向代理等,用于抓包分析通过配置规则修改 HTTP、HTTPS、HTTP/2、WebSocket、TCP 请求,且内置 WeinreLogComposer 等工具可查看远程页面的 DOM 结构、查看 console 输出内容、重放编辑构造请求等,并支持 插件扩展功能作为 NPM 包被项目引用

安装

Windows PC 或 Mac PC 推荐使用客户端:https://github.com/avwo/whistle-client

如果采用 Whistle 客户端可以跳过该安装步骤

Linux PC、服务器等其它系统可以用命令行版本,需严格按如下 4 个步骤安装:

  1. 安装 Whistle
  2. 启动 Whistle
  3. 安装根证书
  4. 设置代理

安装 Whistle

根据实际情况选择以下一种安装方式即可:

  1. 通过 npm 安装(需要先安装 Node.JS:https://nodejs.org/ ):

    npm i -g whistle
  2. 通过 brew 安装(需要先安装 brew:https://brew.sh/ ):

    brew install whistle

启动 Whistle

w2 start

Whistle 默认启动 HTTP 代理(IP:127.0.0.1,端口: 8899),可以通过 w2 start -p 8888 修改端口,如果已启动需要通过 w2 restart -p 8888 重启修改端口

完整命令行功能参见完整文档:https://wproxy.org/whistle/options.html

安装根证书

启动 Whistle 后可以通过下面的命令安装根证书:

w2 ca --enable-https
Windows 需要最后点击 “是(Y)” 确认 点击 是(Y)
Mac 需要输入开机密码或指纹验证 输入开机密码 输入指纹

手机等其它端如何安装根证书参见完整文档:https://wproxy.org/whistle/webui/https.html

设置代理

Windows PC 或 Mac PC 有以下四种方式,根据实际情况选择其中一种即可:

  1. 【推荐】 通过安装 Chrome 插件 SwitchyOmega 设置代理:https://chromewebstore.google.com/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif

    Chrome 应用商店需要翻墙,如果无法访问请手动安装:https://proxy-switchyomega.com/download/

    SwitchyOmega 设置方法示例图 imageimage
  2. 通过命令行设置系统代理:

    w2 proxy
    

    也可以指定IP(默认127.0.0.1)和端口: w2 proxy "10.x.x.x:8888" ,关闭系统设置代理用 w2 proxy 0

  3. 直接在客户端上设置代理,如 FireFox、微信开发者工具等内置了设置代理功能

    FireFox 设置代理示例图 image
  4. 通过 Proxifier 设置代理(针对无法设置代理且不使用系统代理的客户端):https://www.proxifier.com/docs/win-v4/http-proxy.html

Linux 设置路径: Settings > Network > VPN > Network Proxy > Manual

Linux 设置代理示例图 image

手机等移动端设备需要在 设置 中配置当前 Wi-Fi 的代理,以 iOS 为例:

iOS 设置代理示例图 image

使用

按上面步骤安装好 Whistle,在 Chrome 浏览器上打开链接 http://local.whistlejs.com ,即可看到如下操作界面:

network

rules

其中,Network 为查看抓包界面,Rules 为配置规则,Values 为配置数据界面(配合 Rules 使用),Plugins 为已安装的插件列表。

界面功能

重放请求 image
编辑或构造请求 image

其它界面功能参见完整文档:https://wproxy.org/whistle/webui/

规则功能

Whistle 规则可看成是如下系统 hosts 规则的扩展:

# 一个域名对应一个 IP
127.0.0.1 localhost
::1 localhost
# 多个域名对应一个 IP
10.2.55.3 www.test.com www.example.com

系统 hosts 规则的功能单一,只支持修改 DNS及匹配域名,且有 DNS 缓存问题,无法满足日常工作需求,Whistle 规则扩展了系统 hosts 规则的功能,匹配方式上不仅支持域名匹配、路径匹配、通配符匹配、正则匹配等,还支持通过请求方法,响应状态码、请求(响应)头、请求内容等进一步过滤;功能上不仅支持修改 DNS,还支持修改端口,CNAME,设置代理,修改请求 URL、请求方法、响应状态码、请求头、响应头、请求内容、响应内容等,理论上可以修改 HTTP 请求的所有东西,Whistle 规则格式为:

  1. 默认格式

    pattern operation
  2. 支持匹配多个操作

    pattern operation1 operation2 ...
  3. 支持过滤器

    pattern operation1 operation2 ... includeFilter://filterPattern1 ... excludeFilter://filterPatternN ...

    多个 filter 之间是 或 的关系,即满足其中一个条件即可

  4. 支持位置调换(前提:operation 与 pattern 不同时为 URL 或域名)

    operation pattern [filters ...]
    operation pattern1 pattern2 ... [filters ...]
  5. 支持换行

    line`
    operation
    pattern1
    pattern2 ...
    [filters ...]
    `

具体例子如下:

修改 DNS(设置 Hosts)
  1. 域名匹配

    www.test.com 127.0.0.1
    # 支持带端口
    www.test.com 127.0.0.1:8080
    # CNAME 功能(端口可选)
    www.test.com host://www.example.com:8181

    与系统 hosts 规则不同的是 Whistle 规则默认采用从左到右的映射方式从上到下的优先级,但在 operation 与 pattern 不同时为 URL 或域名情况下可调换位置,所以也兼容系统 hosts 规则,即:127.0.0.1:8080 www.test.com

  2. 路径匹配

    www.test.com/path/to 127.0.0.1:8080
    # 支持带协议
    https://www.test.com/path/to 127.0.0.1:8080
  3. 通配符匹配

    # 域名通配符,匹配 test.com 的所有子代域名
    **.test.com 127.0.0.1:8080
    # 支持带协议域名通配符
    https://**.test.com 127.0.0.1:8080
    # 路径通配符(* 是路径的合法字符,所以前面要加 ^ 告诉 Whistle 是通配符)
    ^**.test.com/*/path/to 127.0.0.1:8080
    # 支持带协议路径通配符
    ^https://**.test.com/*/path/to 127.0.0.1:8080

    ****** 匹配的范围不同,详情参见完整文档:https://wproxy.org/whistle/pattern.html

  4. 正则匹配

    # 内部的 `/` 可以不转义,等价于 `new RegExp('^https?://\w+\.test\.com')`
    /^https?://\w+\.test\.com/ 127.0.0.1:8080
  5. 过滤匹配

    # `pattern` 同上面的域名、路径、正则,表示除了匹配 `pattern` 还要满足请求头 `cookie` 包含 `env=test`
    pattern 127.0.0.1:8080 includeFilter://reqH.cookie=/env=test/
修改表单数据
# 修改表单里面的 `test` 字段的值
pattern reqMerge://test=123

# 删除表单里面的 `abc` 字段
pattern delete://reqBody.abc
设置跨域响应头
# 以路径匹配为例,设置跨域响应头 Access-Control-Allow-Origin: *,且排除 OPTION 请求
pattern resCors://* excludeFilter://m:option

所有规则参见完整文档:https://wproxy.org/whistle/rules/

安装插件

插件需通过命令行安装:

w2 i whistle.inspect whistle.vase

上述插功能介绍及源码:https://github.com/whistle-plugins,客户端可通过界面安装 :https://github.com/avwo/whistle-client

安装后即可在管理界面的 Plugins 看到这两个插件:

插件列表示例图 image

每个插件默认可以新增两个规则协议:

whistle.inspect://xxx
inspect://xxx

通过配置插件的自定义规则,可将匹配的请求转发到插件指定 hook 实现自定义功能,如果不需要也可通过插件的 package.json whistleConfig 设置 "hideLongProtocol": true"hideShortProtocol": true 隐藏对应规则协议

除了扩展规则,插件还支持扩展 Whistle 界面,以及提供操作界面、自带规则等功能,关于插件的安装、使用、开发参见完整文档:https://wproxy.org/whistle/plugins.html

License

MIT

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
2.9.85-beta0beta
2.9.94386latest

Version History

VersionDownloads (Last 7 Days)Published
2.9.94386
2.9.93384
2.9.9256
2.9.913
2.9.901
2.9.891
2.9.883
2.9.871
2.9.861
2.9.852
2.9.85-beta0
2.9.844
2.9.831
2.9.821
2.9.811
2.9.801
2.9.792
2.9.783
2.9.771
2.9.762
2.9.76-beta1
2.9.751
2.9.741
2.9.733
2.9.721
2.9.711
2.9.704
2.9.691
2.9.683
2.9.671
2.9.664
2.9.653
2.9.643
2.9.632
2.9.623
2.9.612
2.9.601
2.9.596
2.9.581
2.9.572
2.9.564
2.9.551
2.9.543
2.9.531
2.9.521
2.9.511
2.9.502
2.9.492
2.9.483
2.9.474
2.9.462
2.9.453
2.9.442
2.9.432
2.9.423
2.9.412
2.9.403
2.9.3912
2.9.389
2.9.38-beta2
2.9.37-beta2
2.9.373
2.9.36-beta3
2.9.355
2.9.345
2.9.334
2.9.323
2.9.3178
2.9.303
2.9.295
2.9.285
2.9.273
2.9.266
2.9.253
2.9.234
2.9.226
2.9.213
2.9.203
2.9.193
2.9.185
2.9.174
2.9.163
2.9.153
2.9.15-beta2
2.9.144
2.9.134
2.9.124
2.9.113
2.9.103
2.9.94
2.9.85
2.9.73
2.9.63
2.9.54
2.9.43
2.9.35
2.9.24
2.9.2-beta2
2.9.13
2.9.03
2.8.104
2.8.95
2.8.83
2.8.73
2.8.64
2.8.53
2.8.43
2.8.33
2.8.23
2.8.14
2.8.03
2.7.296
2.7.285
2.7.274
2.7.263
2.7.253
2.7.244
2.7.237
2.7.223
2.7.211
2.7.203
2.7.193
2.7.183
2.7.174
2.7.165
2.7.143
2.7.133
2.7.122
2.7.111
2.7.104
2.7.94
2.7.83
2.7.74
2.7.64
2.7.53
2.7.43
2.7.37
2.7.24
2.7.15
2.7.03
2.6.164
2.6.153
2.6.144
2.6.133
2.6.124
2.6.114
2.6.103
2.6.91
2.6.83
2.6.73
2.6.63
2.6.53
2.6.43
2.6.4-beta2
2.6.35
2.6.3-beta24
2.6.3-beta12
2.6.3-beta2
2.6.23
2.6.13
2.6.05
2.5.325
2.5.314
2.5.303
2.5.293
2.5.281
2.5.274
2.5.264
2.5.251
2.5.241
2.5.231
2.5.221
2.5.213
2.5.202
2.5.191
2.5.183
2.5.173
2.5.161
2.5.153
2.5.141
2.5.132
2.5.121
2.5.112
2.5.101
2.5.91
2.5.9-beta0
2.5.81
2.5.8-beta0
2.5.71
2.5.65
2.5.51
2.5.41
2.5.31
2.5.22
2.5.11
2.5.01
2.4.172
2.4.161
2.4.151
2.4.15-beta0
2.4.142
2.4.132
2.4.123
2.4.113
2.4.11-beta3
2.4.103
2.4.94
2.4.81
2.4.71
2.4.61
2.4.53
2.4.43
2.4.32
2.4.3-beta20
2.4.21
2.4.11
2.4.01
2.3.71
2.3.62
2.3.51
2.3.5-beta2
2.3.41
2.3.21
2.3.12
2.3.02
2.2.5-beta1
2.2.42
2.2.32
2.2.22
2.2.14
2.1.31
2.1.21
2.1.11
2.1.01
2.0.01
2.0.0-beta0
1.17.14
1.17.04
1.16.132
1.16.121
1.16.111
1.16.101
1.16.92
1.16.81
1.16.71
1.16.61
1.16.51
1.16.41
1.16.31
1.16.21
1.16.13
1.16.01
1.15.162
1.15.151
1.15.142
1.15.131
1.15.122
1.15.111
1.15.101
1.15.91
1.15.81
1.15.8-beta0
1.15.72
1.15.61
1.15.51
1.15.31
1.15.21
1.15.11
1.15.01
1.14.101
1.14.92
1.14.82
1.14.71
1.14.61
1.14.51
1.14.42
1.14.31
1.14.21
1.14.11
1.14.02
1.13.281
1.13.271
1.13.261
1.13.253
1.13.241
1.13.232
1.13.221
1.13.211
1.13.201
1.13.192
1.13.181
1.13.171
1.13.161
1.13.151
1.13.141
1.13.131
1.13.122
1.13.112
1.13.102
1.13.91
1.13.71
1.13.61
1.13.51
1.13.41
1.13.33
1.13.21
1.13.11
1.13.01
1.12.171
1.12.162
1.12.151
1.12.145
1.12.131
1.12.121
1.12.111
1.12.102
1.12.91
1.12.81
1.12.72
1.12.61
1.12.51
1.12.41
1.12.31
1.12.22
1.12.11
1.12.02
1.11.41
1.11.31
1.11.23
1.11.11
1.11.02
1.10.101
1.10.91
1.10.81
1.10.71
1.10.7-beta0
1.10.61
1.10.41
1.10.32
1.10.21
1.10.11
1.10.01
1.9.121
1.9.111
1.9.101
1.9.91
1.9.83
1.9.72
1.9.61
1.9.51
1.9.42
1.9.31
1.9.21
1.9.11
1.9.01
1.8.92
1.8.81
1.8.71
1.8.61
1.8.6-beta0
1.8.52
1.8.41
1.8.31
1.8.21
1.8.11
1.8.01
1.7.31
1.7.21
1.7.11
1.7.01
1.6.72
1.6.62
1.6.41
1.6.32
1.6.11
1.6.01
1.5.201
1.5.191
1.5.181
1.5.171
1.5.162
1.5.151
1.5.141
1.5.131
1.5.121
1.5.111
1.5.101
1.5.91
1.5.81
1.5.62
1.5.51
1.5.42
1.5.31
1.5.21
1.5.12
1.5.01
1.4.222
1.4.211
1.4.208
1.4.192
1.4.182
1.4.171
1.4.161
1.4.152
1.4.141
1.4.132
1.4.121
1.4.111
1.4.101
1.4.91
1.4.81
1.4.71
1.4.61
1.4.51
1.4.42
1.4.31
1.4.21
1.4.11
1.4.01
1.3.202
1.3.191
1.3.182
1.3.162
1.3.151
1.3.142
1.3.131
1.3.121
1.3.111
1.3.102
1.3.91
1.3.81
1.3.71
1.3.61
1.3.51
1.3.42
1.3.31
1.3.21
1.3.11
1.3.01
1.2.61
1.2.52
1.2.41
1.2.31
1.2.11
1.2.02
1.1.21
1.1.11
1.1.02
1.0.41
1.0.4-beta0
1.0.38
1.0.3-beta1
1.0.21
1.0.11
1.0.01
1.0.0-beta0
0.12.31
0.12.27
0.12.2-beta0
0.12.110
0.12.013
0.11.41
0.11.31
0.11.212
0.11.18
0.11.03
0.10.37
0.10.21
0.10.11
0.10.01
0.10.0-beta11
0.9.51
0.9.42
0.9.31
0.9.21
0.9.118
0.9.01
0.8.26
0.8.14
0.8.01
0.7.21
0.7.11
0.7.014
0.6.61
0.6.51
0.6.41
0.6.31
0.6.21
0.6.11
0.6.06
0.5.82
0.5.64
0.5.52
0.5.31
0.5.21
0.5.13
0.5.02
0.4.22
0.4.11
0.4.02
0.3.122
0.3.111
0.3.101
0.3.91
0.3.81
0.3.71
0.3.51
0.3.41
0.3.31
0.3.21
0.3.11
0.3.02
0.2.51
0.2.41
0.2.31
0.2.22
0.2.11
0.2.01
0.1.412
0.1.402
0.1.392
0.1.381
0.1.371
0.1.361
0.1.351
0.1.341
0.1.331
0.1.321
0.1.312
0.1.301
0.1.291
0.1.281
0.1.272
0.1.261
0.1.251
0.1.243
0.1.231
0.1.222
0.1.211
0.1.201
0.1.191
0.1.181
0.1.171
0.1.161
0.1.151
0.1.142
0.1.131
0.1.121
0.1.111
0.1.101
0.1.91
0.1.81
0.1.71
0.1.61
0.1.51
0.1.42
0.1.31
0.1.21
0.1.12
0.1.01
0.1.0-beta.20
0.1.0-beta0
0.0.321
0.0.312
0.0.302
0.0.292
0.0.281
0.0.271
0.0.261
0.0.251
0.0.232
0.0.222
0.0.212
0.0.202
0.0.191
0.0.182
0.0.172
0.0.161
0.0.151
0.0.141
0.0.132
0.0.121
0.0.111
0.0.101
0.0.92
0.0.82
0.0.71
0.0.61
0.0.52
0.0.31
0.0.22
0.0.12

Package Sidebar

Install

npm i whistle

Weekly Downloads

139

Version

2.9.94

License

MIT

Unpacked Size

2.96 MB

Total Files

195

Last publish

Collaborators

  • avwu