Python 局域网远程控制电脑
1.简介:
一款由Python可以远程控制局域网电脑关机、重启、注销、锁定 、休眠、退出登录甚至能操作远程电脑Cmd终端命令的一款工具。资源及源码已打包,大家可自行下载。
工具分为1.0以及2.0版本,2.0版本在1.0终端命令行模式更改为网页界面化操作,可利用手机等多终端设备控制,更加美观实用;优化了端口设置,添加了条件判断;可结合“Radmin_LAN”软件,实现异地控制。工具可用Pyinstaller打包成无窗口后台静默运行。
默认账号:root
默认密码:123456
2. 运行效果:
1.0版本运行效果:
2.0版本运行效果:
PC端页面效果:
服务端页面:
客户端登录页面:
客户端操作页面:
手机移动端展示效果:
3. 1.0版本相关源码:
服务端server.py
import socket
import keyboard
import subprocess
import threading
import logging
import queue
'''
import win32gui
import win32con
# 获取当前窗口句柄
hwnd = win32gui.GetForegroundWindow()
# 设置窗口属性,隐藏窗口
win32gui.ShowWindow(hwnd, win32con.SW_HIDE)
'''
# 配置日志
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
print("客户端登录账号:root,密码:123456,F3关闭服务器")
print()
ip1 = '192.168.137.1' # 默认ip地址
print(f"请输入服务器IP地址(电脑的IPv4地址),不输入默认为 {
ip1}")
# 超时设置,15秒
def get_input(prompt, timeout, result_queue):
try:
user_input = input(prompt)
if user_input.strip() == "":
result_queue.put(None) # 如果用户直接回车,返回None
else:
result_queue.put(user_input)
except Exception as e:
logging.error(f"输入过程中发生错误: {
e}")
# 创建一个线程来获取输入
print("超时时间---15秒")
print()
result_queue = queue.Queue()
input_thread = threading.Thread(target=get_input, args=("请输入服务器IP地址:", 15, result_queue))
input_thread.start()
# 等待输入,如果超时则返回默认值
input_thread.join(15)
if not result_queue.empty():
ip = result_queue.get()
if ip is None:
ip = ip1 # 如果用户直接回车,使用默认值
else:
ip = ip1
print(f"最终IP地址: {
ip}")
'''
def get_ipv4_address():
hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)
return ip_address
ip=get_ipv4_address()
print(ip)
'''
# 创建一个 TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置 SO_REUSEADDR 选项
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定服务器地址和端口
server_address = (ip, 5000)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(5) # 支持最多5个并发连接
print('服务器正在等待连接...')
def close_server():
print('服务器已关闭')
server_socket.close()
exit()
# 监听 F3 键关闭服务器
keyboard.add_hotkey('F3', close_server)
def handle_client(client_socket, client_address):
try:
print('连接来自:', client_address)
# 接收账号和密码
data = client_socket.recv(1024)
logging.debug(f"接收到的数据: {
data.decode()}")
# 解析账号和密码
try:
account, password = data.decode().split(':')
except ValueError:
logging.error("账号和密码格式错误")
message = '账号和密码格式错误!'
client_socket.send(message.encode())
return
# 验证账号和密码
if account == 'root' and password == '123456':
# 发送成功消息
message = '登录成功!'
client_socket.send(message.encode())
# 接收客户端请求
while True:
request = client_socket.recv(1024).decode()
logging.debug(f"接收到的请求: {
request}")
if request == '1':
# 关机
subprocess.call('shutdown /s /t 0', shell=True)
elif request == '2':
# 重启
subprocess.call('shutdown /r /t 0', shell=True)
elif request == '3':
# 休眠
subprocess.call('rundll32.exe powrprof.dll,SetSuspendState 0,1,0', shell=True)
elif request == '4':
# 锁定
subprocess.call('rundll32.exe user32.dll,LockWorkStation', shell=True)
elif request == '0':
# 退出登录
print(client_address, "退出登录")
break
elif request == '5':
# 等待用户输入
user_input = 1
while True:
# 执行cmd命令