Seite 2 von 2

Re: Ping IP

Verfasst: Mittwoch 12. Oktober 2011, 14:58
von graphicsH
@/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.ä. ?

Re: Ping IP

Verfasst: Mittwoch 12. Oktober 2011, 15:24
von jens
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/*"...

Re: Ping IP

Verfasst: Mittwoch 12. Oktober 2011, 15:46
von 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?!

Re: Ping IP

Verfasst: Mittwoch 12. Oktober 2011, 22:02
von jens
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?

Re: Ping IP

Verfasst: Donnerstag 13. Oktober 2011, 09:04
von jens
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)

Re: Ping IP

Verfasst: Donnerstag 22. Dezember 2011, 18:39
von Hazzard
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.

Re: Ping IP

Verfasst: Donnerstag 22. Dezember 2011, 19:36
von jens
Wenn du magst, steuer es zu https://github.com/jedie/python-ping bei ;)