Piton

Python skripta za nadgledanje mrežne veze

Python skripta za nadgledanje mrežne veze
Potreba da naši uređaji budu uvijek povezani s internetom postaje sve više osnovna potreba nego dodatna privilegija.

Imati programe i uređaje koji trebaju prijaviti, slati i primati podatke u vanjski svijet je presudno. Dakle, posjedovanje alata koji vam omogućuje nadgledanje pada mreže može vam pomoći u rješavanju problema mreže ili zaustavljanju aplikacija prije slanja gomile pogrešaka u zapisniku.

U današnjem uputstvu izradit ćemo jednostavan mrežni monitor koji neprestano nadgleda vašu internetsku povezanost slanjem zahtjeva za ping vanjskom resursu. Skripta koju ćemo stvoriti također će voditi zapisnike kada Internet ne radi i trajanje zastoja:

Zahtjevi projekta

Za ovaj projekt trebat će nam samo:

Logika projekta

Prije nego što uđemo u dio kodiranja, razgovarajmo i shvatimo što pokušavamo postići:

Što je mrežni rad i zastoji?

Kada govorimo o prestanku i radu mreže, mislimo na razdoblje u kojem je mrežna veza u potpunosti nedostupna, pa stoga ne možemo komunicirati s uređajima izvan naše mreže. Što je internet duže nedostupan, to je duži zastoj.

Kako odrediti zastoje

Sad kad znamo što je zastoj na Internetu, možda se pitate: „kako da ga odredimo?"

Bez kompliciranja koda, možemo ići s pingom. Ping je metoda kod koje neprestano pingamo pouzdani poslužitelj - možda Cloudflare ili Google DNS - i zatim čekamo odgovor.

Ako pingamo poslužitelj i nema odgovora, bilježimo to određeno vrijeme i nastavljamo pingati dok ne primimo ping i zabilježimo vrijeme.

Imajući vremensku razliku, možemo primijetiti kada je Internet bio kratak i koliko dugo.

Također moramo biti oprezni kada pingamo jedan server, jer ping možemo pogrešno pogrešno shvatiti kao DDoS napad, što bi moglo dovesti do blokiranja naše IP adrese, što bi rezultiralo negativnim rezultatima.

Evo dijagrama toka koji objašnjava ovaj koncept:

Razgovor je jeftin; zaronimo sada u kod koji pokazuje kako implementirati ovu logiku:

Pokaži mi sada kod

Kao i obično, u Pythonu započinjemo uvozom potrebnih knjižnica. Dalje, kreiramo datoteku dnevnika u trenutnom radnom direktoriju.

Knjižnicu utičnica koristimo za slanje zahtjeva na vanjsku IP adresu u prvoj funkciji. Za ovaj primjer koristimo Cloudflare javnu DNS adresu koja ima jako puno vremena rada. Također prolazimo kroz priključak, a budući da je DNS poslužitelj, koristite port 53.

Zatim provjeravamo imamo li pristup direktoriju datoteke dnevnika i izlazimo ako nemamo pristup.

Sljedeći je korak izračunati vrijeme prekida mrežne veze. Na kraju cjelokupnu funkcionalnost umotavamo u petlju, kao što je prikazano u donjem kodu.

utičnica za uvoz
vrijeme uvoza
uvoz datum i vrijeme
uvoz os
import sys
LOG_FNAME = "mreža.zapisnik "
DATOTEKA = os.staza.pridružiti se (os.getcwd (), LOG_FNAME)
def send_ping_request (host = "1.1.1.1 ", priključak = 53, vremensko ograničenje = 3):
probati:
utičnica.setdefault timeout (timeout)
s = utičnica.utičnica (utičnica.AF_INET, utičnica.SOCK_STREAM)
s.povezivanje ((host, port))
osim OSError kao pogreške:
povratak False
drugo:
s.Zatvoriti()
povratak True
def write_permission_check ():
probati:
s otvorenom (FILE, "a") kao datotekom:
proći
osim OSError kao pogreške:
ispis ("Izrada datoteke dnevnika nije uspjela")
sys.Izlaz()
konačno:
proći
def izračuna_vrijeme (start, zaustavljanje):
razlika u vremenu = stop - start
seconds = float (str (vremenska razlika.ukupno_sekundi ()))
return str (datum i vrijeme.timedelta (sekunde = sekunde)).podjela(".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = datum i vrijeme.Datum vrijeme.sada()
motd = "Nadzor mrežne veze započet u:" + str (monitor_start_time).podjela(".") [0] +" Slanje zahtjeva za ping za "+ str (ping_freq) +" sekunde "
ispis (motd)
s otvorenom (FILE, "a") kao datotekom:
datoteka.napiši ("\ n")
datoteka.napiši (motd + "\ n")
dok je Istina:
ako send_ping_request ():
vrijeme.spavanje (ping_freq)
drugo:
down_time = datum i vrijeme.Datum vrijeme.sada()
fail_msg = "Mrežna veza nedostupna u:" + str (vrijeme_donja).podjela(".") [0]
ispis (fail_msg)
s otvorenom (FILE, "a") kao datotekom:
datoteka.zapis (neuspjeli_msg + "\ n")
i = 0
a ne send_ping_request ():
vrijeme.spavanje (1)
i + = 1
ako i> = 3600:
i = 0
sada = datum i vrijeme.Datum vrijeme.sada()
continous_message = "Mrežna nedostupnost postojana na:" + str (sada).podjela(".") [0]
ispis (kontinuirana_poruka)
s otvorenom (FILE, "a") kao datotekom:
datoteka.pisanje (kontinuirana_poruka + "\ n")
up_time = datum i vrijeme.Datum vrijeme.sada()
uptime_message = "Mrežna povezanost vraćena u:" + str (up_time).podjela(".") [0]
vrijeme odmora = izračunati vrijeme (vrijeme odmora, vrijeme_gore)
_m = "Mrežna veza nije bila dostupna za" + vrijeme odmora
ispis (uptime_message)
ispis (_m)
s otvorenom (FILE, "a") kao datotekom:
datoteka.napišite (uptime_message + "\ n")
datoteka.napiši (_m + "\ n")
mon_net_connection ()

Ako pokrenete ovu skriptu, dobit ćete izlaz sličan onome prikazanom u nastavku:

Zaključak

Pomoću gornje skripte možemo nadzirati gubitak mrežne veze i neprestano je bilježiti dok ne postane dostupna. Ova jednostavna skripta otvorena je za poboljšanja. Slobodno prilagodite kod prema vašim potrebama i proširite ga.

Lijevi gumb miša ne radi u sustavu Windows 10
Ako s prijenosnim računalom ili stolnim računalom koristite namjenski miš, ali lijevi gumb miša ne radi u sustavu Windows 10/8/7 iz nekog razloga evo ...
Pokazivač skače ili se slučajno pomiče dok tipkate u sustavu Windows 10
Ako ustanovite da kursor miša sam skače ili se pomiče automatski, nasumično dok tipkate u Windows prijenosnom računalu ili računalu, neki od ovih prij...
Kako obrnuti smjer pomicanja miša i dodirnih pločica u sustavu Windows 10
Miš i Dodirna pločaRačunarstvo ne samo da olakšava, već i učinkovitije i oduzima puno vremena. Ne možemo zamisliti život bez ovih uređaja, ali činjeni...