Python

Python-Skript zur Überwachung der Netzwerkverbindung

Python-Skript zur Überwachung der Netzwerkverbindung
Die Notwendigkeit, dass unsere Geräte immer mit dem Internet verbunden sind, wird mehr zu einem Grundbedürfnis als zu einem zusätzlichen Privileg.

Es ist entscheidend, Anwendungen und Geräte zu haben, die Daten protokollieren, senden und an die Außenwelt empfangen müssen. Ein Tool, mit dem Sie überwachen können, wann Ihr Netzwerk ausfällt, kann Ihnen daher bei der Fehlerbehebung im Netzwerk oder dem Stoppen der Anwendungen helfen, bevor Sie eine Reihe von Protokollfehlern senden sending.

Im heutigen Tutorial erstellen wir einen einfachen Netzwerkmonitor, der Ihre Internetverbindung kontinuierlich überwacht, indem er Ping-Anfragen an eine externe Ressource sendet. Das Skript, das wir erstellen werden, protokolliert auch, wann das Internet ausfällt und die Dauer der Ausfallzeit:

Projektanforderungen

Für dieses Projekt benötigen wir nur:

Projektlogik

Bevor wir in den Kodierungsteil eintauchen, lassen Sie uns besprechen und verstehen, was wir erreichen möchten:

Was ist Netzwerk-Up- und Downtime??

Wenn wir von Netzwerk-Up- und Downtime sprechen, meinen wir den Zeitraum, in dem die Netzwerkverbindung vollständig nicht verfügbar ist und wir daher nicht mit Geräten außerhalb unseres Netzwerks kommunizieren können. Je länger das Internet nicht verfügbar ist, desto länger die Ausfallzeit.

So ermitteln Sie Ausfallzeiten

Jetzt, da wir wissen, was Internetausfallzeiten sind, fragen Sie sich vielleicht: „Wie können wir sie bestimmen??”

Ohne unseren Code zu komplizieren, können wir mit Ping gehen. Ein Ping ist eine Methode, bei der wir kontinuierlich einen zuverlässigen Server anpingen – vielleicht Cloudflare oder Google DNS – und dann auf eine Antwort warten.

Wenn wir den Server anpingen und keine Antwort kommt, notieren wir diese bestimmte Zeit und pingen weiter, bis wir einen Ping erhalten und die Zeit notieren.

Mit der Zeitverschiebung können wir feststellen, wann das Internet ausgefallen ist und wie lange.

Wir müssen auch beim Pingen eines einzelnen Servers vorsichtig sein, da wir den Ping fälschlicherweise als DDoS-Angriff verwechseln können, was dazu führen könnte, dass unsere IP-Adresse blockiert wird, was zu negativen Ergebnissen führen würde.

Hier ist ein Flussdiagramm, das dieses Konzept erklärt:

Reden ist billig; Lassen Sie uns nun in den Code eintauchen, der zeigt, wie diese Logik implementiert wird:

Zeig mir jetzt den Code

Wie üblich beginnen wir in Python mit dem Importieren der erforderlichen Bibliotheken. Als nächstes erstellen wir eine Protokolldatei im aktuellen Arbeitsverzeichnis.

Wir verwenden die Socket-Bibliothek, um in der ersten Funktion eine Anfrage an eine externe IP-Adresse zu senden. In diesem Beispiel verwenden wir die öffentliche DNS-Adresse von Cloudflare, die eine sehr hohe Verfügbarkeit hat has. Wir übergeben auch den Port, und da es sich um einen DNS-Server handelt, verwenden wir Port 53.

Wir überprüfen dann, ob wir Zugriff auf das Protokolldateiverzeichnis haben und beenden, wenn wir keinen Zugriff haben.

Der nächste Schritt besteht darin, die Zeit zu berechnen, in der die Netzwerkverbindung unterbrochen ist. Schließlich packen wir die gesamte Funktionalität in eine Schleife, wie im folgenden Code gezeigt.

Steckdose importieren
Importzeit
Datum/Uhrzeit importieren
Importieren von OS
Importsystem
LOG_FNAME = "Netzwerk.Log"
DATEI = os.Pfad.beitreten (os.getcwd(), LOG_FNAME)
def send_ping_request(host="1.1.1.1", Port=53, Timeout=3):
Versuchen:
Steckdose.setdefaulttimeout (Zeitüberschreitung)
s = Buchse.Steckdose (Steckdose).AF_INET, Buchse.SOCK_STREAM)
so.verbinden((host,port))
außer OSError als Fehler:
falsch zurückgeben
sonst:
so.schließen()
true zurückgeben
def write_permission_check():
Versuchen:
mit open(FILE, "a") als Datei:
bestehen
außer OSError als Fehler:
print("Erstellung der Protokolldatei fehlgeschlagen")
sys.Ausfahrt()
schließlich:
bestehen
def berechne_zeit(start, stop):
time_difference = stop - start
Sekunden = float(str(time_difference.total_seconds()))
return str(datetime.Zeitdelta (Sekunden = Sekunden)).Teilt(".")[0]
def mon_net_connection(ping_freq=2):
monitor_start_time = datetime.Terminzeit.jetzt()
motd = "Überwachung der Netzwerkverbindung gestartet um: " + str(monitor_start_time).Teilt(".")[0] + " Senden einer Ping-Anfrage in " + str(ping_freq) + " Sekunden"
drucken (motd)
mit open(FILE, "a") als Datei:
Datei.schreiben("\n")
Datei.schreiben(motd + "\n")
während Wahr:
if send_ping_request():
Zeit.Schlaf(ping_freq)
sonst:
down_time = Datum/Uhrzeit.Terminzeit.jetzt()
fail_msg = "Netzwerkverbindung nicht verfügbar um: " + str(down_time).Teilt(".")[0]
print(fail_msg)
mit open(FILE, "a") als Datei:
Datei.write(fail_msg + "\n")
ich = 0
während nicht send_ping_request():
Zeit.schlafen(1)
ich += 1
wenn ich >= 3600:
ich = 0
jetzt = Datum/Uhrzeit.Terminzeit.jetzt()
continous_message = "Netzwerk-Nichtverfügbarkeit beständig bei: " + str(jetzt).Teilt(".")[0]
print(fortlaufende_Nachricht)
mit open(FILE, "a") als Datei:
Datei.schreiben(kontinuierliche_Nachricht + "\n")
up_time = Datum/Uhrzeit.Terminzeit.jetzt()
uptime_message = "Netzwerkverbindung wiederhergestellt um: " + str(up_time).Teilt(".")[0]
down_time = compute_time (down_time, up_time)
_m = "Netzwerkverbindung war nicht verfügbar für " + down_time
print(uptime_message)
drucken(_m)
mit open(FILE, "a") als Datei:
Datei.write(uptime_message + "\n")
Datei.schreiben(_m + "\n")
mon_net_connection()

Wenn Sie dieses Skript ausführen, erhalten Sie eine Ausgabe ähnlich der unten gezeigten:

Fazit

Mit dem obigen Skript können wir den Verlust der Netzwerkverbindung überwachen und ständig protokollieren, bis sie verfügbar ist. Dieses einfache Skript ist offen für Verbesserungen. Fühlen Sie sich frei, den Code an Ihre Bedürfnisse anzupassen und zu erweitern.

So zeigen Sie OSD-Overlay in Vollbild-Linux-Apps und -Spielen an
Das Spielen von Spielen im Vollbildmodus oder die Verwendung von Apps im ablenkungsfreien Vollbildmodus kann Sie von relevanten Systeminformationen ab...
Top 5 Karten zur Spielaufnahme
Wir alle haben Streaming-Gameplays auf YouTube gesehen und geliebt. PewDiePie, Jakesepticye und Markiplier sind nur einige der Top-Gamer, die Millione...
So entwickeln Sie ein Spiel unter Linux
Vor einem Jahrzehnt hätten nicht viele Linux-Benutzer vorhergesagt, dass ihr Lieblingsbetriebssystem eines Tages eine beliebte Spieleplattform für kom...