Pytonorm

Python Script för att övervaka nätverksanslutning

Python Script för att övervaka nätverksanslutning
Behovet av att våra enheter alltid är anslutna till internet blir mer av ett grundläggande behov än ett extra privilegium.

Att ha applikationer och enheter som behöver logga, skicka och ta emot data till omvärlden är avgörande. Att ha ett verktyg som låter dig övervaka när ditt nätverk går ner kan hjälpa dig att felsöka nätverket eller stoppa applikationerna innan du skickar en massa loggfel.

I dagens handledning bygger vi en enkel nätverksmonitor som kontinuerligt övervakar din internetanslutning genom att skicka pingförfrågningar till en extern resurs. Skriptet vi ska skapa ska också hålla loggar över när internet är nere och varaktigheten av stilleståndstiden:

Projektkrav

För detta projekt behöver vi bara:

Projektlogik

Innan vi dyker in i kodningsdelen, låt oss diskutera och förstå vad vi försöker uppnå:

Vad är Network Up and Downtime?

När vi pratar om nätverksupp- och stillestånd menar vi den period där nätverksanslutningen är helt otillgänglig, och därmed kan vi inte kommunicera med enheter utanför vårt nätverk. Ju längre internet inte är tillgängligt, desto längre är stilleståndstiden.

Hur man bestämmer stilleståndstid

Nu när vi vet vad internetstopp är kanske du undrar, "hur ska vi bestämma det?”

Utan att komplicera vår kod kan vi gå med ping. En ping är en metod där vi kontinuerligt pingar en pålitlig server - kanske Cloudflare eller Google DNS - och sedan väntar på svar.

Om vi ​​pingar på servern och det inte finns något svar, noterar vi den specifika tiden och fortsätter att pinga tills vi får ett ping och noterar tiden.

Med tidsskillnaden kan vi notera när internet var nere och hur länge.

Vi måste också vara försiktiga när vi pingar en enda server eftersom vi kan få pingen felaktigt felaktiga som en DDoS-attack, vilket kan få vår IP-adress att blockeras, vilket skulle ge negativa resultat.

Här är ett flödesschema som förklarar detta koncept:

Prat är billigt; låt oss nu dyka in i koden som visar hur denna logik implementeras:

Visa mig nu koden

Som vanligt börjar vi i Python med att importera de bibliotek som krävs. Därefter skapar vi en loggfil i den aktuella arbetskatalogen.

Vi använder sockelbiblioteket för att skicka en begäran till en extern IP-adress i den första funktionen. I det här exemplet använder vi Cloudflare offentliga DNS-adress, som har en mycket hög drifttid. Vi passerar också porten, och eftersom det är en DNS-server, använd port 53.

Vi kontrollerar sedan att vi har tillgång till loggfilkatalogen och avslutar om vi inte har tillgång.

Nästa steg är att beräkna tiden för nätverksanslutningen. Slutligen slår vi in ​​hela funktionaliteten i en slinga, som visas i koden nedan.

importuttag
importtid
importera datatid
importera os
importera sys
LOG_FNAME = "nätverk.logga"
FIL = os.väg.gå med (os.getcwd (), LOG_FNAME)
def send_ping_request (host = "1.1.1.1 ", port = 53, timeout = 3):
Prova:
uttag.setdefaulttimeout (timeout)
s = uttag.uttag (uttag.AF_INET, uttag.SOCK_STREAM)
s.anslut ((värd, port))
utom OSError som fel:
återvänd Falskt
annan:
s.stänga()
återvänd True
def write_permission_check ():
Prova:
med öppen (FIL, "a") som fil:
passera
utom OSError som fel:
skriv ut ("Loggfilen kunde inte skapas")
sys.utgång()
till sist:
passera
def calc__time (start, stop):
time_difference = stopp - start
sekunder = float (str (tidsdifferens.total_sekunder ()))
returnera str (datetime.timedelta (sekunder = sekunder)).dela(".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = datetime.datum Tid.nu()
motd = "Nätverksanslutningsövervakning startade vid:" + str (monitor_start_time).dela(".") [0] +" Skickar pingförfrågan om "+ str (ping_freq) +" sekunder "
skriva ut (motd)
med öppen (FIL, "a") som fil:
fil.skriv ("\ n")
fil.skriv (motd + "\ n")
medan det är sant:
om send_ping_request ():
tid.sömn (ping_freq)
annan:
nedtid = datetid.datum Tid.nu()
fail_msg = "Nätverksanslutning ej tillgänglig vid:" + str (stilleståndstid).dela(".") [0]
skriva ut (fail_msg)
med öppen (FIL, "a") som fil:
fil.skriv (fail_msg + "\ n")
i = 0
medan inte send_ping_request ():
tid.sova (1)
i + = 1
om jag> = 3600:
i = 0
nu = datetime.datum Tid.nu()
continous_message = "Nätverkets otillgänglighet ihållande vid:" + str (nu).dela(".") [0]
skriva ut (kontinuerlig_meddelande)
med öppen (FIL, "a") som fil:
fil.skriv (kontinuerlig_meddelande + "\ n")
up_time = datetime.datum Tid.nu()
uptime_message = "Nätverksanslutning återställd vid:" + str (up_time).dela(".") [0]
stilleståndstid = beräkna tid (stilleståndstid, driftstid)
_m = "Nätverksanslutning var inte tillgänglig för" + stilleståndstid
skriva ut (uptime_message)
skriva ut (_m)
med öppen (FIL, "a") som fil:
fil.skriv (uptime_message + "\ n")
fil.skriv (_m + "\ n")
mon_net_connection ()

Om du kör detta skript får du en utdata som liknar den som visas nedan:

Slutsats

Med ovanstående skript kan vi övervaka när nätverksanslutningen går förlorad och logga den ständigt tills den är tillgänglig. Detta enkla skript är öppet för förbättringar. Justera gärna koden för att passa dina behov och utöka den.

OpenTTD vs Simutrans
Att skapa din egen transportsimulering kan vara rolig, avkopplande och extremt lockande. Det är därför du måste se till att du testar så många spel so...
OpenTTD-handledning
OpenTTD är ett av de mest populära affärssimuleringsspelen där ute. I det här spelet måste du skapa en underbar transportaffär. Du kommer dock att bör...
SuperTuxKart för Linux
SuperTuxKart är en fantastisk titel som är utformad för att ge dig Mario Kart-upplevelsen gratis på ditt Linux-system. Det är ganska utmanande och rol...