电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:3日期: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 編程
相關文章:
主站蜘蛛池模板: 科普仪器菏泽市教育教学仪器总厂 | 钣金加工厂家-钣金加工-佛山钣金厂-月汇好 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 千斤顶,液压千斤顶-力良企业,专业的液压千斤顶制造商,shliliang.com | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 广东泵阀展|阀门展-广东国际泵管阀展览会 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | YJLV22铝芯铠装电缆-MYPTJ矿用高压橡套电缆-天津市电缆总厂 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 永嘉县奥阳陶瓷阀门有限公司| 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | 河南空气能热水器-洛阳空气能采暖-洛阳太阳能热水工程-洛阳润达高科空气能商行 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 柔性测斜仪_滑动测斜仪-广州杰芯科技有限公司 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 厌氧工作站-通用型厌氧工作站-上海胜秋科学仪器有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 成都办公室装修-办公室设计-写字楼装修设计-厂房装修-四川和信建筑装饰工程有限公司 | 绿叶|绿叶投资|健康产业_绿叶投资集团有限公司 |