python ssh小程序

client.py

import socketimport osimport structimport jsonif os.name == nt: code = gbkelif os.name == posix: code = utf-8client = 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 socketimport subprocessimport osimport structimport jsonif os.name == nt: code = gbkelif os.name == posix: code = utf-8#定义socket类型为 Ipv4 tcpserver = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设定socket可重用ipserver.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()

 

python ssh小程序

相关文章