Python. Реализация удаленного управления
Всем привет! Хочу реализовать управление через консоль удаленной машины посредством Python. Знаю, что уже есть готовые решения а la TeamViewer или Radmin, но хотелось бы написать что-то свое. Первое, что приходит на ум - это сокеты. Т.е. слушается определенный порт и через него идет обмен данными. Вот код, только он пока еще сырой:
import socket
import time
import subprocess
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
IP = socket.gethostbyname(socket.gethostname())
PORT = 6969
listener.bind((IP, PORT))
listener.listen(0)
connection, address = listener.accept()
connection.send("Hello!".encode('utf8'))
connection.send("\r\n".encode('utf8'))
while True:
while True:
data = connection.recv(1024).decode("utf8")
cmd = data
res = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
time.sleep(3)
result = res.stdout
connection.send(result)
if not data:
break
Вроде, все хорошо, но беда в том, что подобное работает лишь если я и удаленная машина находимся в одной подсети. Доступа к маршрутизатору и возможность настроить port forwarding для доступа извне, разумеется, нет.
Есть идея перевернуть все вверх наголову и сделать так, чтобы удаленная машина стала вместо сервера клиентом, т.е., скажем так, делала каждые 5 секунд GET-запрос и получала через это дело команду для выполнения и передавала результат исполнения предыдущей команды. И написать для этого дела небольшое web-приложение...
Насколько адекватно такое решение? Может есть другие варианты кроме этих?