Python

Python Script za spremljanje omrežne povezave

Python Script za spremljanje omrežne povezave
Potreba, da imajo naše naprave vedno povezane z internetom, postaja vse bolj osnovna potreba kot dodaten privilegij.

Nujno je imeti aplikacije in naprave, ki morajo beležiti, pošiljati in prejemati podatke v zunanji svet. Tako vam lahko orodje, ki omogoča spremljanje, ko se omrežje prekine, pomaga pri odpravljanju težav z omrežjem ali ustavitvi programov, preden pošljete kopico napak v dnevniku.

V današnji vadnici bomo zgradili preprost omrežni monitor, ki nenehno nadzira vašo internetno povezljivost s pošiljanjem zahtev za ping zunanjemu viru. Skript, ki ga bomo ustvarili, bo vseboval tudi dnevnike, ko internet ne deluje in trajanje izpadov:

Projektne zahteve

Za ta projekt bomo potrebovali le:

Projektna logika

Preden se potopimo v del kodiranja, se pogovorimo in razumemo, kaj želimo doseči:

Kaj je omrežje in izpadi?

Ko govorimo o vklopu in izpadu omrežja, mislimo na obdobje, ko je omrežna povezava popolnoma nedostopna, zato ne moremo komunicirati z napravami zunaj našega omrežja. Dlje kot internet ni na voljo, daljši je čas nedelovanja.

Kako določiti čas izpada

Zdaj, ko vemo, kaj je izpad interneta, se morda sprašujete, "kako naj ga določimo?"

Ne da bi zapletli kodo, lahko nadaljujemo s pingom. Ping je metoda, pri kateri neprekinjeno preverjamo zanesljiv strežnik - morda Cloudflare ali Google DNS - in nato čakamo na odgovor.

Če pingamo strežnik in ni odgovora, zabeležimo ta čas in nadaljujemo s pingom, dokler ne prejmemo pinga in si zabeležimo čas.

Ob časovni razliki lahko opazimo, kdaj je internet padel in kako dolgo.

Previdni moramo biti tudi pri pinganju enega strežnika, ker lahko ping napačno zamenjamo kot napad DDoS, zaradi česar se lahko naš IP naslov blokira, kar bi povzročilo negativne rezultate.

Tu je diagram poteka, ki pojasnjuje ta koncept:

Pogovor je poceni; poglobimo se v kodo, ki prikazuje, kako implementirati to logiko:

Zdaj mi pokaži kodo

Kot običajno pri Pythonu začnemo z uvozom zahtevanih knjižnic. Nato v trenutnem delovnem imeniku ustvarimo datoteko dnevnika.

Knjižnico vtičnic uporabljamo za pošiljanje zahteve na zunanji naslov IP v prvi funkciji. Za ta primer uporabljamo javni DNS-naslov Cloudflare, ki ima zelo veliko časa delovanja. Prehodimo tudi vrata in ker gre za strežnik DNS, uporabite vrata 53.

Nato preverimo, ali imamo dostop do imenika dnevniške datoteke, in zapremo, če nimamo dostopa.

Naslednji korak je izračun časa, ko omrežna povezava ne deluje. Na koncu celotno funkcionalnost zavijemo v zanko, kot je prikazano v spodnji kodi.

uvozna vtičnica
čas uvoza
uvozi datum in čas
uvoz os
uvoz sys
LOG_FNAME = "omrežje.dnevnik "
DATOTEKA = os.pot.pridruži se (os.getcwd (), LOG_FNAME)
def send_ping_request (gostitelj = "1.1.1.1 ", vrata = 53, časovna omejitev = 3):
poskusite:
vtičnica.setdefaulttimeout (timeout)
s = vtičnica.vtičnica (vtičnica.AF_INET, vtičnica.SOCK_STREAM)
s.poveži ((gostitelj, vrata))
razen OSError kot napaka:
vrnitev False
sicer:
s.zapri ()
vrni True
def write_permission_check ():
poskusite:
z odprtim (DATOTEKA, "a") kot datoteka:
podajo
razen OSError kot napaka:
print ("Ustvarjanje dnevniške datoteke ni uspelo")
sys.izhod ()
končno:
podajo
def izračuna_čas (začetek, zaustavitev):
time_difference = stop - start
seconds = float (str (časovna razlika.skupno_sekunde ()))
vrni str (datetime.timedelta (sekunde = sekunde)).razdeli (".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = datum in čas.Datum čas.zdaj ()
motd = "Nadzor omrežne povezave se je začel ob:" + str (monitor_start_time).razdeli (".") [0] +" Pošiljanje zahteve za ping v "+ str (ping_freq) +" sekunde "
tisk (motd)
z odprtim (DATOTEKA, "a") kot datoteka:
mapa.piši ("\ n")
mapa.piši (motd + "\ n")
medtem ko je True:
če send_ping_request ():
čas.spanje (ping_freq)
sicer:
dol_čas = datum-čas.Datum čas.zdaj ()
fail_msg = "Omrežna povezava ni na voljo ob:" + str (čas_prekinitve).razdeli (".") [0]
tiskanje (fail_msg)
z odprtim (DATOTEKA, "a") kot datoteka:
mapa.pisanje (fail_msg + "\ n")
i = 0
medtem ko ni send_ping_request ():
čas.spanje (1)
i + = 1
če i> = 3600:
i = 0
zdaj = datum in čas.Datum čas.zdaj ()
continous_message = "Omrežje nedostopno obstojno ob:" + str (zdaj).razdeli (".") [0]
tiskanje (neprekinjeno_sporočilo)
z odprtim (DATOTEKA, "a") kot datoteka:
mapa.pisanje (neprekinjeno_sporočilo + "\ n")
up_time = datum in čas.Datum čas.zdaj ()
uptime_message = "Omrežna povezljivost obnovljena ob:" + str (up_time).razdeli (".") [0]
down_time = izračunaj_čas (time_time, up_time)
_m = "Omrežna povezava ni bila na voljo za" + čas nedelovanja
tiskanje (uptime_message)
natisni (_m)
z odprtim (DATOTEKA, "a") kot datoteka:
mapa.zapis (uptime_message + "\ n")
mapa.piši (_m + "\ n")
mon_net_connection ()

Če zaženete ta skript, boste dobili izhod, podoben spodnjemu:

Zaključek

Z uporabo zgornjega skripta lahko spremljamo, kdaj se omrežna povezava izgubi, in jo nenehno beležimo, dokler ni na voljo. Ta preprost skript je odprt za izboljšave. Kodo lahko prilagodite svojim potrebam in jo razširite.

Odprtokodna vrata komercialnih igralnih sistemov
Brezplačne, odprtokodne in medplatformacijske igre, ki jih lahko uporabite za igranje starih, pa tudi nekaterih dokaj nedavnih naslovov iger. V tem čl...
Najboljše igre ukazne vrstice za Linux
Ukazna vrstica ni le vaš največji zaveznik pri uporabi Linuxa - lahko je tudi vir zabave, saj jo lahko uporabljate za igranje številnih zabavnih iger,...
Najboljše aplikacije za preslikavo gamepadov za Linux
Če želite igre na Linuxu igrati z igralno ploščico namesto s tipičnim sistemom za vnos tipkovnice in miške, je za vas na voljo nekaj uporabnih aplikac...