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

您的位置:首頁技術(shù)文章
文章詳情頁

python基于socket模擬實(shí)現(xiàn)ssh遠(yuǎn)程執(zhí)行命令

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

一、subprocess.Popen()

subprocess模塊定義了一個(gè)類: 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)

我們只需要關(guān)注其中幾個(gè)參數(shù):

args:

args參數(shù)。可以是一個(gè)字符串,可以是一個(gè)包含程序參數(shù)的列表。要執(zhí)行的程序一般就是這個(gè)列表的第一項(xiàng),或者是字符串本身。

shell=True:

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

stdin stdout和stderr:

stdin stdout和stderr,分別表示子程序的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤。可選的值有PIPE或者一個(gè)有效的文件描述符(其實(shí)是個(gè)正整數(shù))或者一個(gè)文件對象,還有None。如果是PIPE,則表示需要?jiǎng)?chuàng)建一個(gè)新的管道,如果是None,不會(huì)做任何重定向工作,子進(jìn)程的文件描述符會(huì)繼承父進(jìn)程的。另外,stderr的值還可以是STDOUT,表示子進(jìn)程的標(biāo)準(zhǔn)錯(cuò)誤也輸出到標(biāo)準(zhǔn)輸出。

二、粘包現(xiàn)象

所謂粘包問題主要還是因?yàn)榻邮辗讲恢老⒅g的界限,還有系統(tǒng)緩存區(qū)的問題,時(shí)間差的原因,不知道一次性提取多少字節(jié)的數(shù)據(jù)所造成的。

須知:只有TCP有粘包現(xiàn)象,UDP永遠(yuǎn)不會(huì)粘包

粘包不一定會(huì)發(fā)生,如果發(fā)生了:1.可能是在客戶端已經(jīng)粘了;2.客戶端沒有粘,可能是在服務(wù)端粘了

緩沖區(qū)的作用:存儲少量數(shù)據(jù)

如果你的網(wǎng)絡(luò)出現(xiàn)短暫的異常或者波動(dòng),接收數(shù)據(jù)就會(huì)出現(xiàn)短暫的中斷,影響你的下載或者上傳的效率。但是,緩

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

收發(fā)的本質(zhì):不一定是一收一發(fā)

三、為什么出現(xiàn)粘包?

1,接收方?jīng)]有及時(shí)接收緩沖區(qū)的包,造成多個(gè)包接收(客戶端發(fā)送了一段數(shù)據(jù),服務(wù)端只收了一小部分,服務(wù)端下次再收的時(shí)候還是從緩沖區(qū)拿上次遺留的數(shù)據(jù),產(chǎn)生粘包)recv會(huì)產(chǎn)生黏包(如果recv接受的數(shù)據(jù)量(1024)小于發(fā)送的數(shù)據(jù)量,第一次只能接收規(guī)定的數(shù)據(jù)量1024,第二次接收剩余的數(shù)據(jù)量)

2,發(fā)送端需要等緩沖區(qū)滿才發(fā)送出去,造成粘包(發(fā)送數(shù)據(jù)時(shí)間間隔很短,數(shù)據(jù)也很小,會(huì)合到一起,產(chǎn)生粘包)send 也可能發(fā)生粘包現(xiàn)象。(連續(xù)send少量的數(shù)據(jù)發(fā)到輸出緩沖區(qū),由于緩沖區(qū)的機(jī)制,也可能在緩沖區(qū)中不斷積壓,多次寫入的數(shù)據(jù)被一次性發(fā)送到網(wǎng)絡(luò))

出現(xiàn)粘包現(xiàn)象的代碼實(shí)例

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))# 監(jiān)聽phone.listen(5)# 通信循環(huán)while True: # 接收客戶端連接請求 conn, client_addr = phone.accept() while True: # 接收客戶端數(shù)據(jù)/命令 cmd = conn.recv(1024) if not cmd: break # 創(chuàng)建管道 obj = subprocess.Popen(cmd.decode(’utf-8’), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout = obj.stdout.read() stderr = obj.stderr.read() # 向客戶端發(fā)送數(shù)據(jù) conn.send(stdout) conn.send(stderr) # 結(jié)束連接 conn.close()# 關(guān)閉套接字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 # 給服務(wù)端發(fā)送數(shù)據(jù)/命令 phone.send(cmd.encode(’utf-8’)) # 接收服務(wù)端數(shù)據(jù)/命令 data = phone.recv(1024) print(data.decode(’utf-8’))# 關(guān)閉套接字phone.close()

粘包現(xiàn)象運(yùn)行結(jié)果

python基于socket模擬實(shí)現(xiàn)ssh遠(yuǎn)程執(zhí)行命令

python基于socket模擬實(shí)現(xiàn)ssh遠(yuǎn)程執(zhí)行命令

python基于socket模擬實(shí)現(xiàn)ssh遠(yuǎn)程執(zhí)行命令

可以觀察到執(zhí)行兩次ls命令后,服務(wù)端返回的仍然是ifconfig命令的結(jié)果,最后一次ls命令的末尾才出現(xiàn)ls命令返回的部分結(jié)果

四、解決粘包問題的代碼實(shí)例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))# 監(jiān)聽phone.listen(5)# 通信循環(huán)while True: # 接收客戶端連接請求 conn, client_addr = phone.accept() while True: # 接收客戶端數(shù)據(jù)/命令 cmd = conn.recv(1024) if not cmd: continue # 創(chuàng)建數(shù)據(jù)流管道 obj = subprocess.Popen(cmd.decode(’utf-8’), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout = obj.stdout.read() stderr = obj.stderr.read() # 向客戶端發(fā)送數(shù)據(jù) # 解決粘包問題 # 1.制作固定長度的報(bào)頭 header_dic = { ’filename’: ’a.txt’, ’total_size’: len(stdout)+len(stderr) } # 序列化報(bào)頭 header_json = json.dumps(header_dic) # 序列化為byte字節(jié)流類型 header_bytes = header_json.encode(’utf-8’) # 編碼為utf-8(Mac系統(tǒng)) # 2.先發(fā)送報(bào)頭的長度 # 2.1 將byte類型的長度打包成4位int conn.send(struct.pack(’i’, len(header_bytes))) # 2.2 再發(fā)報(bào)頭 conn.send(header_bytes) # 2.3 再發(fā)真實(shí)數(shù)據(jù) conn.send(stdout) conn.send(stderr) # 結(jié)束連接 conn.close()# 關(guān)閉套接字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 # 給服務(wù)端發(fā)送命令 phone.send(cmd.encode(’utf-8’)) # 接收服務(wù)端數(shù)據(jù) # 1.先收報(bào)頭長度 obj = phone.recv(4) header_size = struct.unpack(’i’, obj)[0] # 2.收報(bào)頭 header_bytes = phone.recv(header_size) # 3.從報(bào)頭中解析出數(shù)據(jù)的真實(shí)信息(報(bào)頭字典) header_json = header_bytes.decode(’utf-8’) header_dic = json.loads(header_json) total_size = header_dic[’total_size’] # 4.接受真實(shí)數(shù)據(jù) 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’))# 關(guān)閉套接字phone.close()

以上就是python基于socket模擬實(shí)現(xiàn)ssh遠(yuǎn)程執(zhí)行命令的詳細(xì)內(nèi)容,更多關(guān)于python基于socket實(shí)現(xiàn)ssh遠(yuǎn)程執(zhí)行命令的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

以上就是python基于socket模擬實(shí)現(xiàn)ssh遠(yuǎn)程執(zhí)行命令的詳細(xì)內(nèi)容,更多關(guān)于python socket的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品国产www456c0m| 亚洲网站视频| 免费高清在线一区| 女人av一区| 日韩成人免费| 在线综合亚洲| 色天使综合视频| 另类av一区二区| 国产欧美88| 日本91福利区| 欧美久久亚洲| 国产精品美女午夜爽爽| 国产日韩免费| 国产女人18毛片水真多18精品| 午夜宅男久久久| 一区二区三区四区日韩| 中文字幕av一区二区三区四区| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲精品欧洲| 久久不卡日韩美女| 国产在线一区不卡| 成人免费电影网址| 日韩一级精品| 婷婷综合电影| 国产日韩一区二区三区在线播放| 麻豆精品新av中文字幕| 裤袜国产欧美精品一区| 99精品视频精品精品视频| 在线亚洲精品| 午夜亚洲一区| 国产精品久久久亚洲一区| 成人午夜在线| 激情欧美日韩一区| 亚洲三级毛片| 国产精品成人自拍| 日韩天堂在线| 日韩在线观看一区二区| 国产日韩欧美一区二区三区在线观看| 国产精品99视频| 亚洲激情另类| 久久激情av| 日韩免费小视频| 亚洲一二av| 精品国产三区在线| 啪啪国产精品| 亚洲精品黄色| 色在线视频观看| 蜜桃视频在线观看一区| 麻豆国产精品视频| 在线日韩电影| 日韩福利在线观看| 香蕉视频亚洲一级| 日韩av电影一区| 久久精品一区二区不卡| 日本在线成人| 精品美女视频| 亚洲综合小说| 亚洲午夜天堂| 日韩一区二区三区在线看| 高清一区二区三区av| 中文日韩在线| 国产aⅴ精品一区二区四区| 视频一区二区三区中文字幕| 麻豆中文一区二区| 视频一区欧美精品| 国产拍在线视频| 三级在线观看一区二区| 国内精品亚洲| 亚洲欧美久久精品| 欧美日韩国产v| 日韩av中文字幕一区二区三区| 久久精品电影| 国产激情欧美| 午夜一区在线| 97精品一区二区| 日韩欧乱色一区二区三区在线| 日韩精品网站| 精品国产黄a∨片高清在线| 桃色一区二区| 亚洲性色av| 999久久久91| 在线免费观看亚洲| 麻豆精品视频在线| 午夜日韩av| 美女视频黄久久| 亚洲一区黄色| 久久久久久美女精品| 欧美亚洲自偷自偷| 日韩天堂在线| 日韩在线观看中文字幕| 国产精品99一区二区| 日韩精品一区二区三区中文在线 | 国产精品99一区二区三区| 蜜臀av免费一区二区三区| 欧美二区视频| 久久精品一区二区国产| 五月激激激综合网色播 | 午夜视频一区二区在线观看| 最近高清中文在线字幕在线观看1| 欧美亚洲国产日韩| 人人精品人人爱| 日韩制服丝袜av| 中文另类视频| 国产精品久久久久9999高清| 亚洲麻豆一区| 99视频一区| 国产精品激情| 久久精品女人| 日韩av电影一区| 韩国一区二区三区视频| 国产日韩三级| 日本成人在线一区| 蜜桃视频一区二区三区在线观看| 激情黄产视频在线免费观看| 老牛国内精品亚洲成av人片| 国产欧美日本| 国产欧美日本| 国产精品一区二区免费福利视频| 日本电影久久久| 伊人国产精品| 日本一区二区三区视频在线看| 亚洲资源在线| 久久精品国产999大香线蕉| 巨乳诱惑日韩免费av| 亚洲午夜一级| 亚洲aa在线| 国模大尺度视频一区二区| 国产一区清纯| 亚洲综合三区| 国产日韩欧美在线播放不卡| av在线资源| 国产精品久久久久77777丨 | 国产视频一区三区| 成人福利av| 欧美综合二区| 国产精品亚洲综合色区韩国| 极品av在线| 亚洲免费一区三区| 久久久久免费| 热久久久久久久| 超碰成人av| 亚洲开心激情| 久久国产尿小便嘘嘘| 成人va天堂| 97se亚洲| 狠狠爱成人网| 精品丝袜久久| 亚洲午夜久久| 日韩国产在线| 久久国产日韩欧美精品| 婷婷激情图片久久| 国内自拍视频一区二区三区| 亚洲免费专区| 亚洲女同一区| 日本蜜桃在线观看视频| 涩涩涩久久久成人精品| 99精品视频在线观看免费播放| 亚洲一区二区免费在线观看| 国产精品久久久久久久久妇女| 日本中文字幕不卡| 丝袜亚洲另类欧美| 欧美一区二区性| 久久男人天堂| 精品淫伦v久久水蜜桃| 亚洲欧美视频| 在线视频精品| 国产精品88久久久久久| 91精品精品| 国产激情欧美| 狠狠久久伊人| 一区在线免费| 六月丁香综合| 免费人成在线不卡| 国产精品久久久久久妇女 | 日韩成人亚洲| 亚洲天堂资源| 国产一级久久| 久久不见久久见国语| 三级精品视频| 日韩中文字幕一区二区三区| 最新日韩av| 欧美日韩一区二区三区在线电影| 国产精品白丝一区二区三区| 欧美日韩免费看片| 日韩av中文在线观看| 日本精品另类| 视频在线不卡免费观看| 日韩三区在线| 色爱av综合网| 精品国产亚洲一区二区三区在线 | 国产一区二区色噜噜| 欧美日韩激情| 国产欧美日韩免费观看| 久久久国产亚洲精品| 日韩视频一二区| 久久高清精品| 国产日韩免费| 久久久久久免费视频| 国产日本久久| 亚洲免费成人|