使用c#开发Fildder插件抓取解析websocket数据
最近有个需求,需要分析下websocket的数据,使用了chrome自带的开发者工具,也尝试了fiddler直接拦截,还尝试了使用fiddler的Customize Rules。
本来Customize Rules已经可以满足我的需求了,但是JScript .NET的语法实在用得我太难受了,开发效率极低。
还是拿出看门绝技c#!
其实使用c#编写Fiddler的插件非常简单,之前就做过一个拦截数据采集tiktok无水印视频(就是有点累,需要手动到手机操作,效果还是很不错)。
言归正传,打开vs新建一个dll类库项目。
然后引用fiddler.exe,直接就是添加引用,然后浏览找到fiddler.exe的位置(我的是C:\Program Files\Fiddler\Fiddler.exe)。
如果你的插件带窗体或者修改了fiddler的窗体,需要引用System.Windows.Forms。
再新建一个类实现IFiddlerExtension、IResponseInspector2、IWSMInspector接口,然后在AssignMessage函数里开始处理WebSocket数据,在OnLoad方法里面可以添加窗体显示在fiddler内。
最后可以在项目属性里面的生成事件里面加上:
这个是对所有用户生效
copy "$(TargetPath)" "C:\Program Files\Fiddler\Scripts\$(TargetFilename)"
这个是对当前windows用户生效
copy "$(TargetPath)" "%userprofile%\My Documents\Fiddler2\Scripts\$(TargetFilename)"
这样每次生成都会自动复制到fiddler的脚本目录,不过每次生成都要先关闭fiddler,否则会因为文件被占用而无法替换。
为了方便调试,可以直接把项目属性>调试>启动外部程序 ,然后选择fiddler.exe。
踩坑记录:
千万不要直接使用WebSocketMessage的PayloadData属性,读出来的数据会有问题,一定记得要用PayloadAsBytes()方法。
实际开发中发现有的电脑无法进入AssignMessage方法,改用FiddlerApplication.OnWebSocketMessage。
如果发现你自定义的窗体没有加载到fiddler里面,请实现IFiddlerExtension接口,在OnLoad方法里面添加窗体。
这里只是抛砖引玉,等我代码写完会上传GitHub。