Python

Python Script til overvågning af netværksforbindelse

Python Script til overvågning af netværksforbindelse
Behovet for altid at have vores enheder tilsluttet internettet bliver mere af et grundlæggende behov end et ekstra privilegium.

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:

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.

importstik
importtid
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.

Mus Sådan vender du musens og touchpadsens rulle retning i Windows 10
Sådan vender du musens og touchpadsens rulle retning i Windows 10
Mus og Touchpads gør ikke kun computing let, men mere effektiv og mindre tidskrævende. Vi kan ikke forestille os et liv uden disse enheder, men det er...
Mus Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Musemarkøren og markøren i Windows 10 er meget vigtige aspekter af operativsystemet. Dette kan også siges om andre operativsystemer, så i sandhed er d...
Gratis og open source-spilmotorer til udvikling af Linux-spil
Denne artikel dækker en liste over gratis og open source-spilmotorer, der kan bruges til at udvikle 2D- og 3D-spil på Linux. Der er mange sådanne spil...