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:
- Osnove programiranja Python
- Osnovno razumevanje računalniških omrežij.
- Udobno uporabljajte terminal.
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.