„Python“

„Python“ scenarijus tinklo ryšiui stebėti

„Python“ scenarijus tinklo ryšiui stebėti
Būtinybė, kad mūsų įrenginiai visada būtų prijungti prie interneto, tampa labiau pagrindiniu poreikiu nei papildoma privilegija.

Labai svarbu turėti programas ir įrenginius, kuriems reikia prisijungti, siųsti ir gauti duomenis į išorinį pasaulį. Taigi turėdami įrankį, kuris leidžia jums stebėti, kai jūsų tinklas neveikia, galite padėti pašalinti tinklą arba sustabdyti programas prieš išsiunčiant žurnalo klaidų rinkinį.

Šiandienos pamokoje sukursime paprastą tinklo monitorių, kuris nuolat stebi jūsų interneto ryšį, siunčiant ping užklausas į išorinius išteklius. Mūsų sukurtas scenarijus taip pat veda žurnalus, kai neveikia internetas ir prastovos trukmė:

Projekto reikalavimai

Šiam projektui mums reikės tik:

Projekto logika

Prieš pasinerdami į kodavimo dalį, aptarkime ir supraskime, ką bandome pasiekti:

Kas yra tinklo neveikimas ir prastovos?

Kalbėdami apie tinklo neveikimą ir prastovą, turime omenyje laikotarpį, kai tinklo ryšys visiškai nepasiekiamas, taigi negalime bendrauti su įrenginiais, esančiais už mūsų tinklo ribų. Kuo ilgiau internetas nepasiekiamas, tuo ilgesnė prastova.

Kaip nustatyti prastovą

Dabar, kai žinome, kas yra prastovos internete, jums gali kilti klausimas: „kaip mes tai nustatysime?“

Nesunkindami savo kodo, galime pereiti su ping. Pingas yra metodas, kai mes nuolat bandome patikimą serverį, galbūt „Cloudflare“ ar „Google DNS“, ir tada laukiame atsakymo.

Jei mes ping serveryje ir nėra atsakymo, mes pažymime tą konkretų laiką ir tęsiame pingavimą, kol gausime ping ir pažymėsime laiką.

Turėdami laiko skirtumą, galime pastebėti, kada internetas neveikė ir kiek laiko.

Mes taip pat turime būti atsargūs pingdami vieną serverį, nes mes galime klaidingai suklysti kaip DDoS ataką, dėl kurios mūsų IP adresas gali būti užblokuotas, o tai duotų neigiamų rezultatų.

Ši schema paaiškina šią koncepciją:

Kalbėti pigu; dabar pasinerkime į kodą, parodantį, kaip įgyvendinti šią logiką:

Dabar parodyk man kodą

Kaip įprasta, „Python“ mes pradedame importuoti reikalingas bibliotekas. Tada mes sukuriame žurnalo failą dabartiniame darbo kataloge.

Mes naudojame lizdų biblioteką užklausai siųsti išoriniu IP adresu pagal pirmąją funkciją. Šiame pavyzdyje mes naudojame „Cloudflare“ viešąjį DNS adresą, kurio veikimo laikas yra labai didelis. Mes taip pat praleidžiame prievadą ir, kadangi tai yra DNS serveris, naudokite 53 prievadą.

Tada mes patikriname, ar turime prieigą prie žurnalo failų katalogo, ir uždarome, jei neturime prieigos.

Kitas žingsnis yra apskaičiuoti laiką, kai nutrūko tinklo ryšys. Galiausiai apvyniojame visą funkciją cikle, kaip parodyta žemiau esančiame kode.

importo lizdas
importo laikas
importavimo laikas
importuoti os
importuoti sistemas
LOG_FNAME = "tinklas.žurnalas "
FILE = os.kelias.prisijungti (os.getcwd (), LOG_FNAME)
def send_ping_request (kompiuteris = "1.1.1.1 ", prievadas = 53, skirtasis laikas = 3):
bandyti:
lizdas.setdefaulttimeout (skirtasis laikas)
s = lizdas.lizdas (lizdas.AF_INET, lizdas.SOCK_STREAM)
s.prisijungti ((pagrindinis kompiuteris, prievadas))
išskyrus OSError kaip klaidą:
grąžinti False
Kitas:
s.Uždaryti()
grįžti Tiesa
def write_permission_check ():
bandyti:
su atidarytu (FILE, "a") kaip failą:
praeiti
išskyrus OSError kaip klaidą:
spausdinti („Nepavyko sukurti žurnalo failo“)
sys.išėjimas ()
pagaliau:
praeiti
def apskaičiuoti_laikas (pradžia, pabaiga):
laiko_skirtumas = sustojimas - pradžia
sekundės = plūduriuojanti (str (laiko_skirtumas.viso_sekundės ()))
grįžti str (datos laikas.timedelta (sekundės = sekundės)).padalinti (".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = datos laikas.datos laikas.dabar ()
motd = "Tinklo ryšio stebėjimas prasidėjo:" + str (monitor_start_time).padalinti (".") [0] +" Siunčiama pingo užklausa per + str (ping_freq) + "sekundės"
spausdinti (motd)
su atidarytu (FILE, "a") kaip failą:
failą.rašyti ("\ n")
failą.rašyti (motd + "\ n")
o tiesa:
jei send_ping_request ():
laikas.miegoti (ping_freq)
Kitas:
neveikimo laikas = datos laikas.datos laikas.dabar ()
fail_msg = "Tinklo ryšys nepasiekiamas:" + str (neveikimo laikas).padalinti (".") [0]
spausdinti (fail_msg)
su atidarytu (FILE, "a") kaip failą:
failą.rašyti (fail_msg + "\ n")
i = 0
o ne send_ping_request ():
laikas.miegoti (1)
i + = 1
jei i> = 3600:
i = 0
dabar = datos laikas.datos laikas.dabar ()
continous_message = "Tinklas nėra prieinamas:" + str (dabar).padalinti (".") [0]
spausdinti (continous_message)
su atidarytu (FILE, "a") kaip failą:
failą.rašyti (nuolatinis_pranešimas + "\ n")
up_time = datos laikas.datos laikas.dabar ()
uptime_message = "Tinklo ryšys atkurtas:" + str (up_time).padalinti (".") [0]
neveikimo laikas = apskaičiuoti laiką (neveikimo laikas, neveikimo laikas)
_m = "Tinklo jungtis nebuvo prieinama" + neveikimo laikas
spausdinti (uptime_message)
spausdinti (_m)
su atidarytu (FILE, "a") kaip failą:
failą.rašyti (uptime_message + "\ n")
failą.rašyti (_m + "\ n")
mon_net_connection ()

Jei paleisite šį scenarijų, gausite išvestį, panašią į toliau pateiktą:

Išvada

Naudodami pirmiau pateiktą scenarijų, mes galime stebėti, kada tinklo ryšys nutrūksta, ir nuolat jį registruoti, kol jis bus pasiekiamas. Šį paprastą scenarijų galima patobulinti. Nedvejodami pakoreguokite kodą pagal savo poreikius ir išplėskite jį.

„AppyMouse“ ekrano „Trackpad“ ir pelės žymeklis, skirtas „Windows“ tabletėms
Planšetinių kompiuterių vartotojai dažnai praleidžia pelės žymeklį, ypač kai įprasta naudoti nešiojamus kompiuterius. Jutiklinio ekrano išmanieji tele...
Vidutinis pelės mygtukas neveikia sistemoje „Windows 10“
The vidurinis pelės mygtukas padeda naršyti ilgus tinklalapius ir ekranus, kuriuose yra daug duomenų. Jei tai sustos, gerai, jūs naudosite klaviatūrą ...
Kaip pakeisti kairįjį ir dešinįjį pelės mygtukus „Windows 10“ kompiuteryje
Gana įprasta, kad visi kompiuterio pelės įrenginiai yra ergonomiškai sukurti dešiniarankiams. Tačiau yra pelių prietaisų, specialiai sukurtų kairiaran...