Python

Python-komentosarja verkkoyhteyden valvontaan

Python-komentosarja verkkoyhteyden valvontaan
Tarve, että laitteemme ovat aina yhteydessä Internetiin, on tulossa enemmän perustarpeeksi kuin lisätuksi etuoikeudeksi.

On erittäin tärkeää, että sinulla on sovelluksia ja laitteita, joiden on kirjauduttava, lähetettävä ja vastaanotettava tietoja ulkomaailmaan. Siten työkalun, jonka avulla voit seurata, kun verkko katkeaa, avulla voit auttaa verkon vianmäärityksessä tai pysäyttää sovellukset ennen joukon lokivirheiden lähettämistä.

Tämänpäiväisessä opetusohjelmassa rakennamme yksinkertaisen verkkomonitorin, joka valvoo jatkuvasti Internet-yhteyttäsi lähettämällä ping-pyyntöjä ulkoiselle resurssille. Luomamme komentosarjan on myös pidettävä lokeja Internetin ollessa poissa käytöstä ja seisokkien kestosta:

Projektivaatimukset

Tätä projektia varten tarvitsemme vain:

Projektilogiikka

Ennen kuin sukellamme koodausosaan, keskustellaan ja ymmärretään, mitä yritämme saavuttaa:

Mikä on verkon käyttö ja seisokit?

Kun puhumme verkon käytöstä ja seisokkeista, tarkoitamme ajanjaksoa, jolloin verkkoyhteys ei ole täysin käytettävissä, joten emme voi kommunikoida verkon ulkopuolisten laitteiden kanssa. Mitä pidempään Internet ei ole käytettävissä, sitä pidemmät seisokit ovat.

Kuinka määrittää seisokkeja

Nyt kun tiedämme, mikä on seisokkeja Internetissä, saatat miettiä, "kuinka voimme selvittää sen?”

Vaikeuttamatta koodia voimme mennä pingiin. Ping on menetelmä, jossa pingataan jatkuvasti luotettavaa palvelinta - ehkä Cloudflare tai Google DNS - ja odotamme vastausta.

Jos pingataan palvelinta ja vastausta ei ole, huomaamme kyseisen ajan ja jatkamme pingaamista, kunnes saamme pingin ja muistiinpanon ajan.

Aikaeron perusteella voimme huomata, milloin Internet oli poissa ja kuinka kauan.

Meidän on myös oltava varovaisia ​​yhden palvelimen pingoinnissa, koska voimme erehdyttää virheellisesti DDoS-hyökkäyksen, mikä saattaa aiheuttaa IP-osoitteemme estämisen, mikä tuottaisi negatiivisia tuloksia.

Tässä on vuokaavio, joka selittää tämän käsitteen:

Puhe on halpaa; sukelkaamme nyt koodiin, joka näyttää tämän logiikan toteuttamisen:

Näytä nyt koodi

Kuten tavallista, Pythonissa aloitamme tarvittavien kirjastojen tuomisesta. Seuraavaksi luomme lokitiedoston nykyiseen työhakemistoon.

Socket-kirjastolla lähetämme pyynnön ulkoiseen IP-osoitteeseen ensimmäisessä toiminnossa. Tässä esimerkissä käytämme julkista Cloudflare-DNS-osoitetta, jolla on erittäin korkea käyttöaika. Ohitamme myös portin, ja koska se on DNS-palvelin, käytä porttia 53.

Sitten tarkistamme, että meillä on pääsy lokitiedostohakemistoon, ja lopetamme, jos meillä ei ole pääsyä.

Seuraava vaihe on laskea aika, jolloin verkkoyhteys on katkennut. Lopuksi kääritään koko toiminto silmukkaan, kuten alla olevassa koodissa näkyy.

tuontipistoke
tuontiaika
Tuo päivämäärä
tuonti os
tuoda sys
LOG_FNAME = "verkko.Hirsi"
TIEDOSTO = os.polku.liittyä (os.getcwd (), LOG_FNAME)
def send_ping_request (isäntä = "1.1.1.1 ", portti = 53, aikakatkaisu = 3):
yrittää:
pistorasiaan.setdefaulttimeout (aikakatkaisu)
s = pistorasia.pistorasia (pistorasia.AF_INET, liitäntä.SOCK_STREAM)
s.muodosta yhteys ((isäntä, portti))
paitsi OSError virhe:
palauta False
muu:
s.kiinni()
palaa True
def write_permission_check ():
yrittää:
tiedostona avoin (FILE, "a"):
kulkea
paitsi OSError virhe:
tulosta ("Lokitiedoston luominen epäonnistui")
sys.poistua ()
lopuksi:
kulkea
def laskea_aika (aloitus, lopetus):
time_difference = stop - start
sekuntia = kellua (str (aika_ero.yhteensä_sekuntia ()))
return str (päivämäärä.timedelta (sekuntia = sekuntia)).jakaa(".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = päivämäärä.treffiaika.nyt()
motd = "Verkkoyhteyden valvonta aloitettiin:" + str (monitor_start_time).jakaa(".") [0] +" Ping-pyynnön lähetys "+ str (ping_freq) +" sekunnissa "
tulosta (motd)
tiedostona avoin (FILE, "a"):
tiedosto.kirjoita ("\ n")
tiedosto.kirjoita (motd + "\ n")
kun taas totta:
jos send_ping_request ():
aika.nukkua (ping_freq)
muu:
seis_aika = päivämäärä.treffiaika.nyt()
fail_msg = "Verkkoyhteys ei ole käytettävissä:" + str (seisokki).jakaa(".") [0]
tulosta (Fail_msg)
tiedostona avoin (FILE, "a"):
tiedosto.kirjoita (Fail_msg + "\ n")
i = 0
mutta ei lähetä_pyyntö ():
aika.nukkua (1)
i + = 1
jos i> = 3600:
i = 0
nyt = päivämäärä.treffiaika.nyt()
continous_message = "Verkko ei ole käytettävissä jatkuvasti:" + str (nyt).jakaa(".") [0]
tulosta (jatkuva_viesti)
tiedostona avoin (FILE, "a"):
tiedosto.kirjoita (jatkuva_viesti + "\ n")
up_time = päivämäärä.treffiaika.nyt()
uptime_message = "Verkkoyhteydet palautettu:" + str (up_time).jakaa(".") [0]
seisokki = laskea_aika (seisokki, käyttöaika)
_m = "Verkkoyhteyttä ei ollut käytettävissä" + down_time
tulosta (käyttöaika_viesti)
tulosta (_m)
tiedostona avoin (FILE, "a"):
tiedosto.kirjoita (käyttöaika_viesti + "\ n")
tiedosto.kirjoita (_m + "\ n")
mon_net_connection ()

Jos suoritat tämän komentosarjan, saat samanlaisen tuloksen kuin alla:

Johtopäätös

Yllä olevan komentosarjan avulla voimme seurata, kun verkkoyhteys katkeaa, ja kirjata se jatkuvasti, kunnes se on käytettävissä. Tämä yksinkertainen komentosarja on avoin parannuksille. Säädä koodi vapaasti tarpeidesi mukaan ja laajenna sitä.

How to reverse Mouse and Touchpads scrolling direction in Windows 10
Mouse and Touchpads not only make computing easy but more efficient and less time-consuming. We cannot imagine a life without these devices, but still...
How to change Mouse pointer and cursor size, color & scheme on Windows 10
The mouse pointer and cursor in Windows 10 are very important aspects of the operating system. This can be said for other operating systems as well, s...
Ilmaiset ja avoimen lähdekoodin pelimoottorit Linux-pelien kehittämiseen
Tämä artikkeli kattaa luettelon ilmaisista ja avoimen lähdekoodin pelimoottoreista, joita voidaan käyttää 2D- ja 3D-pelien kehittämiseen Linuxissa. Tä...