当前位置: 首页 > 后端技术 > Node.js

whistle--跨平台网络抓包调试工具

时间:2023-04-03 13:51:30 Node.js

whistle-跨平台网络抓包调试工具[TOC]简介whistle是一款跨平台网络抓包调试工具,基于节点开发。支持抓包、重放、替换、修改等调试http(s)、WebSocket请求,也可以作为普通的http代理使用。其功能与常用的fiddler(windows)、Charles(Mac)工具相同,但对开发者更友好,操作调试更方便,还支持node模块插件。快速启动安装npminstall-gwhistle//全局安装whistle启动w2start//启动whistle配置代理(推荐浏览器插件)127.0.0.1:8899配置规则浏览器访问http://local.whistlejs.com打开whistle接口,在rule中配置:jd.com127.0.0.1taobao.com127.0.0.1tmall.com127.0.0.1OK,安装使用就这么简单。首先,你需要安装节点。官方推荐使用最新的LTS版本节点安装whistlenode环境配置安装whistle成功后,非root用户添加sudonpminstall-g。whistle安装完成后,执行命令whistlehelp或w2help可以查看whistle的帮助信息。如果有输出,则证明安装成功。$w2helpUsage:whistle[options]Commands:run启动前台服务start启动后台服务stop停止当前后台服务restart重启当前后台服务help显示帮助信息Options:-h,--help输出使用信息-D,--baseDir[baseDir]配置数据的基本目录-A,--ATS为iOSATS生成RootCA(Node>=6isrequired)-z,--certDir[directory]自定义证书路径-l,--localUIHost[hostname]本地ui主机(默认为local.whistlejs.com)-n,--username[username]whistle的用户名-w,--password[password]whistle的密码-N,--guestName[username]来宾名称-W,--guestPassword[password]来宾密码-s,--sockets[number]最大套接字(默认为60)-S,--storage[newStorageDir]the新建本地存储目录-C,--copy[storageDir]将storageDir复制到newStorageDir-c,--dnsCache[time]DNS的缓存时间(默认30000ms)-H,--host[host]whistlelisteninghost(::or0.0.0.0默认)-p,--port[端口]whistle监听端口(默认8899)-P,--uiport[uiport]whistleuiport(默认8900)-m,--middlewares[脚本路径或模块名]表示中间件路径(如:xx,yy/zz.js)-M,--mode[mode]thewhistlemode(as:pureProxy|debug|multiEnv)-u,--uipath[脚本路径]webui插件路径-t,--timeout[ms]请求超时(默认66000ms)-e,--extra[extraData]插件的额外数据-f,--secureFilter[secureFilter]安全过滤器的脚本路径-R,--reqCacheSize[reqCacheSize]请求数据的缓存大小(默认为512)-F,--frameCacheSize[frameCacheSize]缓存套接字帧大小(默认512)-V,--version输出版本号startwhistle新版whistle支持三个等价的命令whistle,w2,wproxystartwhistlew2startrestartwhistlew2stopstopwhistlew2stop启动调试模式(启用启动了一个前台服务,主要用于检查whistle异常和插件开发)w2run配置代理服务器,如果是本地就是127.0.0.1,如果部署在远程服务器或者虚拟机上,可以改成对应的IP默认端口是8899,如果端口被占用,想修改端口号,可以用-p指定新的端口号。proxy方法直接配置系统代理。WindowsMac安装浏览器代理插件。推荐Chrome插件:SwitchyOmegaFirefox插件:ProxySelector移动端需要配置如何使用当前WIFI代理通过w2start启动后,访问http://local.whistlejs.com打开whistle界面。所有通过whistle进行的篡改操作都可以使用如下配置方式实现。patternoperatorURLpattern是匹配请求URL,支持域名、路径、正则表达式、通配符等。operatorURI是对应的操作,由协议和值组成(operatorURL=opProtocol://opValue)支持的协议类型:协议列表附言;{value}对应工具栏中Values下的文件,合并两边:#域名匹配IPwww.example.com127.0.0.1#域名加端口匹配www.example.com:6666127.0.0.1#域名namewithprotocol,support:http,https,ws,wss,tunnelhttp://www.example.com127.0.0.1#路径匹配,也支持协议和端口www.example.com/testhttp://127.0.0.1:9090https:/www.exapmle.com/testhttp://127.0.0.1:9090https:/www.exapmle.com:6666/testhttp://127.0.0.1:9090#正则匹配/^https?://www\.example\.com\/test/(.*)/referer://http://www.test.com/$1#通配符匹配^www.example.com/test/***referer://http://www.test.com/$1功能详情Whistle功能总结:代理设置设置http代理模式proxy://ip:port#添加用户名和密码模式代理://username:password@ip:portwww.jd.comproxy://test:123@127.0.0.1:8888设置socks代理模式socks://ip:port#添加用户名和密码模式socks://username:password@ip:portwww.jd.comsocks://test:123@127.0.0.1:8888设置pac代理模式pac://filepath/./pac://https://raw.githubusercontent.com/imweb/node-pac/master/test/scripts/normal.pac设置反向代理不同于正向代理。详见正向代理和反向代理whistleasanti代理只支持http访问。启动whistle时,设置监听端口为6060:w2start-p6060#或w2restart-p6060非root用户需要添加sudow2start-p6060根据域名,或路径,或正则表达式配置主机端口:localhost:6060/aahost://10.8.43.82:8080localhost:6060/bbhost://10.8.43.82:8081这样访问localhost:6060的请求会自动转到8080或8181端口,实现无端口访问。PS:如果要使用IP访问,可以使用http://127.0.0.1/-/xxx或者http://127.0.0.1/_/xxx,whistle会自动转换为http://127.0.0.1/xxx移动端移动端调试时需要在同一局域网内,涉及https的连接需要开启https拦截。启用https拦截如果要拦截https和websockets请求,必须安装根证书并启用https拦截。在工具栏=>https下载RootCA,勾选拦截HTTPSCONNECTs选项安装CA证书。详见:安装根证书并设置手机代理设置=>无线局域网=>找到对应的局域网点击感叹号=>HTTP代理配置proxy=>选择手动=>填写IP和端口号whistle服务PS:如果配置代理后无法访问话机,可能是whistle所在电脑的防火墙限制了远程访问whistle的端口。关闭防火墙或设置白名单:http://jingyan.baidu.com/arti...访问界面whistle集成了weinre的功能,只需配置模式weinre://id即可使用。然后点击工具栏上的weinre,选择对应的ID,即可打开weinre界面。移动端调试与PC端调试相比,移动端调试经常会遇到以下问题。无法通过控制台输出错误,也无法看到页面的js错误。无法查看和修改页面。DOM和样式无法调试1。捕获页面错误和logwhistle可以使用类似console的日志平台捕获页面错误并记录www.jd.comlog://#如果想同时注入js脚本,可以使用如下方法#中mac或linuxwww.jd.comlog:////Users/willhu/work/whistle-test/log-test.js#在windowswww.jd.comlog://D:\xxx\test.js#直接从whistlewww.jd.comlog://{log-test.js}的value配置的key-value中获取脚本www.jd.comlog://{log-test.js}2.检查并修改页面的DOM和样式。用户只需要通过简单的配置(patternweinre://id)即可使用,并可以在PC端通过weinre修改网页的DOM结构和样式。这里的ID只是一个分类,避免weinre调试页面m.jd.comweinre://test-weinre3链接过多。暂时不支持debug功能,可以使用log替换腾讯m.jd.com推荐的vConsole插件js:///Users/willhu/work/whistle-test/vconsole.min.jsvConsole:https://github.com/Tencent/vC...demo:vConsole文件导入导出在网络中右键请求列表,可以将请求的数据导出为txt.saz文件,也可以导入txt。saz.har文件。捕获和重放查看请求响应数据在网络中,您可以看到每个请求的详细信息。重播请求打开网络==>选择请求==>右键选择重播重构请求自定义请求URL、请求方法、请求头、请求内容请求和响应修改修改请求URL或参数设置静态规则列表模式reqScript://filepathwww.jd.comreqScript:///Users/willhu/work/whistle-test/rulelist.txtrulelist.txt如果文件第一行是规则注释,即在#开头的taskfilepath指定了一个规则列表,会加载列表并进行二次匹配得到规则#rulespattern1operatorURI1pattern2operatorURI2patternNoperatorURIN通过脚本设置规则列表}设置服务器IP(host)支持两种配置方式,不需要再去寻找本机的host文件。ippatternorpatternhost://ipexample#传统主机配置127.0.0.1www.example.com#等价于:www.example.com127.0.0.1127.0.0.1a.example.comb.example.comc.example.com#支持端口127.0.0.1:8080www.example.com#相当于:www.example.com127.0.0.1:8080127.0.0.1:8080a.example.comb.example.comc.example.com#支持通过域名获取host,类似DNScnamehost://www.qq.com:8080www.example.com#相当于:www.example.comhost://www。qq.com:8080host://www.qq.com:8080a.example.comb.example.comc.example.com#支持正则表达式匹配127.0.0.1:8080/example\.com/i#相当于:/example\.com/i127.0.0.1:8080127.0.0.1:8080/example\.com//test\.com/#支持路径匹配127.0.0.1:8080example.com/test#等同于:example.com/test127.0.0.1:8080127.0.0.1:8080http://example.com:5555/index.htmlwww.example.com:6666https://www.test.com/test#支持精确匹配127.0.0.1:8080$example.com/test#等价于:$example.com/test127.0.0.1:8080127.0.0.1:8080$http://example.com:5555/index.html$www.example.com:6666$https://www.test.com/test替换请求https://jd.comhttps://baidu.com/修改请求方法配置如下:patternmethod://newMethodjd.commethod://postmodifyrequestheadermodifyrequestheader,配置方法:patternreqHeaders://filepathjd.comreqHeaders://{reqHeaders.json}修改请求内容,将指定内容替换为指定内容(GET等请求无内容无替换),配置方法模式reqBody://filepathwww.jd.com方法://postreqBody://{test-reqBody.html}注入或替换内容在请求内容前添加指定内容(GET等请求不能添加无内容),配置方式:patternreqPrepend://filepathspeedlimitordelayRequestdelayrequestpatternreqDelay://timeMSwww.jd.comreqDelay://3000setspeedpatternreqSpeed://kbswww.jd.comreqSpeed://3修改对应状态码设置响应状态码(statuscoderange100~999),请求将根据设置的状态码直接返回,不会在线请求。配置方式:模式statusCode://codejd.comstatusCode://404修改响应头的方式同请求头修改响应内容将指定内容替换为指定内容(304等响应没有内容无法替换),配置方法:模式resBody://filepathst.360buyimg.com/m/css/2014/layout/layout2015.cssresBody://{myAppend.css}注入或替换内容将指定内容追加到响应内容的后面(304等响应没有内容则不能追加),配置方法:patternresAppend://filepathst.360buyimg.com/m/css/2014/layout/layout2015.cssresAppend://{myAppend.css}限制速度或延迟响应延迟响应patternresDelay://timeMSwww.jd.comresDelay//3000设置速度模式resSpeed://kbswww.jd.comresSpeed://3插件扩展有一些很少用到的功能,还有一些业务相关的功能,考虑到会造成安装过程较长或占用内存空间或适配范围比较小。Whistle并没有增加这些功能,而是提供插件来扩展这些功能。Whistle本身是一个Node模块,只需要以whistle.xxx的形式命名即可。Writingwhistleplugins:如何编写插件官方提供的插件列表:官方插件列表socket和websocket使用whistle调试socket和websocket测试文件:whistle-test-files测试规则:规则有点乱七八糟,如有不妥请指正,谢谢。