Prüfen ob PC im Netzwerk gestartet ist

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Freitag 3. August 2007, 20:24

Hi!

Kann ich irgendwie von einem WinXP Rechner X prüfen ob ein WinXP Rechner Y mit bekannter IP-Adresse gerade gestartet ist bzw. ob er im Netzwerk zur Verfügung steht?

Danke im Vorraus!

MfG
Henne
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Freitag 3. August 2007, 21:11

Anfänger1911 hat geschrieben:Kann ich irgendwie von einem WinXP Rechner X prüfen ob ein WinXP Rechner Y mit bekannter IP-Adresse gerade gestartet ist bzw. ob er im Netzwerk zur Verfügung steht?
Hallo Henne!

Die Einfachste Art ist sicherlich ein PING an den gesuchten Computer. Leider ist die Ausgabe von PING deutsch. Aber wenn du nicht vor hast, dein Programm auch auf anderssprachigen Computern einzusetzen...

Code: Alles auswählen

>>> import subprocess
>>> proc = subprocess.Popen(["ping", "127.0.0.1"], stdout = subprocess.PIPE, shell = True)
>>> print "Antwort von" in proc.stdout.read() and "Computer ist im Netz" or "Computer ist offline"
Computer ist im Netz
>>> # oder so: 
>>> proc = subprocess.Popen(["ping", "127.0.0.1"], stdout = subprocess.PIPE, shell = True)
>>> if "Antwort von" in proc.stdout.read():
...     print "Computer ist im Netz"
... else:
...     print "Computer ist offline"
... 
Computer ist im Netz
>>>
Es gibt noch zwei mir bekannte PING-Implementierungen für Python. Aber die sind nicht so einfach wie das hier.

Wenn du mehr brauchst -- melden.

mfg
Gerold
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Freitag 3. August 2007, 21:30

Ok so hab ich mir das gedacht. Aber ich hab's jetzt doch ein bisschen anders gemacht. Mir ist eingefallen, dass ich sowieso ein File auf dem anderen Rechner habe, das abgefragt werden muss, deshalb habe ich einfach os.path.exists verwendet. Kann man das so machen oder könnte es dabei Problem geben? Soweit ich das beurteilen kann scheint es zu funktionieren. :lol:

Nochwas:
Gibt es eine Möglichkeit das so zu programmieren, dass durchgehend geprüft wird, ob der PC zur Verfügung steht? Mir fiele da jetzt nur time.sleep und eine while-Schleife ein...

MfG
Henne
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Freitag 3. August 2007, 21:32

Ping ist mir auch als Erstes eingefallen als Zweites dann:

man kann auch eiene Socket Verbindung aufbauen oder mit der

Code: Alles auswählen

urllib2.urlopen("http://192.168.1.5")
versuchen eine HTTP Verbindung herzustellen (ist ja im Prinzip das gleiche).

Natürlich führt das zum Fehler wenn kein http Server läuft, aber man
kann zwischen den Fehlern unterscheiden.

Connection Refused = Rechner ist da hat aber keine HTTP Server laufen
kein Fehler = Rechner ist da und hat eine HTTP Server

No route to host = Rechner ist nicht unter der IP verfügbar

**edit**:
@zweite Antwort von Henne:
Kommt drauf an was du machen willst, generell kannst du schon eine while-Schleife und time.sleep() verwenden, wenn dein Programm nichts besseres zutun hat kannst du das so machen. Sonst musst du dich mit Threads beschäftigen, den dein sleep legt dein Programm auf Eis und es führt während dem sleep keine Operationen aus.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Montag 6. August 2007, 13:10

Gerold, das ist unter Linux keine gute Idee, falls du da nicht mittels -c die Anzahl pings angibst läuft der Prozess für immer weiter ;)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Montag 6. August 2007, 14:36

veers hat geschrieben:Gerold, das ist unter Linux keine gute Idee, falls du da nicht mittels -c die Anzahl pings angibst läuft der Prozess für immer weiter ;)
Hallo veers!

Ich verweise auf die ursprüngliche Frage:
Anfänger1911 hat geschrieben:Kann ich irgendwie von einem WinXP Rechner X prüfen ob ein WinXP Rechner Y mit bekannter IP-Adresse gerade gestartet ist bzw. ob er im Netzwerk zur Verfügung steht?
Die Einschränkung auf WinXP war von Anfang an bekannt.

mfg
Gerold
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten