當前位置:
首頁 > 最新 > Python的Socket知識2:粘包處理

Python的Socket知識2:粘包處理

案例1:簡單模擬ssh交互程序

1)ssh介紹

SSH是一種網路協議,用於計算機之間的加密登錄。如果一個用戶從本地計算機,使用SSH協議登錄另一台遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。

傳統的網路服務程序,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網路上用明文傳送口令和數據,別有用心的人非常容易就可以截獲這些口令和數據。而且,這些服務程序的安全驗證方式也是有其弱點的, 就是很容易受到「中間人」(man-in-the-middle)這種方式的攻擊。所謂「中間人」的攻擊方式, 就是「中間人」冒充真正的伺服器接收你傳給伺服器的數據,然後再冒充你把數據傳給真正的伺服器。伺服器和你之間的數據傳送被「中間人」一轉手做了手腳之後,就會出現很嚴重的問題。通過使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、PoP、甚至為PPP提供一個安全的"通道"。

2)subprocess.Popen()介紹

利用subprocess.Popen()可以進入到某個輸入環境,然後再執行一系列的指令。

在一些複雜場景中,我們需要將一個進程的執行輸出作為另一個進程的輸入。在另一些場景中,我們需要先進入到某個輸入環境,然後再執行一系列的指令等。這個時候我們就需要使用到suprocess的Popen()方法。該方法有以下參數:

3)程序實現

通過控制服務端,寫入subprocess模塊實現命令輸出。

1)建立scoket_server伺服器的程序

2)建立socket_client客戶端的程序;

執行結果:

案例2:粘包處理

1)粘包概念

TCP粘包是指發送方發送的若干包數據到接收方接收時粘成一包,從接收緩衝區看,後一包數據的頭緊接著前一包數據的尾。

出現粘包現象的原因是多方面的,它既可能由發送方造成,也可能由接收方造成。發送方引起的粘包是由TCP協議本身造成的,TCP為提高傳輸效率,發送方往往要收集到足夠多的數據後才發送一包數據。若連續幾次發送的數據都很少,通常TCP會根據優化演算法把這些數據合成一包後一次發送出去,這樣接收方就收到了粘包數據。接收方引起的粘包是由於接收方用戶進程不及時接收數據,從而導致粘包現象。這是因為接收方先把收到的數據放在系統接收緩衝區,用戶進程從該緩衝區取數據,若下一包數據到達時前一包數據尚未被用戶進程取走,則下一包數據放到系統接收緩衝區時就接到前一包數據之後,而用戶進程根據預先設定的緩衝區大小從系統接收緩衝區取數據,這樣就一次取到了多包數據。

2)程序實現

發送消息前,先發送消息長度,根據消息長度,循環接收伺服器消息

1)建立scoket_server伺服器的程序

2)建立scoket_client伺服器的程序

執行結果:

案例1鏈接:https://pan.baidu.com/s/1nwYaAOp 密碼:358t

案例2鏈接:https://pan.baidu.com/s/1pLXGrH5 密碼:zodv


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

如何用Python快速導入多個excel文件併合並文件數據
2018完整Python零基礎到項目精通的乾貨學習教程,請你收藏好哦!

TAG:Python |