新版的远程控制端

This commit is contained in:
2025-03-26 19:13:08 +08:00
commit e6bf2927d1
25 changed files with 13453 additions and 0 deletions

67
被控端.py Normal file
View File

@@ -0,0 +1,67 @@
# 读取controlled.ini文件
import configparser
from loguru import logger
logger.add('controlled.log', rotation='1 MB', retention='7 days', level='DEBUG')
config = configparser.ConfigParser()
config.read('controlled.ini')
listen_ip = config.get('connection', 'listen_ip')
listen_port = int(config.get('connection', 'listen_port'))
password = config.get('connection', 'password')
# 模拟断开和等待连接状态
logger.info('断开状态')
logger.info('等待连接状态')
import socket
import selectors
# 创建一个默认的选择器对象
sel = selectors.DefaultSelector()
# 创建一个TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置套接字选项,允许地址重用
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定到指定的IP地址和端口
server_socket.bind((listen_ip, listen_port))
# 开始监听允许的最大连接数为10
server_socket.listen(10)
logger.info(f'正在监听 {listen_ip}:{listen_port}')
# 将套接字设置为非阻塞模式
server_socket.setblocking(False)
# 注册服务器套接字到选择器,监听读事件
sel.register(server_socket, selectors.EVENT_READ, data=None)
while True:
# 等待事件发生
events = sel.select(timeout=None)
for key, mask in events:
if key.data is None:
# 如果是服务器套接字事件,意味着有新的连接
conn, addr = server_socket.accept()
logger.info(f'接受来自 {addr} 的连接')
conn.setblocking(False)
# 注册新连接的套接字到选择器,监听读事件
data = {'addr': addr}
sel.register(conn, selectors.EVENT_READ, data=data)
else:
# 如果是客户端套接字事件,意味着有数据可读
conn = key.fileobj
data = key.data
try:
# 接收数据
recv_data = conn.recv(1024)
if recv_data:
logger.debug(f'{data['addr']} 接收数据: {recv_data.decode()}')
else:
# 如果没有数据,意味着客户端关闭了连接
logger.info(f'关闭来自 {data['addr']} 的连接')
sel.unregister(conn)
conn.close()
except Exception as e:
# 处理异常,关闭连接
logger.error(f'处理来自 {data['addr']} 的连接时出错: {e}')
sel.unregister(conn)
conn.close()