python ssh小程序
client.py
import socket import os import struct import json if os.name == 'nt': code = 'gbk' elif os.name == 'posix': code = 'utf-8' client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect(('127.0.0.1',8080)) while 1: msg = input('content:').strip() if not msg: continue client.send(msg.encode(code)) #获取header长度 header_lenth = client.recv(4) print('*********',header_lenth) header_lenth = struct.unpack('i',header_lenth)[0] #获取header header = client.recv(header_lenth) # header = struct.unpack('i',header)[0] #信息长度 data_lenth = json.loads(header.decode(code))['lenth'] print(data_lenth) data_recv_lenth = 0 data_recv = b'' while data_recv_lenth < data_lenth: data = client.recv(1024) data_recv += data data_recv_lenth += len(data_recv) print(data_recv.decode(code),len(data_recv.decode(code))) client.close()
server.py
import socket import subprocess import os import struct import json if os.name == 'nt': code = 'gbk' elif os.name == 'posix': code = 'utf-8' #定义socket类型为 Ipv4 tcp server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #设定socket可重用ip server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #绑定IP、端口 server.bind(('127.0.0.1',8080)) #监听连接数 server.listen(5) while 1: #等待连接 conn,client_addr = server.accept() print(client_addr) while 1: try: #接收到的信息 data = conn.recv(1024) if not data: continue print(data) #执行获取到的命令,注意命令需是非bytes类型,接收到的bytes类型数据需要解码 obj = subprocess.Popen(data.decode(code),shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE) stderr = obj.stderr.read() stdout = obj.stdout.read() data = stderr+stdout #制作报头 header_dict = { 'filename':'a.txt', 'md5':'aaaaaaaaaaaaaa', 'lenth':len(data) } header = json.dumps(header_dict).encode(code) # data_lenth = struct.pack('i',len(data)) header_lenth = struct.pack('i',len(header)) #发送header长度 conn.send(header_lenth) #发送header conn.send(header) #返回信息 conn.send(data) except ConnectionResetError: break conn.close() server.close()
posted on 2020-10-08 16:48 Hello_Thanos 阅读(97) 评论(0) 编辑 收藏 举报