一般来说,os模块自带os.system()和os.popen()两个方法用于命令执行,os.system()用来执行系统命令os.popen()可以理解为把命令执行结果变成文件并可供读写,我们主要使用popen()方法
废话不多说,远程服务端的命令执行模块直接上代码:
1 import os 2 3 4 def runcommand(command): 5 return os.popen(command)
接下来使用socket模块写一个简单的服务端和客户端
服务端:
1 HOST = '127.0.0.1' # 服务端IP 2 PORT = 6666 # 服务端开放的端口 3 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建套接字 4 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 服务器关闭时立马终止并且释放服务器资源 5 print(s.bind((bytes(HOST.encode('utf-8')), PORT))) 6 7 print("[*] listen on {}:{}".format(HOST, PORT)) # 输出正在监听的状态 8 s.listen(3) # 开始监听 9 conn, addr = s.accept() # 同意用户登录服务器 10 conn.send("->".encode()) # 发送信息 -> 11 while True: 12 print('connected by:', addr) # 输出连接者信息 13 request_cmd = conn.recv(1024) # 获取客户端发送的信息 14 print(request_cmd.decode()) # 在服务端输出来自客户端的指令 15 cmddata = request_cmd.decode().split('b') # 因为发送过来的格式都是被标记为bytes类型的字节类型字符串,所以需要进行二次加工把 'b'去除 16 replay_cmd = runcommand(cmddata[0]) # 本地执行指令 17 conn.send(replay_cmd.read().encode()) # 发送命令执行结果 18 conn.send('->'.encode()) # 发送 ->字符串 19 continue
客户端:
1 import socket 2 3 HOST = '127.0.0.1' 4 PORT = 6666 5 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 6 s.connect((HOST, PORT)) 7 8 replay = s.recv(1024).decode() 9 print(replay) 10 while True: 11 request = input("") 12 s.send(request.encode()) 13 replay = s.recv(1024) 14 print(replay.decode()) 15 if len(replay.decode()) != 0: 16 continue
客户端执行效果:
服务端执行效果:
标签:socket,python,cmd,replay,print,os,服务端 From: https://www.cnblogs.com/tugoufenrir/p/16893600.html