Ping IP

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
graphicsH
User
Beiträge: 84
Registriert: Donnerstag 8. September 2011, 10:21

@/me
/me hat geschrieben:Aufgrund deiner Anfrage mussten wir eigentlich nicht davon ausgehen, dass dir die Existenz von ping unter Windows unbekannt war.
pingen mit cmd ist mir nicht unbekannt,nur wie gesagt:ich kann nicht gedanken lesen
und wusste daher nicht das du dieses Ping-Programm meinst.


Auf jeden Fall habe ich eine Lösung gefunden:

Code: Alles auswählen

def pingServer(ip):
    import os
    if os.system('ping ' + ip) == 0:
        print '%s ist online' % (ip)
    else:
        print '%s ist offline' % (ip)
Es funktioniert auch weitgehend,meldet jedoch bei ca. 3 von 10 IPs "Zeitüberschreitung der Anforderung"
Woran liegt es? Fehler im Programm oder geschützte IP o.ä. ?
-
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

lunar hat geschrieben:@jens: Nicht direkt zum Thema, aber meinst Du wirklich, dass die Eclipse-Konfiguration in das Repo gehört?
Also ich finde das angenehm. So kann man es schneller in Eclipse/Aptana einbinden. Ist auch nur die ".project" und nicht die ".pydevproject" oder ".settings/*"...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@jens: Wenn man denn Eclipse nutzt… Eclipse ist aber nur ein Werkzeug unter vielen, und unter Python-Programmierern nicht einmal sonderlich verbreitet. Editor-Konfiguration gehört eigentlich nicht ins Repo.

@graphicsH: Mein Gott, welches "ping"-Programm sollte den sonst gemeint sein?!
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab python-ping ein wenig refactored. Nun ist es eine Klasse, mit der man die Ausgaben flexibler gestalten kann. Außerdem habe ich einige Variablen Namen umbenannt und generell aufgeräumt:

Die Ausgabe sieht z.Z. so aus:

Code: Alles auswählen

~/python-ping$ sudo ./ping.py google.com

PYTHON-PING google.com (209.85.148.99): 55 data bytes
64 bytes from google.com (209.85.148.99): icmp_seq=0 ttl=54 time=56.2 ms
64 bytes from google.com (209.85.148.99): icmp_seq=1 ttl=54 time=55.7 ms
64 bytes from google.com (209.85.148.99): icmp_seq=2 ttl=54 time=55.5 ms

----google.com PYTHON PING Statistics----
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip (ms)  min/avg/max = 55.468/55.795/56.232
Ich hab da aber noch ein paar Fragen:

1. sollte man bei current_socket.sendto(packet, (self.destination, 1)) eine IP Adresse angeben (die ich eh am Anfang mit self.dest_ip = socket.gethostbyname(self.destination) ermittle) oder ist das egal wenn dort der domain Name angegeben wird? bzw. macht es einen Unterschied?

2. Nachdem ein ping zurück erhalten wurde, gibt es mehrere Wege die IP Addresse vom sender zu ermitteln:
Mit packet_data, address = current_socket.recvfrom(ICMP_MAX_RECV) hab ich die Addresse.
In den IP Headern aus packet_data steckt die Adresse ebenfalls drin. Sind beiden automatisch die gleichen?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ach... Als Alternative, um ohne root-Rechte aus zu kommen, könnte man auch einfach einen Port des Servers prüfen, z.B.:

Code: Alles auswählen

import socket

def test_port(host, port, timeout=2):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(timeout)
        sock.connect((host, port))
        sock.shutdown(socket.SHUT_RDWR)
    except socket.timeout:
        return False
    else:
        sock.close()
        return True

print test_port("google.com", 80)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Hazzard
User
Beiträge: 26
Registriert: Dienstag 4. Dezember 2007, 21:09

Unter Windows kann man auch IcmpSendEcho bzw. die MS ICMP API verwenden. Das braucht keine Admin Rechte, ping.exe verwendet die auch. Sollte man ja mit pyWin32 verwenden können.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wenn du magst, steuer es zu https://github.com/jedie/python-ping bei ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten