Piton

Script Python pentru a monitoriza conexiunea la rețea

Script Python pentru a monitoriza conexiunea la rețea
Nevoia de a avea dispozitivele noastre conectate întotdeauna la internet devine mai mult o nevoie de bază decât un privilegiu adăugat.

Este esențial să aveți aplicații și dispozitive care trebuie să înregistreze, să trimită și să primească date către lumea exterioară. Astfel, dacă aveți un instrument care vă permite să monitorizați când rețeaua se oprește vă poate ajuta să depanați rețeaua sau să opriți aplicațiile înainte de a trimite o grămadă de erori de jurnal.

În tutorialul de astăzi, vom construi un monitor simplu de rețea care vă monitorizează continuu conectivitatea la internet, trimițând cereri de ping către o resursă externă. Scriptul pe care îl vom crea va păstra, de asemenea, jurnale ale momentului în care internetul este oprit și a duratei de nefuncționare:

Cerințe de proiect

Pentru acest proiect, vom avea nevoie doar de:

Logica proiectului

Înainte de a ne arunca cu capul în partea de codare, să discutăm și să înțelegem ce încercăm să realizăm:

Ce este Network Up și Downtime?

Când vorbim despre perioadele de oprire și oprire ale rețelei, ne referim la perioada în care conexiunea la rețea este complet indisponibilă și, prin urmare, nu putem comunica cu dispozitive din afara rețelei noastre. Cu cât internetul nu este disponibil mai mult, cu atât timpul de oprire este mai lung.

Cum să determinați timpii morți

Acum, că știm ce este timpul de nefuncționare a internetului, s-ar putea să vă întrebați „cum mergem pentru a-l determina?”

Fără a ne complica codul, putem merge cu ping. Un ping este o metodă în care facem ping continuu pe un server de încredere - poate Cloudflare sau Google DNS - și apoi așteptăm un răspuns.

Dacă facem ping pe server și nu există niciun răspuns, observăm acel moment specific și continuăm să facem ping până când primim un ping și notăm ora.

Având diferența de timp, putem observa când internetul a funcționat și pentru cât timp.

De asemenea, trebuie să fim atenți atunci când facem ping pe un singur server, deoarece putem avea ping-ul greșit în mod fals ca un atac DDoS, ceea ce ar putea cauza blocarea adresei noastre IP, ceea ce ar produce rezultate negative.

Iată o diagramă care explică acest concept:

Vorbirea este ieftină; să ne scufundăm acum în codul care arată cum să implementăm această logică:

Acum Arată-Mi Codul

Ca de obicei, în Python, începem prin importul bibliotecilor necesare. Apoi, creăm un fișier jurnal în directorul de lucru curent.

Folosim biblioteca socket pentru a trimite o cerere la o adresă IP externă în prima funcție. Pentru acest exemplu, folosim adresa DNS publică Cloudflare, care are un timp de funcționare foarte mare. De asemenea, trecem de port și, deoarece este un server DNS, utilizați portul 53.

Apoi verificăm dacă avem acces la directorul fișierului jurnal și renunțăm dacă nu avem acces.

Următorul pas este calcularea timpului pentru care conexiunea la rețea este oprită. În cele din urmă, înfășurăm întreaga funcționalitate într-o buclă, așa cum se arată în codul de mai jos.

soclu de import
timpul de import
import datetime
import os
import sisteme
LOG_FNAME = "rețea.Buturuga"
FILE = os.cale.join (os.getcwd (), LOG_FNAME)
def send_ping_request (host = "1.1.1.1 ", port = 53, timeout = 3):
încerca:
priză.setdefaulttimeout (timeout)
s = soclu.soclu (soclu.AF_INET, soclu.SOCK_STREAM)
s.conectare ((gazdă, port))
cu excepția OSError ca eroare:
returnează Fals
altceva:
s.închide()
returnează True
def write_permission_check ():
încerca:
cu fișier deschis (FILE, "a"):
trece
cu excepția OSError ca eroare:
print ("Crearea fișierului jurnal nu a reușit")
sys.Ieșire()
in cele din urma:
trece
def calculate_time (start, stop):
time_difference = stop - start
secunde = float (str (time_difference.total_seconds ()))
return str (datetime.timedelta (secunde = secunde)).Despică(".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = datetime.datetime.acum()
motd = "Monitorizarea conexiunii la rețea a început la:" + str (monitor_start_time).Despică(".") [0] +" Trimiterea cererii de ping în "+ str (ping_freq) +" secunde "
print (motd)
cu fișier deschis (FILE, "a"):
fişier.scrie ("\ n")
fişier.scrie (motd + "\ n")
în timp ce este adevărat:
dacă send_ping_request ():
timp.somn (ping_freq)
altceva:
down_time = datetime.datetime.acum()
fail_msg = "Conexiune la rețea indisponibilă la:" + str (timp_inactiv).Despică(".") [0]
print (fail_msg)
cu fișier deschis (FILE, „a”):
fişier.scrie (fail_msg + "\ n")
i = 0
în timp ce nu send_ping_request ():
timp.dormi (1)
i + = 1
dacă i> = 3600:
i = 0
acum = datetime.datetime.acum()
continous_message = "Indisponibilitate rețea persistentă la:" + str (acum).Despică(".") [0]
print (contin__message)
cu fișier deschis (FILE, "a"):
fişier.scrie (continous_message + "\ n")
up_time = datetime.datetime.acum()
uptime_message = "Conectivitate la rețea restaurată la:" + str (up_time).Despică(".") [0]
down_time = calculate_time (down_time, up_time)
_m = "Conexiunea la rețea a fost indisponibilă pentru" + timp de oprire
print (uptime_message)
print (_m)
cu fișier deschis (FILE, "a"):
fişier.scrie (uptime_message + "\ n")
fişier.scrie (_m + "\ n")
mon_net_connection ()

Dacă rulați acest script, veți obține o ieșire similară cu cea prezentată mai jos:

Concluzie

Folosind scriptul de mai sus, putem monitoriza pierderea conexiunii de rețea și o putem înregistra în mod constant până când este disponibilă. Acest script simplu este deschis îmbunătățirilor. Simțiți-vă liber să ajustați codul pentru a se potrivi nevoilor dvs. și să îl extindeți.

Cum se instalează League Of Legends pe Ubuntu 14.04
Dacă ești fan al League of Legends, atunci aceasta este o oportunitate pentru tine de a testa rula League of Legends. Rețineți că LOL este acceptat pe...
Instalați cel mai recent joc de strategie OpenRA pe Ubuntu Linux
OpenRA este un motor de jocuri de strategie în timp real Libre / Free care recreează primele jocuri Westwood, cum ar fi clasicul Command & Conquer: Re...
Instalați cel mai recent Dolphin Emulator pentru Gamecube și Wii pe Linux
Emulatorul Dolphin vă permite să jucați jocurile alese de Gamecube și Wii pe computerele personale Linux (PC). Fiind un emulator de joc liber disponi...