2016-11-22 4 views
1

Ich habe ein Python-Skript, das nur funktioniert, wenn mein Server verfügbar ist. Bevor also das Skript beginnt, möchte ich meinen Server anpingen oder lieber die Verfügbarkeit des Servers überprüfen.Ping-Server in Python ohne Root-Berechtigungen

Es gibt bereits einige verwandte SO-Fragen. Z. B

  1. pyping module

    response = pyping.ping('Your IP') 
    if response.ret_code == 0: 
        print("reachable") 
    else: 
        print("unreachable") 
    
  2. ping process in python

    response = os.system("ping -c 1 " + hostname) 
    

Diese Antworten funktioniert gut, aber nur als Root-Benutzer! Wenn ich verwende diese Lösungen als gemeinsamen Benutzer i die folgende Fehlermeldung erhalten:

ping: Lacking privilege for raw socket. 

Ich brauche eine Lösung, dass ich das als gemeinsamen Benutzer tun kann, weil ich dieses Skript in einem jenkins Job ausgeführt und hat nicht die Option, als root zu laufen.

+0

Muss es ein Ping sein? Was ist mit einem HTTP GET oder einem einfachen UDP-Paket? –

+0

Hmm, ich habe nicht darüber nachgedacht. Das erste, was mir in den Sinn kommt, war das Pingen, also versuche ich es mit Ping zu lösen. Und es ist kurz und einfach. Aber wenn Sie eine andere Lösung haben, können Sie es als Antwort bitte unten schreiben. – Oni1

+3

Warum versuchen Sie die Verfügbarkeit zu überprüfen? Versuchen Sie, eine schnelle Überprüfung durchzuführen, bevor Sie versuchen, einen Dienst zu verwenden, der auf einem bekannten Port ausgeführt wird? Wenn ja, würde ich lieber versuchen, eine Verbindung zu dem Dienst herzustellen, anstatt zuerst zu versuchen, ihn anzupingen, und dann eine Verbindung zu dem "echten" Dienst herzustellen. –

Antwort

2

Möchten Sie versuchen, eine HTTP HEAD-Anfrage auszuführen, vorausgesetzt, der Computer verfügt über einen http-Server, der ausgeführt wird?

from http.client import HTTPConnection # python3 

try: 
    conn = HTTPConnection(host, port, timeout) 
    conn.request("HEAD", "/") 
    conn.close() 

    # server must be up 
except: 
    # server is not up, do other stuff