免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

33 《吐血整理》高級系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket數(shù)據(jù)包

1.簡介本來打算再寫一篇這個系列的文章也要和小伙伴或者童鞋們說再見了,可是有人留言問WebSocket包和小程序的包不會抓,那就關(guān)于這兩個知識點宏哥就再水兩篇文章 。
2.什么是Socket?在計算機通信領(lǐng)域,socket 被翻譯為“套接字”(套接字=主機+端口號),它是計算機之間進行通信的一種約定或一種方式 。通過 socket這種約定,一臺計算機可以接收其他計算機的數(shù)據(jù),也可以向其他計算機發(fā)送數(shù)據(jù)
【33 《吐血整理》高級系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket數(shù)據(jù)包】socket起源于Unix,而Unix/Linux基本哲學(xué)之一就是“一切皆文件”,都可以用“打開open –> 讀寫write/read關(guān)閉close”模式來操作 。
我的理解就是Socket就是該模式的一個實現(xiàn),它只是提供了一個針對TCP或者UDP編程的接口:即socket是一種特殊的文件,一些socket函數(shù)就是對其進行的操作(讀/寫IO、打開、關(guān)閉) 。
socket抽象層在網(wǎng)絡(luò)中的位置圖解,如下圖所示:

33 《吐血整理》高級系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket數(shù)據(jù)包

文章插圖
3.Socket通信流程Socket通信流程,如下圖所示:
33 《吐血整理》高級系列教程-吃透Fiddler抓包教程-Fiddler如何抓取WebSocket數(shù)據(jù)包

文章插圖
根據(jù)socket通信基本流程圖,總結(jié)通信的基本步驟:
服務(wù)器端:
第一步:創(chuàng)建一個用于監(jiān)聽連接的Socket對像;
第二步:用指定的端口號和服務(wù)器的ip建立一個EndPoint對像;
第三步:用socket對像的Bind()方法綁定EndPoint;
第四步:用socket對像的Listen()方法開始監(jiān)聽;
第五步:接收到客戶端的連接,用socket對像的Accept()方法創(chuàng)建一個新的用于和客戶端進行通信的socket對像;
第六步:通信結(jié)束后一定記得關(guān)閉socket;
客戶端:
第一步:建立一個Socket對像;
第二步:用指定的端口號和服務(wù)器的ip建立一個EndPoint對像;
第三步:用socket對像的Connect()方法以上面建立的EndPoint對像做為參數(shù),向服務(wù)器發(fā)出連接請求;
第四步:如果連接成功,就用socket對像的Send()方法向服務(wù)器發(fā)送信息;
第五步:用socket對像的Receive()方法接受服務(wù)器發(fā)來的信息 ;
第六步:通信結(jié)束后一定記得關(guān)閉socket;
4.python實現(xiàn)一個客戶端與服務(wù)端的通信4.1函數(shù)Socket對象方法:服務(wù)端:
函數(shù)描述.bind()綁定地址關(guān)鍵字,AF_INET下以元組的形式表示地址 。常用bind((host,port)).listen()監(jiān)聽TCP,可以掛起的最大連接數(shù),該值至少為1,一般設(shè)為5即可.accept()被動接受TCP客戶端的連接客戶端: 函數(shù)描述.connect()初始化服務(wù)器連接.connect_ex()是對connect()函數(shù)的擴展,當(dāng)出錯時返回出錯碼,不報異常其它函數(shù): 函數(shù)描述.recv()接收數(shù)據(jù),數(shù)據(jù)以字符串的形式返回,bufsize指定接收的最大數(shù)據(jù)量 。.send()發(fā)送數(shù)據(jù),將string中的數(shù)據(jù)發(fā)送到連接的套接字,返回值是要發(fā)送的字節(jié)數(shù)量,通常使用.encode()函數(shù)對數(shù)據(jù)進行轉(zhuǎn)碼.senddall()發(fā)送完整的數(shù)據(jù),在返回之前會嘗試發(fā)送所有數(shù)據(jù),成功返回None,失敗則拋出異常 。.recvfrom()與recv()函數(shù)類似,不同的是返回值是(data,address),其中data是包含接收數(shù)據(jù)的字符串,address是發(fā)送數(shù)據(jù)的套接字地址 。.sendto()發(fā)送UDP數(shù)據(jù),將數(shù)據(jù)發(fā)送到套接字,形式是(ipaddr,port)的元組 。.close()關(guān)閉套接字4.2服務(wù)端使用socket函數(shù)來創(chuàng)建一個socket對象,并設(shè)置一個socket服務(wù),然后通過bind(hostname,port)函數(shù)來指定一個端口,使用socket對象的accept方法,等待客戶端的連接,并返回connection對象 。具體步驟為:
#創(chuàng)建服務(wù)端套接字serversocket=socket()#把地址綁定到套接字serversocket.bind()#對連接進行監(jiān)聽serversocket.listen()#使用一個while進行循環(huán),并接收客戶端的連接while True:serverclient=serversocket.accept()while True:#接收已發(fā)送serverclient.recv()serverclient.send()#關(guān)閉客戶端套接字serverclient.close()#關(guān)閉服務(wù)端套接字serversocket.close()

經(jīng)驗總結(jié)擴展閱讀