日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python基于socket模擬實現ssh遠程執行命令

瀏覽:22日期:2022-07-03 10:42:08

一、subprocess.Popen()

subprocess模塊定義了一個類: Popen

類原型:

class subprocess.Popen( args, bufsize = 0, executable = None, stdin = None, stdout = None, stderr = None, preexec_fn = None, close_fds = False, shell = False, cwd = None, env = None, universal_newlines = False, startupinfo = None, creationflags = 0)

我們只需要關注其中幾個參數:

args:

args參數。可以是一個字符串,可以是一個包含程序參數的列表。要執行的程序一般就是這個列表的第一項,或者是字符串本身。

shell=True:

在Linux下,當shell=True時,如果arg是個字符串,就使用shell來解釋執行這個字符串。如果args是個列表,則第一項被視為命令,其余的都視為是給shell本身的參數。也就是說,等效于:subprocess.Popen([’/bin/sh’, ’-c’, args[0], args[1], ...])

stdin stdout和stderr:

stdin stdout和stderr,分別表示子程序的標準輸入、標準輸出和標準錯誤。可選的值有PIPE或者一個有效的文件描述符(其實是個正整數)或者一個文件對象,還有None。如果是PIPE,則表示需要創建一個新的管道,如果是None,不會做任何重定向工作,子進程的文件描述符會繼承父進程的。另外,stderr的值還可以是STDOUT,表示子進程的標準錯誤也輸出到標準輸出。

二、粘包現象

所謂粘包問題主要還是因為接收方不知道消息之間的界限,還有系統緩存區的問題,時間差的原因,不知道一次性提取多少字節的數據所造成的。

須知:只有TCP有粘包現象,UDP永遠不會粘包

粘包不一定會發生,如果發生了:1.可能是在客戶端已經粘了;2.客戶端沒有粘,可能是在服務端粘了

緩沖區的作用:存儲少量數據

如果你的網絡出現短暫的異常或者波動,接收數據就會出現短暫的中斷,影響你的下載或者上傳的效率。但是,緩

沖區解決了上傳下載的傳輸效率的問題,帶來了黏包問題。

收發的本質:不一定是一收一發

三、為什么出現粘包?

1,接收方沒有及時接收緩沖區的包,造成多個包接收(客戶端發送了一段數據,服務端只收了一小部分,服務端下次再收的時候還是從緩沖區拿上次遺留的數據,產生粘包)recv會產生黏包(如果recv接受的數據量(1024)小于發送的數據量,第一次只能接收規定的數據量1024,第二次接收剩余的數據量)

2,發送端需要等緩沖區滿才發送出去,造成粘包(發送數據時間間隔很短,數據也很小,會合到一起,產生粘包)send 也可能發生粘包現象。(連續send少量的數據發到輸出緩沖區,由于緩沖區的機制,也可能在緩沖區中不斷積壓,多次寫入的數據被一次性發送到網絡)

出現粘包現象的代碼實例

server. py

import socketimport subprocess# 建立phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# 綁定phone.bind((’127.0.0.1’, 8081))# 監聽phone.listen(5)# 通信循環while True: # 接收客戶端連接請求 conn, client_addr = phone.accept() while True: # 接收客戶端數據/命令 cmd = conn.recv(1024) if not cmd: break # 創建管道 obj = subprocess.Popen(cmd.decode(’utf-8’), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout = obj.stdout.read() stderr = obj.stderr.read() # 向客戶端發送數據 conn.send(stdout) conn.send(stderr) # 結束連接 conn.close()# 關閉套接字phone.close()

client. py

import socket# 建立phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 連接phone.connect((’127.0.0.1’, 8081))while True: cmd = input(’>>> ’).strip() if not cmd: continue if cmd == ’quit’: break # 給服務端發送數據/命令 phone.send(cmd.encode(’utf-8’)) # 接收服務端數據/命令 data = phone.recv(1024) print(data.decode(’utf-8’))# 關閉套接字phone.close()

粘包現象運行結果

python基于socket模擬實現ssh遠程執行命令

python基于socket模擬實現ssh遠程執行命令

python基于socket模擬實現ssh遠程執行命令

可以觀察到執行兩次ls命令后,服務端返回的仍然是ifconfig命令的結果,最后一次ls命令的末尾才出現ls命令返回的部分結果

四、解決粘包問題的代碼實例server. py

import socketimport subprocessimport jsonimport struct# 建立phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# 綁定phone.bind((’127.0.0.1’, 8081))# 監聽phone.listen(5)# 通信循環while True: # 接收客戶端連接請求 conn, client_addr = phone.accept() while True: # 接收客戶端數據/命令 cmd = conn.recv(1024) if not cmd: continue # 創建數據流管道 obj = subprocess.Popen(cmd.decode(’utf-8’), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout = obj.stdout.read() stderr = obj.stderr.read() # 向客戶端發送數據 # 解決粘包問題 # 1.制作固定長度的報頭 header_dic = { ’filename’: ’a.txt’, ’total_size’: len(stdout)+len(stderr) } # 序列化報頭 header_json = json.dumps(header_dic) # 序列化為byte字節流類型 header_bytes = header_json.encode(’utf-8’) # 編碼為utf-8(Mac系統) # 2.先發送報頭的長度 # 2.1 將byte類型的長度打包成4位int conn.send(struct.pack(’i’, len(header_bytes))) # 2.2 再發報頭 conn.send(header_bytes) # 2.3 再發真實數據 conn.send(stdout) conn.send(stderr) # 結束連接 conn.close()# 關閉套接字phone.close()

client. py

import socketimport structimport json# 建立phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 連接phone.connect((’127.0.0.1’, 8081))while True: cmd = input(’>>> ’).strip() if not cmd: continue if cmd == ’quit’: break # 給服務端發送命令 phone.send(cmd.encode(’utf-8’)) # 接收服務端數據 # 1.先收報頭長度 obj = phone.recv(4) header_size = struct.unpack(’i’, obj)[0] # 2.收報頭 header_bytes = phone.recv(header_size) # 3.從報頭中解析出數據的真實信息(報頭字典) header_json = header_bytes.decode(’utf-8’) header_dic = json.loads(header_json) total_size = header_dic[’total_size’] # 4.接受真實數據 recv_size = 0 recv_data = b’’ while recv_size < total_size: res = phone.recv(1024) recv_data += res recv_size += len(res) print(recv_data.decode(’utf-8’))# 關閉套接字phone.close()

以上就是python基于socket模擬實現ssh遠程執行命令的詳細內容,更多關于python基于socket實現ssh遠程執行命令的資料請關注好吧啦網其它相關文章!

以上就是python基于socket模擬實現ssh遠程執行命令的詳細內容,更多關于python socket的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本精品不卡| 99久久亚洲精品蜜臀| 亚洲精品一二三区区别| 色黄视频在线观看| 日韩伦理在线一区| 日韩免费小视频| 日韩综合精品| 999国产精品999久久久久久| 欧美www视频在线观看| 另类小说一区二区三区| 国产精品一区二区三区美女| 欧美一区精品| 日本一区中文字幕| 91精品国产自产在线丝袜啪| 久久激情五月婷婷| 欧美国产91| 国产亚洲一区在线| 99久久亚洲精品蜜臀| 久久精品官网| 亚洲精品福利| 国产一区二区三区四区五区 | 亚洲欧美日韩国产综合精品二区| 国产成人精品免费视| 精品国产乱码| 欧美gv在线| 99综合视频| 综合国产精品| 国产精品伦一区二区| 成人一区而且| 蜜桃视频欧美| 亚洲精品欧洲| 国产精品白丝久久av网站| 色婷婷色综合| 91成人超碰| 综合精品一区| 国产精品麻豆成人av电影艾秋 | 蜜桃视频欧美| 天堂俺去俺来也www久久婷婷| 国产精品115| 久久九九精品| 日韩久久一区| 免费一二一二在线视频| 噜噜噜久久亚洲精品国产品小说| 97精品国产99久久久久久免费| 黄色网一区二区| 中文日韩在线| 国产精品对白| 亚洲涩涩在线| 99成人在线| 国产精品调教| 欧美日韩国产高清电影| 综合欧美亚洲| 精品视频高潮| 美女网站久久| 国产激情久久| 伊人久久婷婷| 国产欧美日韩| 91综合网人人| 亚洲一区不卡| 国产极品久久久久久久久波多结野| 电影91久久久| 最新亚洲一区| 欧美亚洲三级| 欧美肉体xxxx裸体137大胆| 亚洲一区二区三区高清不卡| 牛牛精品成人免费视频| 国产美女一区| 精品久久久久中文字幕小说| 久久av一区| 久久精品国产成人一区二区三区| 影音先锋久久| 久久久精品区| 亚洲欧美久久久| 国产精品国产一区| 视频在线在亚洲| 91av亚洲| 色婷婷成人网| 日韩免费av| 日韩和欧美的一区| 久久亚洲国产| 国产精品国产三级在线观看| 久久国产成人午夜av影院宅| 欧美精品三级在线| 免费黄色成人| 国产精品成人**免费视频| 欧美日韩精品免费观看视频完整| 国产精品久久久久久久久久久久久久久| 狠狠久久婷婷| 精品久久国产一区| 欧美一区二区三区久久精品| 三级小说欧洲区亚洲区| 日韩精品一级中文字幕精品视频免费观看 | 最新国产精品久久久| 久久婷婷国产| 日韩高清电影一区| 久久精品国产大片免费观看| 欧美精品中文字幕亚洲专区| 久久久精品久久久久久96| 美腿丝袜亚洲一区| 日韩中文字幕亚洲一区二区va在线| 蜜臀国产一区| 国产欧美日韩一级| 日韩精品麻豆| 精品久久美女| 欧美亚洲三级| 日韩高清电影一区| 欧美中文日韩| 欧美精品羞羞答答| 欧美亚洲日本精品| 激情久久99| 国产精品久久乐| 欧美在线看片| 精品91久久久久| 1000部精品久久久久久久久| 国语精品一区| 麻豆中文一区二区| 婷婷综合一区| 91精品电影| 成午夜精品一区二区三区软件| 国产乱码精品一区二区三区四区| 欧美~级网站不卡| 久久青草久久| 午夜久久中文| 蜜桃av.网站在线观看| 国产精品流白浆在线观看| 欧美日韩伊人| 日本不卡视频在线观看| 五月天综合网站| 久久久久久久久丰满| 在线看片福利| 精品福利久久久| 视频在线观看一区| 日av在线不卡| 99精品99| 在线视频亚洲欧美中文| 日韩一区二区免费看| 久久成人精品| 亚洲一区二区三区四区五区午夜 | 欧美91精品| 日韩不卡视频在线观看| 欧洲毛片在线视频免费观看| 久久一区二区三区喷水| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产成人精品一区二区免费看京 | 91精品啪在线观看国产18| 久久久久久久久久久9不雅视频| 日韩欧美自拍| 亚洲成人精选| 中文精品在线| 在线精品一区二区| 免费观看在线色综合| 日韩不卡一二三区| 国产精品久久久网站| 成人在线免费观看网站| 国产精品美女在线观看直播 | 视频一区二区三区入口| 欧美综合国产| 亚洲精品高潮| 麻豆精品少妇| 高清在线一区| 91国语精品自产拍| 蜜桃视频一区二区| 国产精品igao视频网网址不卡日韩 | 精品久久91| 99精品综合| 99成人超碰| 亚洲一区二区免费在线观看| 日本aⅴ免费视频一区二区三区| 久久狠狠亚洲综合| 国内揄拍国内精品久久| 日韩久久99| 日韩av免费大片| 久久精品国内一区二区三区水蜜桃| 午夜在线视频一区二区区别| 中文字幕免费精品| 国产aⅴ精品一区二区三区久久 | 国产一区二区三区网| 日韩在线第七页| 亚洲精品国产偷自在线观看| 亚洲二区三区不卡| 日韩中文字幕亚洲一区二区va在线| 亚洲男人在线| 久久精品国产久精国产爱| av不卡在线| 国产毛片精品久久| 亚洲激情偷拍| 国产精品三p一区二区| 欧美亚洲国产精品久久| 蜜芽一区二区三区| av资源中文在线| 99日韩精品| 国产精品久久久久蜜臀| 狠狠干成人综合网| 久久a爱视频| 国产麻豆久久| 国产精品手机在线播放| 在线日韩一区| 老牛国产精品一区的观看方式| 国产欧美日韩免费观看| 欧美日韩国产精品一区二区亚洲|