Python

Python skripts, lai uzraudzītu tīkla savienojumu

Python skripts, lai uzraudzītu tīkla savienojumu
Nepieciešamība, lai mūsu ierīces vienmēr būtu savienotas ar internetu, kļūst par pamatvajadzību, nevis par papildu privilēģiju.

Ir ļoti svarīgi, lai būtu lietojumprogrammas un ierīces, kurām jāpiesakās, jānosūta un jāsaņem dati uz ārpasauli. Tādējādi rīka izmantošana, kas ļauj jums uzraudzīt, kad tīkls nedarbojas, var palīdzēt novērst tīklu vai apturēt lietojumprogrammas, pirms tiek nosūtīta virkne žurnāla kļūdu.

Šodienas apmācībā mēs izveidosim vienkāršu tīkla monitoru, kas pastāvīgi uzrauga jūsu interneta savienojamību, nosūtot ping pieprasījumus uz ārēju resursu. Skripts, kuru mēs izveidosim, arī reģistrēs žurnālus par interneta darbības pārtraukumu un dīkstāves ilgumu:

Projekta prasības

Šajā projektā mums būs nepieciešams tikai:

Projekta loģika

Pirms ienirt kodēšanas daļā, apspriedīsimies un sapratīsim, ko mēs cenšamies sasniegt:

Kas ir tīkla darbības pārtraukums un dīkstāves?

Runājot par tīkla darbības pārtraukšanu un dīkstāvi, mēs domājam periodu, kad tīkla savienojums nav pilnībā pieejams, un tādējādi mēs nevaram sazināties ar ierīcēm ārpus tīkla. Jo ilgāk internets nav pieejams, jo ilgāks dīkstāves laiks.

Kā noteikt dīkstāvi

Tagad, kad mēs zinām, kas ir dīkstāves internetā, jums var rasties jautājums: “Kā mēs to darīsim??”

Nesarežģot mūsu kodu, mēs varam iet ar ping. Ping ir metode, kurā mēs nepārtraukti pingam uzticamu serveri, iespējams, Cloudflare vai Google DNS, un pēc tam gaidām atbildi.

Ja mēs pingam serveri un nav atbildes, mēs atzīmējam konkrēto laiku un turpinām pingēt, līdz mēs saņemam ping un atzīmējam laiku.

Ņemot vērā laika starpību, mēs varam atzīmēt, kad internets nedarbojās un cik ilgi.

Mums arī jābūt uzmanīgiem, pingējot vienu serveri, jo mēs varam kļūdaini kļūdīties kā DDoS uzbrukums, kas var izraisīt mūsu IP adreses bloķēšanu, kas radītu negatīvus rezultātus.

Šeit ir shēma, kas izskaidro šo jēdzienu:

Saruna ir lēta; tagad ienirsim kodā, kurā parādīts, kā ieviest šo loģiku:

Tagad parādiet man kodu

Kā parasti, Python mēs sākam ar nepieciešamo bibliotēku importēšanu. Tālāk mēs izveidojam žurnāla failu pašreizējā darba direktorijā.

Mēs izmantojam kontaktligzdas bibliotēku, lai pirmajā funkcijā nosūtītu pieprasījumu uz ārēju IP adresi. Šajā piemērā mēs izmantojam Cloudflare publisko DNS adresi, kurai ir ļoti augsts darbības laiks. Mēs arī ejam garām portam, un, tā kā tas ir DNS serveris, izmantojiet 53 portu.

Pēc tam mēs pārbaudām, vai mums ir piekļuve žurnāla faila direktorijai, un izejiet, ja mums nav piekļuves.

Nākamais solis ir aprēķināt tīkla savienojuma pārtraukšanas laiku. Visbeidzot, mēs iesaiņojam visu funkcionalitāti cilpā, kā parādīts zemāk esošajā kodā.

importa ligzda
importa laiks
importēt datumu
importēt os
importa sys
LOG_FNAME = "tīkls.žurnāls "
FILE = os.ceļš.pievienoties (os.getcwd (), LOG_FNAME)
def send_ping_request (resursdators = "1.1.1.1 ", ports = 53, taimauts = 3):
mēģiniet:
kontaktligzda.setdefaulttimeout (taimauts)
s = kontaktligzda.kontaktligzda (kontaktligzda.AF_INET, kontaktligzda.SOCK_STREAM)
s.savienot ((resursdators, ports))
izņemot OSError kā kļūdu:
atgriezties Nepatiesa
cits:
s.aizvērt ()
atgriezties True
def write_permission_check ():
mēģiniet:
ar atvērtu (FILE, "a") kā failu:
iziet
izņemot OSError kā kļūdu:
drukāt ("Neizdevās izveidot žurnāla failu")
sys.Izeja()
visbeidzot:
iziet
def aprēķināt_laiks (sākums, apstāšanās):
time_difference = stop - start
sekundes = pludiņš (str (laika_ starpība.kopā_sekundes ()))
atgriezties str (datetime.timedelta (sekundes = sekundes)).sadalīt (".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = datuma laiks.datums Laiks.tagad ()
motd = "Tīkla savienojuma uzraudzība sākās:" + str (monitor_start_time).sadalīt (".") [0] +" Ping pieprasījuma sūtīšana pēc "+ str (ping_freq) +" sekundes "
drukāt (motd)
ar atvērtu (FILE, "a") kā failu:
failu.rakstīt ("\ n")
failu.rakstīt (motd + "\ n")
kamēr patiess:
ja send_ping_request ():
laiks.gulēt (ping_freq)
cits:
dīkstāves laiks = datuma laiks.datums Laiks.tagad ()
fail_msg = "Tīkla savienojums nav pieejams:" + str (dīkstāves laiks).sadalīt (".") [0]
drukāt (fail_msg)
ar atvērtu (FILE, "a") kā failu:
failu.rakstīt (fail_msg + "\ n")
i = 0
kamēr nav send_ping_request ():
laiks.gulēt (1)
i + = 1
ja i> = 3600:
i = 0
tagad = datuma laiks.datums Laiks.tagad ()
continous_message = "Tīkla nepieejamība pastāvīgi pastāv:" + str (tagad).sadalīt (".") [0]
drukāt (nepārtraukts_ziņojums)
ar atvērtu (FILE, "a") kā failu:
failu.rakstīt (nepārtraukts_ziņojums + "\ n")
up_time = datuma laiks.datums Laiks.tagad ()
uptime_message = "Tīkla savienojamība atjaunota:" + str (up_time).sadalīt (".") [0]
dīkstāves laiks = aprēķina laiks (dīkstāves laiks, darbības laiks)
_m = "Tīkla savienojums nebija pieejams" + dīkstāves laikā
drukāt (uptime_message)
drukāt (_m)
ar atvērtu (FILE, "a") kā failu:
failu.rakstīt (uptime_message + "\ n")
failu.rakstīt (_m + "\ n")
mon_net_connection ()

Ja palaidīsit šo skriptu, jūs iegūsiet izvadi, kas līdzīgs zemāk parādītajam:

Secinājums

Izmantojot iepriekš minēto skriptu, mēs varam uzraudzīt, kad tīkla savienojums ir zaudēts, un pastāvīgi reģistrēt to, līdz tas ir pieejams. Šis vienkāršais skripts ir pieejams uzlabojumiem. Pielāgojiet kodu atbilstoši savām vajadzībām un paplašiniet to.

Microsoft Sculpt Touch bezvadu peles apskats
Es nesen lasīju par Microsoft Sculpt Touch bezvadu pele un nolēma to nopirkt. Pēc kāda laika izmantošanas es nolēmu dalīties savā pieredzē ar to. Šo b...
AppyMouse ekrāna skārienpaliktnis un peles rādītājs Windows planšetdatoriem
Planšetdatoru lietotājiem bieži pietrūkst peles rādītāja, it īpaši, ja viņi parasti lieto klēpjdatorus. Skārienekrāna viedtālruņiem un planšetdatoriem...
Vidējā peles poga nedarbojas sistēmā Windows 10
The peles vidējā poga palīdz jums ritināt garas tīmekļa lapas un ekrānus ar lielu datu daudzumu. Ja tas apstājas, jūs galu galā izmantosiet tastatūru,...