记录一下用
Fiddler
对WebSocket
收发的数据进行抓包分析和篡改数据,只找到这么一个方法,能用就行吧。 时间:2019-3-29 环境:win7
+
Fiddler 5.0
javascript
Fiddler
中双击WebSocket Session
便可查看此链接收发的数据。惋惜此选项卡内没有带发送数据的功能(一个输入框(HEX文本) + 一个按钮),要是有就基本完美了。java
若是须要抓取https
、wss
请求,须要在Fiddler
菜单Tools
>
Options
>
HTTPS
中开启HTTPS
支持。在Actions
菜单中,设置电脑系统信任Fiddler
的根证书。web
若是须要抓取手机中的数据,须要在Tools
>
Options
>
Connections
中设置容许客户端链接,而后在手机wifi
链接中设置使用电脑的ip
和Fiddler监听的端口
做为代理。api
而后手机浏览器访问电脑ip
+
端口
进入Fiddler
页面下载根证书,并信任(安装)此证书。浏览器
完成以上操做才有可能监控https
和wss
请求,大部分是能监控的。websocket
在Fiddler
界面中并未找到修改WebSocket
数据的地方,搜索也没找到多少直接的资料信息,不过写怎么打印WebSocket
数据日志的倒蛮多(Fiddler 4.5
开始已没有这个必要了)。另外看到一篇利用fiddler core api 拦截修改 websocket 数据
的。两个综合一下就大功告成了。session
在Fiddler
菜单Rules
>
Customize Rules
中实现Handlers
类的OnWebSocketMessage
方法,此方法能够获得WebSocket
收发的数据,并且能够修改。另:Fildder
主界面中FildderScript
也能够直接修改脚本代码。socket
Fiddler
采用的JScript.Net
语法,这个语法不熟?不要紧,我也不熟,但对JavaScript
和C#
任意一个熟就好了。函数
Classic ASP
用户可能对JScript
和它的好基友VBScript
比较熟,这两个除了写ASP
外,Windows
上的vbs
js
脚本代码也是主力使用方向。测试
简单点,把JScript
当作IE 6
来写就ojbk了,绝对的原味,反正下面的例子里面js
代码居多。参考文章结尾的测试代码,不要在乎那些拼音或者缩写的奇丑变量名。
测试完整代码在文章结尾。
发送echo
测试数据test edit:ddd
,结果截图:
echo
响应中彻底包含了被修改后的发送数据,我特地用不一样颜色标记了一下。
Fiddler
本身的
WebSocket
记录信息,它记录的为咱们修改以后的。
没找到方法,不知道怎么用Fiddler
来发送WebSocket
数据,参考第一节中的遗憾。
class Handlers {
//实现此方法,拦截处理数据
static function OnWebSocketMessage(oMsg: WebSocketMessage) {
var arr=oMsg.PayloadAsBytes();
var bs=Utilities.ByteArrayToString(arr);
var txt=bytesToViewText(arr);//此文本为英文,可读的文本信息,不可读的乱码、中文都过滤掉了
var newTxt="";
//假设的修改场景,只要收发的数据中包含了 test edit: 就干它
var edit=false;
if(txt.indexOf("test edit:")+1){
var nbs=bs;
var m1=/(test edit:)(.*)/.exec(txt)||[];
nbs=nbs.Replace(strToHex(m1[0]||""),strToHex(m1[1]+(oMsg.IsOutbound?"send":"onmessage")+" change:"+m1[2]));
edit=true;
oMsg.SetPayload(hexToBytes(nbs));
newTxt=bytesToViewText(oMsg.PayloadAsBytes());
}
//并未直接提供获取SessionID的方法,应该是没有公开
var all=oMsg.ToString();
var m1=/#(\d+)/.exec(all)||[];
var sessionID=m1[1]||-1;
FiddlerApplication.Log.LogString(
sessionID+":["+oMsg.ID+"]"
+"["+(oMsg.IsOutbound?"出":"入")+"]"
+"["+(edit?"改:"+newTxt:"")+"]"
+txt+"\n");
}
//如下为一些功能函数
static function bytesToViewText(arr:byte[]){
var s="";
for(var i=0;i<arr.length;i++){
if(arr[i]>=32 && arr[i]<=126){
s+=String.fromCharCode(arr[i]);
}
}
return s;
}
static function strToHex(str:String){
var byts=new byte[str.Length];
for(var i=0;i<str.Length;i++){
byts[i]=(byte)(str.charCodeAt(i));
}
return Utilities.ByteArrayToString(byts);
}
static function hexToBytes(hexString:String) {
hexString = hexString.Replace(" ", "");
var length = hexString.Length / 2;
var hexChars = hexString.ToCharArray();
var d = new byte[length];
for (var i = 0; i < length; i++)
{
var pos = i * 2;
d[i] = (byte)(charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}
static function charToByte(c:String) {
return "0123456789ABCDEF".indexOf(c);
}
.......
复制代码
只找到这么一个方法对WebSocket
抓包分析和篡改数据,比较土,完.