python socket SSH
server:
# -*- coding: utf-8 -*- import socket,os server = socket.socket() server.bind(('localhost',9999)) server.listen() while True: conn, addr = server.accept() print("new connect:",addr) while True: data= conn.recv(1024) if not data: print("客户端已断开") break print("执行指令:"+data.decode()) cmd_res = os.popen(data.decode()).read() if len(cmd_res) == 0: cmd_res="cmd has no output" #整数不能直接encode , 要先转成string 在encode conn.send(str(len(cmd_res.encode())).encode(encoding='utf_8', errors='strict') ) #先发送大小给客户端 #解决粘包的问题 client_ack = conn.recv(1024) conn.send(cmd_res.encode(encoding='utf_8', errors='strict')) server.close()
client:
# -*- coding: utf-8 -*- import socket client = socket.socket() client.connect(('localhost',9999)) while True: cmd = input(">>:").strip() if len(cmd)==0:continue client.send(cmd.encode(encoding='utf_8', errors='strict')) #接收命令结果的长度 cmd_res_size = client.recv(1024) print("cmd_res_size is :",cmd_res_size.decode()) #解决粘包问题 client.send(b"send") received_size =0 received_data = b"" while received_size < int(cmd_res_size.decode()): # print(received_size ) cmd_res = client.recv(1024) #每次收到的字节数 received_size = received_size+ len(cmd_res) received_data = received_data+cmd_res print(received_data.decode()) client.close()