2013-07-16 10 views
7

Quindi, ho un'applicazione in Python, ma voglio sapere se il computer (che sta eseguendo l'applicazione) è acceso, da un altro computer remoto.Python - Rileva se il computer remoto è acceso

C'è un modo per farlo? Stavo pensando di usare i pacchetti UDP, per inviare una sorta di keep-alive, usando un contatore. Ex. ogni 5 minuti il ​​client invia un pacchetto UDP "keep-alive" al server. Grazie in anticipo!

+0

Penso che la tua idea sia sulla strada giusta, cosa hai provato fino ad ora? –

+2

O il titolo è fuorviante o vuoi solo rilevare se la tua applicazione è in esecuzione. Se in seguito si eseguirà qualsiasi tipo di ping. – Ma3x

+0

Sono d'accordo con @ Ma3x, questa domanda non ha molto da fare con Python. – Sabuncu

risposta

0

Sembra che quello che stai cercando sia uno strumento di monitoraggio host/rete, o semplicemente un semplice monitor a battito cardiaco. A seconda delle specifiche (come il numero di host da monitorare), qualcosa come Nagios, Munin o Heartbeat potrebbe aiutare.

0

sì questa è la strada da percorrere. un po 'come l'invio di ping heartbeat. Dal suo UDP e dal momento che è solo un messaggio di intestazione, puoi ridurre la frequenza per dire 10 secondi. Questo non dovrebbe causare alcun degrado perfetto del sistema misurabile dai suoi soli 2 sistemi di cui stiamo parlando.

Mi sento qui, UDP potrebbe essere migliore rispetto al TCP. È leggero, non consuma molte risorse di sistema ed è teoricamente più veloce. Unico inconveniente potrebbe essere la perdita di pacchetti. È possibile aggirarlo inserendo una logica come quando 10 pacchetti (distanziati di 10 secondi) non vengono ricevuti consecutivamente, quindi dichiarare l'altro sistema irraggiungibile.

+0

Ehi quella era la mia risposta :) –

3

Per prima cosa è necessario sapere che non esiste un modo standard per determinare se un computer è acceso o meno e questo non dipende dalla lingua o dalla piattaforma. Un computer può falsificare qualsiasi stato si tenta di controllare.

Ma il solito modo per verificare se un computer è ON sta inviando un Ping (ICMP Echo Request). This answer mostra come inviare un ping usando Python.

17

Se il vostro obiettivo in realtà è quello di verificare se un determinato servizio è in esecuzione sul computer remoto, si potrebbe verificare se la porta di rete che il servizio dovrebbe funzionare su è raggiungibile. Esempio:

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
try: 
    s.connect(('hostname', 22)) 
    print "Port 22 reachable" 
except socket.error as e: 
    print "Error on connect: %s" % e 
s.close() 

Se l'applicazione che si desidera testare è progettata per essere eseguita ad es. porta 1337, quindi controllare questa porta.

+0

Per la macchina Windows non funziona –