At have applikationer og enheder, der skal logge, sende og modtage data til omverdenen, er afgørende. At have et værktøj, der giver dig mulighed for at overvåge, hvornår dit netværk går ned, kan således hjælpe dig med at foretage fejlfinding på netværket eller stoppe applikationerne, før du sender en masse logfejl.
I dagens vejledning bygger vi en simpel netværksmonitor, der konstant overvåger din internetforbindelse ved at sende pinganmodninger til en ekstern ressource. Det script, vi opretter, skal også føre logfiler over, når Internettet er nede, og varigheden af nedetid:
Projektkrav
Til dette projekt har vi kun brug for:
- Grundlæggende om Python-programmering
- Grundlæggende forståelse af computernetværk.
- Vær behagelig ved hjælp af terminalen.
Projektlogik
Før vi dykker ned i kodningsdelen, lad os diskutere og forstå, hvad vi forsøger at opnå:
Hvad er netværk op og nedetid?
Når vi taler om netværk op og nedetid, mener vi den periode, hvor netværksforbindelsen er helt utilgængelig, og derfor kan vi ikke kommunikere med enheder uden for vores netværk. Jo længere internettet er utilgængeligt, jo længere nedetid.
Sådan bestemmes nedetid
Nu hvor vi ved, hvad nedetid på internettet er, undrer du dig måske, ”hvordan går vi frem for at bestemme det?”
Uden at komplicere vores kode kan vi gå med ping. En ping er en metode, hvor vi kontinuerligt pinger en pålidelig server - måske Cloudflare eller Google DNS - og derefter venter på et svar.
Hvis vi pinger på serveren, og der ikke er noget svar, bemærker vi det specifikke tidspunkt og fortsætter med at pinge, indtil vi modtager et ping og noterer tiden.
Når vi har tidsforskellen, kan vi bemærke, hvornår internettet var nede, og hvor længe.
Vi skal også være forsigtige, når vi pinger til en enkelt server, fordi vi kan få pingen fejlagtigt forvekslet med et DDoS-angreb, hvilket kan få vores IP-adresse til at blive blokeret, hvilket ville give negative resultater.
Her er et rutediagram, der forklarer dette koncept:
Tal er billig; lad os nu dykke ned i koden, der viser, hvordan denne logik implementeres:
Vis mig nu koden
Som sædvanligt starter vi i Python med at importere de krævede biblioteker. Dernæst opretter vi en logfil i den aktuelle arbejdsmappe.
Vi bruger socketbiblioteket til at sende en anmodning til en ekstern IP-adresse i den første funktion. I dette eksempel bruger vi Cloudflare offentlig DNS-adresse, som har en meget høj oppetid. Vi passerer også porten, og da det er en DNS-server, skal du bruge port 53.
Vi bekræfter derefter, at vi har adgang til logfilmappen og afslutter, hvis vi ikke har adgang.
Det næste trin er at beregne den tid, netværksforbindelsen er nede. Endelig pakker vi hele funktionaliteten i en løkke, som vist i koden nedenfor.
importstikimporttid
importer datatid
importer os
importer sys
LOG_FNAME = "netværk.log "
FIL = os.sti.slutte sig til (os.getcwd (), LOG_FNAME)
def send_ping_request (host = "1.1.1.1 ", port = 53, timeout = 3):
prøve:
stikkontakt.setdefaulttimeout (timeout)
s = stikkontakt.stikkontakt (stikkontakt.AF_INET, stikkontakt.SOCK_STREAM)
s.tilslut ((vært, port))
undtagen OSError som fejl:
returner Falsk
andet:
s.tæt()
returner sandt
def write_permission_check ():
prøve:
med åben (FIL, "a") som fil:
passere
undtagen OSError som fejl:
udskriv ("Oprettelse af logfil mislykkedes")
sys.Afslut()
langt om længe:
passere
def beregne tid (start, stop):
time_difference = stop - start
sekunder = float (str (tidsforskel.total_sekunder ()))
return str (datetime.timedelta (sekunder = sekunder)).dele(".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = datetid.dato tid.nu()
motd = "Overvågning af netværksforbindelse startet ved:" + str (monitor_start_time).dele(".") [0] +" Afsendelse af ping-anmodning om "+ str (ping_freq) +" sekunder "
print (motd)
med åben (FIL, "a") som fil:
fil.skriv ("\ n")
fil.skriv (motd + "\ n")
mens det er sandt:
hvis send_ping_request ():
tid.søvn (ping_freq)
andet:
nedetid = datetid.dato tid.nu()
fail_msg = "Netværksforbindelse utilgængelig ved:" + str (nedetid).dele(".") [0]
udskrive (fail_msg)
med åben (FIL, "a") som fil:
fil.skriv (fail_msg + "\ n")
i = 0
mens ikke send_ping_request ():
tid.sove (1)
i + = 1
hvis jeg> = 3600:
i = 0
nu = datetime.dato tid.nu()
continous_message = "Netværk utilgængelig vedvarende ved:" + str (nu).dele(".") [0]
udskriv (kontinuerlig_meddelelse)
med åben (FIL, "a") som fil:
fil.skriv (kontinuerlig besked + "\ n")
up_time = datetime.dato tid.nu()
uptime_message = "Netværksforbindelse gendannet ved:" + str (up_time).dele(".") [0]
nedetid = beregne tid (nedetid, oppetid)
_m = "Netværksforbindelse var utilgængelig for" + nedetid
udskriv (uptime_message)
print (_m)
med åben (FIL, "a") som fil:
fil.skriv (uptime_message + "\ n")
fil.skriv (_m + "\ n")
mon_net_connection ()
Hvis du kører dette script, får du en output svarende til den vist nedenfor:
Konklusion
Ved hjælp af ovenstående script kan vi overvåge, hvornår netværksforbindelsen går tabt og konstant logge den, indtil den er tilgængelig. Dette enkle script er åbent for forbedringer. Du er velkommen til at justere koden, så den passer til dine behov, og udvid den.