P2P RDP con Python

Quiero escribir un cliente y un servidor P2P RDP simple en Python. Así es como lo dibujé.

  1. Tomar capturas de pantalla en el intervalo corto
  2. Comprímelos y envíalos a la aplicación del servidor.
  3. Obtener teclado, eventos del ratón de la aplicación del servidor. Serializarlos y enviarlos al cliente. El cliente las deserializará y utilizará las llamadas SendInput para reflejarlas

y lo que necesito saber es

  1. ¿Existe una biblioteca rdp en Python que pueda usar para simplificar mi trabajo?
  2. ¿Cómo obtener un evento de teclado o mouse de un operador de servidor con Python?
  3. ¿Cuál es la forma más fácil y sencilla de serializar eventos?
  4. ¿Cómo puedo medir las coordenadas X, Y relativas de Mouseevent?
  5. ¿Puedes dar algún ejemplo que sea fácil de seguir?
  6. y la pregunta final que escuché será más fácil hacerlo en .net si ambas plataformas utilizan el sistema operativo derivado de Microsoft. Es verdad ?

Mi aplicación cliente se ejecutará en Windows XP, Vista, 7 y la aplicación del servidor se ejecutará en Windows / Linux y también. Por favor, mencione si me falta algo.

Hace algún tiempo escribí algo llamado easyrfb que también se basa en python-vnc-viewer , pero nunca lo publiqué. No cubre exactamente lo que usted pidió, pero es muy similar. Con la esperanza de que pueda ser útil, ahora se pueden encontrar partes de él en http://hydra.geht.net/easyrfb/

Tenga en cuenta que los archivos no siempre están en un estado de trabajo, porque los archivos están directamente vinculados a mi copia de trabajo. Pero no estoy editando a menudo.

Ahora también está disponible en GitHub: https://github.com/hilbix/pyrfb/tree/easyrfb

Esto es lo que hace a mi lado:

  • Conéctese a un Xvnc que se ejecute localmente (técnicamente cualquier servidor VNC funcionará)
  • Escribe continuamente el contenido de la pantalla actual en un test.jpg altamente comprimido
  • Algunas páginas web toman ese uso de AJAX y actualizan una imagen.
  • Los clics del mouse sobre esa imagen se reenvían al servidor VNC como clics del mouse
  • La entrada del teclado se puede simular usando formularios
  • Y uno puede tomar capturas de pantalla PNG sin pérdida
  • Hay un edit.html para hacer una coincidencia aproximada basada en las capturas de pantalla de PNG (llamadas plantillas)
  • Los scripts de shell pueden comprobar si dichas plantillas coinciden o esperar a que coincidan.

La comunicación interna se realiza mediante TCP, Unix-Sockets y algunos archivos, por lo que no es difícil cambiarlos de tal manera que cada componente se ejecute en una ubicación diferente:

  • El servidor VNC (la pantalla para mostrar)
  • rfbimg.py (que hace VNC -> imagen y ofrece el control .sock )
  • Las secuencias de comandos de shell (si es necesario, utiliza el sendsock.py para hablar con .sock )
  • El servicio web ( AJAX y GET image) con stubs (reenviando comandos a .sock )
  • El cliente web de control (cualquier navegador, incluso lynx o telnet puede hacer)

Por favor no me pida documentación! Usa la fuente, Luke!

¡Advertencia de salud mental! La imagen completa es una stack sucia, grande y fea, de facepalm inductora de dolor de cabeza que crea fragmentos de scripts complejos, en su mayoría no relacionados, con nombres erróneos y engañosos, copias sucias, ediciones medias sin comentarios y sin terminar, todo está codificado como exactamente a una sola máquina, probablemente necesiten algunos ajustes locales de 10 años no documentados a paquetes no actualizados, o incluso cosas más antiguas. Así que no voy a repartir todo. (E incluso si esto me suena familiar, no, no estoy trabajando para Microsoft).

Bueno, aparte de “in Python”, suena como si estuvieras reinventando otro VNC . La mayoría de los derivados modernos se basan en TightVNC, que es de código abierto . Si puede entender el código VNC (C ++) y el protocolo RFB que utiliza, encontrará todas sus preguntas respondidas.

Esta implementación de Python de un cliente VNC también podría ser interesante para usted. Sin embargo, tenga en cuenta el comentario en esa página:

¿Para que sirve? Nada 😉 Utilice el visor VNC original para un mejor rendimiento.

¿Quizás puedas lograr tus objectives reutilizando la tecnología VNC de alguna manera? (p. ej., crear enlaces Python para el código VNC C ++ y / o usar el protocolo RFB para que pueda interactuar con los servidores / clientes VNC existentes)

Según este comentario de GitHub , puedes usar libfreerdp través de ctypes en Python.

Ver: biblioteca FreeRDP en GitHub .

FreeRDP es una biblioteca de protocolo de escritorio remoto gratuita y clientes http://www.freerdp.com/