新版的远程控制端
This commit is contained in:
67
被控端.py
Normal file
67
被控端.py
Normal 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()
|
||||
Reference in New Issue
Block a user