Python

Skript Python na monitorovanie sieťového pripojenia

Skript Python na monitorovanie sieťového pripojenia
Potreba mať naše zariadenia vždy pripojené k internetu sa stáva čoraz viac základnou potrebou ako pridanou výsadou.

Mať aplikácie a zariadenia, ktoré potrebujú na zaznamenávanie, odosielanie a prijímanie údajov do vonkajšieho sveta, je kritické. Nástroj, ktorý vám umožní monitorovať výpadok siete, vám môže pomôcť pri riešení problémov so sieťou alebo pri zastavovaní aplikácií pred odoslaním množstva chýb protokolu.

V dnešnom výučbe zostavíme jednoduchý sieťový monitor, ktorý nepretržite monitoruje vaše pripojenie k internetu odosielaním požiadaviek ping na externý zdroj. Skript, ktorý vytvoríme, tiež uchová protokoly o výpadku internetu a dĺžke výpadku:

Požiadavky na projekt

Pre tento projekt budeme potrebovať iba:

Logika projektu

Predtým, ako sa ponoríme do kódovacej časti, poďme diskutovať a pochopiť, čo sa snažíme dosiahnuť:

Čo je to Network Up and Downtime?

Keď hovoríme o výpadku siete, máme na mysli obdobie, keď je sieťové pripojenie úplne nedostupné, a teda nemôžeme komunikovať so zariadeniami mimo našej siete. Čím dlhšie je internet nedostupný, tým dlhšie sú výpadky.

Ako určiť výpadok

Teraz, keď vieme, čo je to výpadok internetu, možno sa pýtate: „Ako to určíme?“

Bez toho, aby sme komplikovali náš kód, môžeme ísť s príkazom ping. Ping je metóda, pri ktorej neustále testujeme spoľahlivý server - napríklad Cloudflare alebo Google DNS - a potom čakáme na odpoveď.

Ak odošleme príkaz ping na server a nebudeme reagovať, zaznamenáme konkrétny čas a budeme pokračovať v zadávaní príkazov ping, kým nedostaneme príkaz ping a nezaznamenáme čas.

Z časového rozdielu si môžeme všimnúť, kedy a ako dlho vypadol internet.

Rovnako musíme byť opatrní, keď pingujete na jeden server, pretože môžeme ping mylne mylne považovať za útok DDoS, čo môže spôsobiť zablokovanie našej adresy IP, čo by malo nepriaznivé výsledky.

Tu je vývojový diagram vysvetľujúci tento koncept:

Hovor je lacný; Poďme sa teraz ponoriť do kódu, ktorý ukazuje, ako implementovať túto logiku:

Teraz mi ukážte kód

Ako obvykle, v Pythone začíname importom požadovaných knižníc. Ďalej vytvoríme súbor protokolu v aktuálnom pracovnom adresári.

Knižnicu soketov používame na odoslanie žiadosti na externú adresu IP v prvej funkcii. V tomto príklade používame verejnú adresu DNS Cloudflare, ktorá má veľmi vysokú dobu prevádzkyschopnosti. Taktiež odovzdáme port a keďže je to server DNS, použite port 53.

Potom overíme, že máme prístup do adresára súborov denníka, a ak prístup nemáme, ukončíme ho.

Ďalším krokom je výpočet času, kedy je sieťové pripojenie prerušené. Nakoniec zabalíme celú funkcionalitu do slučky, ako je znázornené v kóde nižšie.

dovozná zásuvka
čas importu
importovať čas a čas
import os
import sys
LOG_FNAME = "sieť.prihlásiť sa "
SÚBOR = os.cesta.pripojiť sa (os.getcwd (), LOG_FNAME)
def send_ping_request (host = "1.1.1.1 ", port = 53, časový limit = 3):
skúste:
zásuvka.setdefaulttimeout (timeout)
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_STREAM)
s.pripojiť ((hostiteľ, port))
okrem chyby OSError ako chyby:
návrat False
inak:
s.Zavrieť()
návrat Pravda
def write_permission_check ():
skúste:
s otvoreným (SÚBOR, "a") ako súbor:
prejsť
okrem chyby OSError ako chyby:
tlač ("Vytvorenie súboru denníka zlyhalo")
sys.východ()
nakoniec:
prejsť
def count_time (štart, stop):
time_difference = stop - štart
seconds = float (str (time_difference.).total_seconds ()))
návrat str (datetime.timedelta (sekundy = sekundy)).rozdeliť („.") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = dátum a čas.Dátum Čas.teraz ()
motd = "Monitorovanie sieťového pripojenia sa začalo o:" + str (monitor_start_time).rozdeliť („.") [0] +" Odosielanie žiadosti o príkaz ping za "+ str (ping_freq) +" sekundy "
tlač (motd)
s otvoreným (SÚBOR, "a") ako súbor:
spis.write ("\ n")
spis.napísať (motd + "\ n")
zatiaľ čo je pravda:
if send_ping_request ():
čas.spánok (ping_freq)
inak:
down_time = dátum a čas.Dátum Čas.teraz ()
fail_msg = "Sieťové pripojenie nie je k dispozícii o:" + str (mimo prevádzky).rozdeliť („.") [0]
print (fail_msg)
s otvoreným (SÚBOR, "a") ako súbor:
spis.zápis (fail_msg + "\ n")
i = 0
zatiaľ čo nie send_ping_request ():
čas.spánok (1)
i + = 1
ak i> = 3600:
i = 0
teraz = dátum a čas.Dátum Čas.teraz ()
continous_message = "Sieť nie je k dispozícii Trvá na:" + str (teraz).rozdeliť („.") [0]
print (continous_message)
s otvoreným (SÚBOR, "a") ako súbor:
spis.write (continous_message + "\ n")
up_time = dátum a čas.Dátum Čas.teraz ()
uptime_message = "Sieťové pripojenie obnovené o:" + str (up_time).rozdeliť („.") [0]
down_time = vypočítať čas (down_time, up_time)
_m = "Sieťové pripojenie bolo nedostupné" + mimo prevádzky
tlač (uptime_message)
tlač (_m)
s otvoreným (SÚBOR, "a") ako súbor:
spis.zápis (uptime_message + "\ n")
spis.write (_m + "\ n")
mon_net_connection ()

Ak spustíte tento skript, dostanete výstup podobný tomu, ktorý je zobrazený nižšie:

Záver

Pomocou vyššie uvedeného skriptu môžeme monitorovať stratu sieťového pripojenia a neustále ho protokolovať, kým nebude k dispozícii. Tento jednoduchý skript je otvorený vylepšeniam. Pokojne upravte kód tak, aby vyhovoval vašim potrebám, a rozšírte ho.

Hry Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Hranie hier na celú obrazovku alebo používanie aplikácií v režime rozptýlenia zadarmo na celú obrazovku vás môže odrezať od relevantných systémových i...
Hry Top 5 kariet na zachytávanie hier
Top 5 kariet na zachytávanie hier
Všetci sme videli a milovali streamovanie hier na YouTube. PewDiePie, Jakesepticye a Markiplier sú iba niektorí z najlepších hráčov, ktorí zarobili mi...
Hry Ako vyvíjať hru v systéme Linux
Ako vyvíjať hru v systéme Linux
Pred desiatimi rokmi by len málo používateľov Linuxu predpovedalo, že ich obľúbený operačný systém bude jedného dňa populárnou hernou platformou pre k...