Python

Pythoni skript võrguühenduse jälgimiseks

Pythoni skript võrguühenduse jälgimiseks
Vajadus, et meie seadmed oleksid alati Internetiga ühendatud, on muutumas pigem põhivajaduseks kui täiendavaks privileegiks.

Kriitilise tähtsusega on rakenduste ja seadmete olemasolu, mis peavad välismaailma andmeid logima, saatma ja vastu võtma. Seega võib tööriista olemasolu, mis võimaldab teil jälgida, kui võrk laguneb, võrgu tõrkeotsinguks või rakenduste peatamiseks enne hulga logivigade saatmist.

Tänases õpetuses ehitame lihtsa võrgumonitori, mis jälgib pidevalt teie Interneti-ühendust, saates pingitaotlusi välisele ressursile. Meie loodud skript peab logisid ka siis, kui Internet on katki ja seisaku kestus:

Projektinõuded

Selle projekti jaoks vajame ainult:

Projektiloogika

Enne kodeerimise osasse sukeldumist arutleme ja mõistkem, mida me püüame saavutada:

Mis on võrgu üles- ja seiskamisaeg?

Rääkides võrgu üles- ja seisakuaegadest, peame silmas perioodi, kus võrguühendus pole täielikult saadaval ja seega ei saa me suhelda seadmetega väljaspool oma võrku. Mida kauem internet pole saadaval, seda pikem on seisak.

Kuidas määrata seisakuid

Nüüd, kui me teame, mis on Interneti seisakuid, võite mõelda: "kuidas me selle kindlaks määrame?”

Koodi keerulisemaks muutmata võime pingiga minna. Ping on meetod, kus me pingutame pidevalt usaldusväärset serverit - võib-olla Cloudflare'i või Google'i DNS-i - ja siis ootame vastust.

Kui me pingutame serverit ja vastust ei tule, märkime selle konkreetse aja ja jätkame pingimist, kuni saame pingi ja märkime kellaaja.

Ajavahe olemasolul võime märkida, millal Internet oli ja kui kaua.

Samuti peame olema ettevaatlikud ühe serveri pingimisel, sest pingi võib ekslikult eksitada kui DDoS-rünnakut, mis võib põhjustada meie IP-aadressi blokeerimise, mis tooks kaasa negatiivseid tulemusi.

Siin on seda kontseptsiooni selgitav vooskeem:

Rääkimine on odav; uurime nüüd koodi, mis näitab selle loogika rakendamist:

Nüüd näita mulle koodi

Nagu tavaliselt, alustame Pythonis vajalike teekide importimisega. Järgmisena loome logifaili praegusesse töökataloogi.

Esimeses funktsioonis saadame päringu saatmiseks välisele IP-aadressile sokli kogu. Selle näite jaoks kasutame Cloudflare'i avalikku DNS-aadressi, mille kasutusaeg on väga kõrge. Samuti läbime pordi ja kuna see on DNS-server, kasutage pordi 53.

Seejärel kontrollime, kas meil on juurdepääs logifailide kataloogile, ja lõpetame, kui meil pole juurdepääsu.

Järgmine samm on võrguühenduse katkemise aja arvutamine. Lõpuks mähkime kogu funktsionaalsuse silmusesse, nagu on näidatud allpool toodud koodis.

impordipesa
impordiaeg
impordi kuupäev
impordi os
impordi süsteem
LOG_FNAME = "võrk.logi "
FILE = os.tee.liituma (os.getcwd (), LOG_FNAME)
def send_ping_request (host = "1.1.1.1 ", port = 53, ajalõpp = 3):
proovige:
pistikupesa.setdefaulttimeout (timeout)
s = pistikupesa.pistikupesa (pistikupesa.AF_INET, pistikupesa.SOCK_STREAM)
s.ühendama ((host, port))
välja arvatud viga OSError:
tagastama Vale
muu:
s.Sulge()
return True
def kirjutamisluba_kontroll ():
proovige:
failina avatud (FILE, "a"):
üle andma
välja arvatud viga OSError:
print ("Logifaili loomine nurjus")
sys.väljumine ()
lõpuks:
üle andma
def calc_time (algus, peatus):
time_difference = stop - start
sekundit = ujuk (str (aja_ erinevus).kokku_sekundit ()))
return str (kuupäev.timedelta (sekundid = sekundid)).split (".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = kuupäeva aeg.kuupäev Kellaaeg.nüüd ()
motd = "Võrguühenduse jälgimine algas kell:" + str (monitor_start_time).split (".") [0] +" Pingitaotluse saatmine "+ str (ping_freq) +" sekundites "
print (motd)
failina avatud (FILE, "a"):
faili.kirjuta ("\ n")
faili.kirjuta (motd + "\ n")
tõsi:
kui send_ping_request ():
aeg.uni (ping_freq)
muu:
seisuaeg = kuupäeva aeg.kuupäev Kellaaeg.nüüd ()
fail_msg = "Võrguühendus pole saadaval:" + str (seisuaeg).split (".") [0]
print (fail_msg)
failina avatud (FILE, "a"):
faili.kirjuta (fail_msg + "\ n")
i = 0
samas kui ei saada_saadatav_request ():
aeg.magama (1)
i + = 1
kui i> = 3600:
i = 0
nüüd = kuupäevaeg.kuupäev Kellaaeg.nüüd ()
continous_message = "Võrgu pole saadaval:" + str (praegu).split (".") [0]
print (pidev_sõnum)
failina avatud (FILE, "a"):
faili.kirjuta (pidev_sõnum + "\ n")
up_time = kuupäeva aeg.kuupäev Kellaaeg.nüüd ()
uptime_message = "Võrguühendus taastatud kell:" + str (up_time).split (".") [0]
seisuaeg = arvutage_aeg (seisuaeg, up_time)
_m = "Võrguühendus ei olnud saadaval" + seisuaeg
print (uptime_message)
print (_m)
failina avatud (FILE, "a"):
faili.kirjuta (uptime_message + "\ n")
faili.kirjuta (_m + "\ n")
mon_net_connection ()

Selle skripti käivitamisel saate järgmise väljundiga sarnase väljundi:

Järeldus

Kasutades ülaltoodud skripti, saame jälgida, kui võrguühendus on kadunud, ja logime seda pidevalt, kuni see on saadaval. See lihtne skript on täiustamiseks avatud. Korrigeerige kood vastavalt oma vajadustele ja laiendage seda.

Kuidas installida ja mängida Doomi Linuxis
Doomi sissejuhatus Doom-seeria sai alguse 90ndatel pärast algse Doomi väljaandmist. See oli kohene hitt ja sellest ajast alates on mänguseeria pälvinu...
Vulkan Linuxi kasutajatele
Iga uue põlvkonna graafikakaartidega näeme, et mängude arendajad ületavad graafilise truuduse piire ja jõuavad fotorealismile ühe sammu lähemale. Kuid...
OpenTTD vs Simutrans
Oma transpordisimulatsiooni loomine võib olla lõbus, lõõgastav ja äärmiselt köitev. Sellepärast peate endale meelepärase leidmiseks kindlasti proovima...