制作一个简易的远控终端通常包括以下步骤:
步骤一:安装必要的库
创建一个新的Python虚拟环境并安装必要的模块(socket、os、subprocess和json):
python -m venv myenv # 创建虚拟环境
source myenv/bin/activate # 激活虚拟环境
pip install socket os subprocess json # 安装依赖模块
步骤二:编写服务端代码
首先,服务端需要监听一个IP地址和端口,等待客户端连接。我们可以使用Python内置的socket
模块实现:
import socket, subprocess, os, json
def listen():
server_socket = socket.socket() # 创建socket对象
server_socket.bind(('127.0.0.1', 8080)) # 接收来自IP地址为127.0.0.1、端口号为8080的客户端请求
server_socket.listen(1) # 只接收一个客户端连接
print('Listening for incoming connections...')
client_socket, client_address = server_socket.accept() # 接收客户端连接
print(f'Connection from {client_address} has been established!')
# 处理客户端请求
while True:
try:
cmd = client_socket.recv(1024).decode() # 接收客户端请求
if cmd.lower() == 'exit':
client_socket.close()
break
if cmd[:2] == 'cd':
os.chdir(cmd[3:]) # 改变当前工作目录
client_socket.send('working directory changed to ' + os.getcwd()) # 通知客户端目录已经改变
continue
result = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) # 执行系统命令
response = {'output': result.decode('gbk'), 'error': '', 'status': 'success'}
except Exception as e:
response = {'output': '', 'error': str(e), 'status': 'fail'}
client_socket.send(json.dumps(response).encode()) # 发送结果给客户端
步骤三:编写客户端代码
客户端需要连接服务端IP地址和端口,并发送执行的命令,接收并显示命令执行的结果:
import socket, json
def connect():
client_socket = socket.socket() # 创建socket对象
client_socket.connect(('127.0.0.1', 8080)) # 连接服务端IP地址和端口
print('Connection established!')
while True:
cmd = input('Enter the command to execute: ').strip() # 读取用户输入的命令
if not cmd:
continue
if cmd.lower() == 'exit':
client_socket.send(cmd.encode())
client_socket.close() # 关闭客户端连接
break
client_socket.send(cmd.encode()) # 向服务端发送客户端输入的命令
result = json.loads(client_socket.recv(1024).decode()) # 接收服务端返回的结果
print(result['output'] if result['output'] else result['error']) # 显示命令执行结果
可以使用多个客户端连接同一个服务端,服务端会分别处理每个客户端的请求。
示例一:在远程机器上执行系统命令
运行服务端,然后在远程机器上运行客户端,输入需要执行的命令即可。
服务端:
Listening for incoming connections...
Connection from ('127.0.0.1', 50854) has been established!
客户端:
Connection established!
Enter the command to execute: hostname
DESKTOP-XXXXX
Enter the command to execute: ipconfig
Windows IP Configuration
Ethernet adapter Ethernet:
IPv4 Address. . . . . . . . . . . : 192.168.XXX.XXX
Subnet Mask . . . . . . . . . . . : 255.255.XXX.XXX
Default Gateway . . . . . . . . . : 192.168.XXX.XXX
...
在客户端上输入需要执行的命令,服务端会返回命令执行的结果。
示例二:在远程机器上打开Windows资源管理器
服务端:
Listening for incoming connections...
Connection from ('127.0.0.1', 50900) has been established!
客户端:
Connection established!
Enter the command to execute: explorer
服务端不会返回结果,但是会在远程机器上打开Windows资源管理器。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python制作一个简易的远控终端 - Python技术站