2013-07-16 13 views
7

Tak, mam aplikację w Pythonie, ale chcę wiedzieć, czy komputer (który jest uruchomiony) jest włączony, z innego komputera zdalnego.Python - Wykrywanie, czy komputer zdalny jest włączony

Czy jest jakiś sposób to zrobić? Myślałem, że będę używał pakietów UDP, aby wysłać coś w stylu keep-alive, używając licznika. Dawny. co 5 minut klient wysyła pakiet UDP "keep-alive" na serwer. Z góry dziękuję!

+0

Myślę, że Twój pomysł jest na dobrej drodze, co próbowaliście do tej pory? –

+2

Tytuł jest wprowadzający w błąd lub po prostu chcesz wykryć, czy aplikacja działa. Jeśli później, zrobi to dowolny typ pingowania. – Ma3x

+0

Zgadzam się w/@ Ma3x, to pytanie naprawdę nie ma wiele do zrobienia w/Python. – Sabuncu

Odpowiedz

0

Wygląda na to, że szukasz narzędzia do monitorowania sieci/hosta lub zwykłego monitora rytmu serca. W zależności od specyfiki (np. Liczba hostów do monitorowania) może pomóc coś takiego jak Nagios, Munin lub Heartbeat.

0

Tak, to jest droga. trochę jak wysyłanie pulsu pulsu. Od czasu UDP i od tego, że jest to tylko komunikat nagłówkowy, możesz zmniejszyć częstotliwość, aby powiedzieć 10 sekund. Nie powinno to spowodować żadnej dającej się zmierzyć degradacji systemu od czasu, gdy chodzi tylko o dwa systemy, o których mówimy.

Tutaj czuję, UDP może być lepszy w porównaniu do TCP. Jest lekki, nie zużywa wielu zasobów systemowych i teoretycznie jest szybszy. Minusem byłoby utrata pakietów. Można to obejść, wprowadzając pewną logikę, gdy 10 pakietów (w odstępie 10 sekund) nie jest odbieranych kolejno, a następnie deklaruje, że drugi system jest nieosiągalny.

+0

Hej, to była moja odpowiedź :) –

3

Najpierw należy wiedzieć, że nie ma standardowego sposobu określania, czy komputer jest włączony, czy nie, i nie zależy to od języka/platformy. Komputer może sfałszować każdy stan, który próbujesz sprawdzić.

W zwykły sposób w celu sprawdzenia, czy komputer jest włączony, wysyła Ping (żądanie echa ICMP). This answer pokazuje, jak wysłać Ping za pomocą Pythona.

17

Jeśli twoim celem rzeczywiście jest sprawdzenie, czy dana usługa jest uruchomiona na komputerze zdalnym, można sprawdzić, czy port sieciowy, że usługa ta powinna działać na to osiągalne. Przykład:

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

Jeśli aplikacja, dla której chcesz przetestować, jest przeznaczona do pracy na przykład port 1337, a następnie sprawdź ten port.

+0

Dla maszyny Windows nie działa –