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:
- Python-ohjelmoinnin perusteet
- Tietokoneverkkojen perustiedot.
- Ole mukava käyttää päätelaitetta.
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.
tuontipistoketuontiaika
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ä.