33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包( 二 )

4.4客户端创建一个客户端用来连接以上服务的的服务,使用socket.connect()方法打开一个TCP连接到主机 , 连接后可以从服务端获取数据,在操作完成后关闭连接 。
具体步骤为:
#创建客户端的套接字client=socket()#尝试连接服务器client.connect()#发送并接收数据client.send()client.recv()#关闭客户端套接字client.close()4.5具体代码实现新建一个文件client.py 。
import socketimport syss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host=socket.gethostname()port=9999s.connect((host,port))while True:data= https://www.huyubaike.com/biancheng/input('>>').strip()if not data:breaks.send(data.encode('utf-8'))msg=s.recv(1024)if not msg:breakprint(msg.decode('utf-8'))s.close()4.6测试使用cmd命令行中打开到代码所在文件目录 , 执行python 服务端文件名.py , 再另打开一个cmd命令界面执行 python 客户端文件名.py 。
1.在cmd中运行服务端代码,运行结果,如下图所示:

33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包

文章插图
2.在cmd中运行客户端代码 , 运行结果 , 如下图所示:
33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包

文章插图
好了到此就实现了 , 但是宏哥抓不到包,不知道是不是因为服务端和客户端都在宏哥本地一台电脑的原因,算了宏哥直接网上找了一个在线的演示给大家 。
5.实战抓WebSocket包由于时间关系,宏哥没有尝试将客户端和服务器分开看看是否可以抓到包 , 然后在网上找了一个地址:http://coolaf.com/tool/chattest   演示给大家 。具体操作步骤如下:
1.Fiddler V4.5以上版本,rules>customize rules,加入如下代码,把websocket通信日志加入log,如下图所示:
33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包

文章插图
2.class Handler 类中添加,添加的代码如下:
static function OnWebSocketMessage(oMsg: WebSocketMessage) {// Log Message to the LOG tabFiddlerApplication.Log.LogString(oMsg.ToString()); }
33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包

文章插图
3.打开PC版的聊天室(宏哥提供的演示地址),并刷新Fiddler,会看到一个WS图标的请求,双击该请求 , 右边会出现websocket的tab页,如下图所示:
PC版在线聊天,如下图所示:
33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包

文章插图
Fiddler抓的WebSocket包 , 如下图所示:
33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包

文章插图
4.切换到log tab页可以看到通信的数据往来 , 如下图所示:
33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包

文章插图
5.通过F12也可以看到websocket的请求信息,进入聊天室后,F12>network>滤斗(放大镜左边的这个红色图标)>WS,双击name里边这个,即展开相关的详情,在详情里选中某条数据 , 底部会进一步显示全部信息,如下图所示:
33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包

文章插图
6.小结将那段代码保存后就可以在Fiddler右边栏的Log标签里,看到WebSocket的数据包 。到了这里,还有一个情况要说明,就算是有工具可以抓到WebSocket中的包,看到的也不一定是明文 。这个要看传输的水是什么 , 如果是普通水那谁都可以分析;但如果是水银,那这个分析水的设备很可能就显示乱码了 。所以也就有同学明明使用了可以抓WebSocket包的程序,却抓出来的是乱码 。那是因为别人传输的是二进制数据流(比如AMF包),而不是JSON之类的对人类可读的明文 。而宏哥演示的网址是用于测试的因此没有考虑安全进行加密 , 所以使用的是明文,大家可以看到客户端和服务端相互发送的信息内容,关于如何加密宏哥在这里就不做赘述了因为它不是今天的重点内容 。
6.1关于websocket1.HTML5提供的在单个TCP上运行的全双工通讯协议(应用层协议)
2.客户端和服务器之间只需要进行一次握手就能够实现双向通讯,进行数据传输
3.相比较Ajax轮询机制需要不断地从客户端间隔性发送请求 , 传输不必要的头部数据,消耗大量的带宽,websocket节省了服务资源和宽带
4.通过send()方法发送数据给客户端,客户端通过onmessage接收服务器返回的数据
【33 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket数据包】

推荐阅读