Krajta

Skript Python pro monitorování síťového připojení

Skript Python pro monitorování síťového připojení
Potřeba mít naše zařízení vždy připojená k internetu se stává více základní potřebou než přidanou výsadou.

Mít aplikace a zařízení, která potřebují protokolovat, odesílat a přijímat data do vnějšího světa, je zásadní. Mít nástroj, který vám umožní sledovat, kdy vaše síť spadne, vám může pomoci vyřešit problém se sítí nebo zastavit aplikace před odesláním hromady chyb protokolu.

V dnešním tutoriálu sestavíme jednoduchý síťový monitor, který nepřetržitě sleduje vaše připojení k internetu zasíláním požadavků ping na externí zdroj. Skript, který vytvoříme, bude také uchovávat protokoly o výpadku internetu a délce prostoje:

Požadavky na projekt

Pro tento projekt budeme potřebovat pouze:

Logika projektu

Než se ponoříme do kódovací části, proberme a pochopme, čeho se snažíme dosáhnout:

Co je síťový provoz a prostoje?

Když mluvíme o zapnutí a výpadku sítě, máme na mysli období, kdy je síťové připojení zcela nedostupné, a proto nemůžeme komunikovat se zařízeními mimo naši síť. Čím déle není internet k dispozici, tím delší jsou prostoje.

Jak určit prostoje

Nyní, když víme, co to je prostoje internetu, možná vás zajímá: „jak to zjistíme?“

Aniž bychom komplikovali náš kód, můžeme jít s pingem. Ping je metoda, kdy neustále pingujeme spolehlivý server - třeba Cloudflare nebo Google DNS - a pak čekáme na odpověď.

Pokud provedeme ping na server a nebudeme reagovat, všimneme si toho konkrétního času a pokračujeme v pingu, dokud nedostaneme ping a nezaznamenáme čas.

S časovým rozdílem si můžeme povšimnout, kdy byl internet vypnutý a na jak dlouho.

Musíme také být opatrní, když pingujete na jeden server, protože můžeme mít falešně mylný ping jako útok DDoS, což může způsobit zablokování naší IP adresy, což by vedlo k negativním výsledkům.

Tady je vývojový diagram vysvětlující tento koncept:

Mluvení je levné; Pojďme se nyní ponořit do kódu, který ukazuje, jak implementovat tuto logiku:

Nyní mi ukažte kód

Jako obvykle v Pythonu začneme importem požadovaných knihoven. Dále vytvoříme soubor protokolu v aktuálním pracovním adresáři.

Knihovnu soketů používáme k odeslání požadavku na externí IP adresu v první funkci. V tomto příkladu používáme veřejnou adresu DNS Cloudflare, která má velmi vysokou dobu provozuschopnosti. Také předáme port a protože se jedná o server DNS, použijte port 53.

Poté ověříme, že máme přístup k adresáři souborů protokolu, a pokud nemáme přístup, ukončíme ho.

Dalším krokem je výpočet doby, kdy je připojení k síti nefunkční. Nakonec zabalíme celou funkčnost do smyčky, jak je znázorněno v níže uvedeném kódu.

importovat zásuvku
čas importu
import datetime
import os
import sys
LOG_FNAME = "síť.přihlásit "
SOUBOR = os.cesta.připojit (os.getcwd (), LOG_FNAME)
def send_ping_request (hostitel = "1.1.1.1 ", port = 53, časový limit = 3):
Snaž se:
zásuvka.setdefaulttimeout (timeout)
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_STREAM)
s.připojit ((hostitel, port))
kromě OSError jako chyba:
vrátit False
jiný:
s.zavřít()
vrátit True
def write_permission_check ():
Snaž se:
s otevřeným (SOUBOR, "a") jako soubor:
složit
kromě OSError jako chyba:
tisk ("Vytvoření souboru protokolu se nezdařilo")
sys.výstup()
Konečně:
složit
def count_time (start, stop):
time_difference = stop - start
seconds = float (str (time_difference.).total_seconds ()))
návrat str (datetime.timedelta (sekundy = sekundy)).rozdělit(".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = datetime.čas schůzky.Nyní()
motd = "Monitorování síťového připojení začalo v:" + str (monitor_start_time).rozdělit(".") [0] +" Odesílání požadavku na ping za "+ str (ping_freq) +" sekundy "
tisk (motd)
s otevřeným (SOUBOR, "a") jako soubor:
soubor.write ("\ n")
soubor.write (motd + "\ n")
zatímco je pravda:
pokud send_ping_request ():
čas.spánek (ping_freq)
jiný:
down_time = datetime.čas schůzky.Nyní()
fail_msg = "Síťové připojení není k dispozici na:" + str (mimo provoz).rozdělit(".") [0]
print (fail_msg)
s otevřeným (SOUBOR, "a") jako soubor:
soubor.write (fail_msg + "\ n")
i = 0
zatímco není send_ping_request ():
čas.spánek (1)
i + = 1
pokud i> = 3600:
i = 0
nyní = datetime.čas schůzky.Nyní()
continous_message = "Network Unavailabilty Persistent at:" + str (nyní).rozdělit(".") [0]
print (continous_message)
s otevřeným (SOUBOR, "a") jako soubor:
soubor.write (continous_message + "\ n")
up_time = datetime.čas schůzky.Nyní()
uptime_message = "Síťové připojení obnoveno na:" + str (up_time).rozdělit(".") [0]
down_time = vypočítat_čas (down_time, up_time)
_m = "Síťové připojení nebylo k dispozici po dobu" + down_time
tisk (uptime_message)
tisk (_m)
s otevřeným (SOUBOR, "a") jako soubor:
soubor.zápis (uptime_message + "\ n")
soubor.write (_m + "\ n")
mon_net_connection ()

Pokud spustíte tento skript, získáte výstup podobný tomu, který je uveden níže:

Závěr

Pomocí výše uvedeného skriptu můžeme monitorovat ztrátu síťového připojení a neustále jej protokolovat, dokud nebude k dispozici. Tento jednoduchý skript je otevřený vylepšením. Nebojte se upravit kód podle svých potřeb a rozšířit ho.

Přidejte gesta myši do Windows 10 pomocí těchto bezplatných nástrojů
V posledních letech se počítače a operační systémy značně vyvinuly. Bývaly doby, kdy uživatelé museli procházet správci souborů pomocí příkazů. Stejně...
Ovládejte a spravujte pohyb myši mezi více monitory ve Windows 10
Správce myší se dvěma displeji umožňuje ovládat a konfigurovat pohyb myši mezi více monitory zpomalením jeho pohybů poblíž hranice. Windows 10/8 vám u...
WinMouse vám umožňuje přizpůsobit a vylepšit pohyb ukazatele myši na PC s Windows
Chcete-li vylepšit výchozí funkce ukazatele myši, použijte freeware WinMouse. Přidává další funkce, které vám pomohou vytěžit ze své skromné ​​myši ma...