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數據包】

推薦閱讀