2011-05-01 16 views
13

Quiero escribir un script de Python que verifique la red local de los usuarios para ver otras instancias del script que se está ejecutando.Redes descentralizadas en Python - ¿Cómo?

Para los fines de esta pregunta, digamos que estoy escribiendo una aplicación que se ejecuta únicamente a través de la línea de comandos, y simplemente actualizaré la pantalla cuando se encuentre "otra instancia" de la aplicación en la red local. Ejemplo de salida a continuación:

$ python question.py 
Thanks for running ThisApp! You are 192.168.1.101. 
    Found 192.168.1.102 running this application. 
    Found 192.168.1.104 running this application. 

¿Qué bibliotecas/proyectos existen para ayudar a facilitar algo como esto?

Respuesta

7

Una de las maneras de hacer esto sería la aplicación en cuestión está transmitiendo paquetes UDP y su aplicación está recibiendo que desde diferentes nodos y luego se presentan eso. Twisted Networking Framework proporciona instalaciones para hacer tal trabajo. La documentación proporciona algunos ejemplos simples también.

3

Bueno, podría escribir algo utilizando el módulo de socket. Sin embargo, tendría que tener dos programas, un servidor en la computadora local de los usuarios y luego un programa cliente que interactuaría con el servidor. El servidor también usaría el módulo de selección para escuchar múltiples conexiones. A continuación, tendrá un programa de cliente que envía algo al servidor cuando se ejecuta o cuando lo desee. El servidor podría entonces imprimir qué conexiones está manteniendo, incluidos los detalles, como la dirección IP.

Esto está documentado muy bien en este enlace, más de lo que necesita pero se lo explicará a usted como a mí. http://ilab.cs.byu.edu/python/

2
  • Usted puede tener una solución basada en servidor : un servidor central donde los clientes se registran y consulta para otros clientes están registrando. Un marco de servidor como Twisted puede ayudar aquí.
  • En una configuración peer-to-peer, push se pueden usar tecnologías como las difusiones UDP, donde cada cliente está emitiendo un paquete de latidos con frecuencia en la red, para que otros las reciban. Los módulos básicos como el socket ayudarían con eso.
  • Alternativamente, puede optar por un pull enfoque, donde el par interesante tendría que descubrir los demás activamente. Este es probablemente el menos directo. Por un lado, necesita escanear la red, es decir, averiguar qué IP pertenecen a la red local y pasar por ellas. Entonces necesitarás contactar cada IP por turno. Si su programa abre un puerto TCP, puede intentar conectarse y descubrir que su programa se está ejecutando allí. Si desea que su programa ignore por completo estas consultas, es posible que necesite abrir una conexión ssh a la IP remota y escanear la lista de procesos para su programa. Todo esto podría involucrar varios módulos y bibliotecas. Uno que quizás quiera consultar es execnet.