day26-3 模拟ssh远程执行命令
模拟ssh远程执行命令
实现在客户端输入执行命令后,返回执行命令的信息。如输入dir,显示当前目录下的所有文件和文件夹
服务器
import socket
import subprocess
# 生成服务端
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
server.bind(('127.0.0.1', 8000))
# 监听端口
server.listen(5)
print('start...')
# 链接循环
while True:
# 等待客户端连接
conn, client_addr = server.accept()
# 通信循环
while True:
try:
# 接收客户端发来的消息
cmd = conn.recv(1024)
print('来自客户端的数据:', cmd)
# 帮你执行cmd命令,然后把执行后的结果放到管道里
pipeline = subprocess.Popen(cmd.decode('utf8'),
shell=True,
stderr=subprocess.PIPE, # 把标准错误放到管道里去
stdout=subprocess.PIPE) # 把正确的信息放到管道里去
stderr = pipeline.stderr.read()
stdout = pipeline.stdout.read()
conn.send(stderr + stdout)
except ConnectionResetError:
break
客户端
import socket
# 创建客户端
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接服务端端口
client.connect(('127.0.0.1', 8000))
while True:
# 发送消息
cmd = input('please enter msg>>>')
client.send(cmd.encode('utf8'))
# 接收消息
data = client.recv(1024)
print(data.decode('gbk'))