2013-07-16 11 views
7

So habe ich eine Anwendung in Python, aber ich möchte wissen, ob der Computer (auf dem die Anwendung ausgeführt wird) von einem anderen Remote-Computer eingeschaltet ist.Python - Erkennen, ob Remote-Computer eingeschaltet ist

Gibt es eine Möglichkeit, dies zu tun? Ich dachte daran, UDP-Pakete zu verwenden, um eine Art Keep-Alive zu senden, mit einem Zähler. Ex. alle 5 Minuten sendet der Client ein UDP-Keep-Alive-Paket an den Server. Danke im Voraus!

+0

Ich denke deine Idee ist auf dem richtigen Weg, was hast du bisher versucht? –

+2

Entweder ist der Titel irreführend oder Sie möchten nur feststellen, ob Ihre Anwendung ausgeführt wird. Wenn später, dann wird jede Art von Pingen tun. – Ma3x

+0

Ich stimme w/@ Ma3x, diese Frage hat wirklich nicht viel mit Python zu tun. – Sabuncu

Antwort

0

Es scheint, als ob Sie nach einem Netzwerk/Host-Überwachungstool oder nur einem einfachen Herzschlagmonitor suchen. Abhängig von den Besonderheiten (wie Anzahl der zu überwachenden Hosts) könnte etwas wie Nagios, Munin oder Heartbeat helfen.

0

ja das ist der Weg zu gehen. So etwas wie das Senden von Heartbeat Ping. Seit seiner UDP und seit seiner nur eine Header-Nachricht können Sie die Frequenz auf 10 Sekunden reduzieren. Dies sollte keine messbare Systemleistungsverschlechterung verursachen, da es nur zwei Systeme gibt, von denen wir sprechen.

Ich fühle mich hier, UDP ist möglicherweise besser im Vergleich zu TCP. Sein geringes Gewicht, verbraucht nicht viel Systemressourcen und ist theoretisch schneller. Nachteil wäre, dass es Paketverluste geben könnte. Sie können das umgehen, indem Sie eine Logik einbauen, wenn zum Beispiel 10 Pakete (im Abstand von 10 Sekunden) nicht nacheinander empfangen werden und dann das andere System für nicht erreichbar erklären.

+0

Hey das war meine Antwort :) –

3

Zuerst sollten Sie wissen, dass es keinen Standard gibt, um festzustellen, ob ein Computer eingeschaltet ist oder nicht, und dies ist nicht abhängig von der Sprache/Plattform. Ein Computer kann jeden Zustand fälschen, den Sie überprüfen möchten.

Aber die übliche Weise zu überprüfen, ob ein Computer eingeschaltet ist sendet eine Ping (ICMP Echo Request). This answer zeigt, wie ein Ping mit Python gesendet wird.

17

Wenn Ihr Ziel ist es, tatsächlich zu prüfen, ob ein bestimmter Dienst auf dem Remote-Computer ausgeführt wird, können Sie testen, ob die Netzwerk-Port, der dieser Dienst laufen soll erreichbar ist. Beispiel:

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() 

Wenn die Anwendung, für die Sie testen möchten, für z. Port 1337, dann überprüfen Sie diesen Port.

+0

Für Windows-Maschine funktioniert es nicht –