Piton

Python szkript a hálózati kapcsolat megfigyeléséhez

Python szkript a hálózati kapcsolat megfigyeléséhez
Annak szükségessége, hogy eszközeink mindig kapcsolódjanak az internethez, egyre inkább alapvető szükséglet, mint hozzáadott privilégium.

Rendkívül fontos, hogy olyan alkalmazások és eszközök legyenek, amelyeknek naplózni, adatokat küldenie és fogadniuk kell a külvilág felé. Így egy olyan eszköz használata, amely lehetővé teszi a hálózat leállásának figyelemmel kísérését, segíthet a hálózat hibaelhárításában vagy az alkalmazások leállításában, mielőtt egy csomó naplóhibát küldene.

A mai oktatóanyagban felépítünk egy egyszerű hálózati monitort, amely folyamatosan figyelemmel kíséri az internetkapcsolatot ping-kérelmek küldésével egy külső erőforrásra. Az általunk létrehozott szkript naplót is vezet, ha az internet nem működik, és a leállás időtartamáról:

Projekt követelmények

Ehhez a projekthez csak a következőkre lesz szükségünk:

Projektlogika

Mielőtt belemerülnénk a kódoló részbe, beszéljük meg és értsük meg, mit próbálunk elérni:

Mi a hálózat fel és leállás?

Amikor a hálózat fel- és leállásáról beszélünk, azt az időszakot értjük, amikor a hálózati kapcsolat teljesen nem érhető el, és így nem tudunk kommunikálni a hálózatunkon kívüli eszközökkel. Minél hosszabb ideig nem érhető el az internet, annál hosszabb az állásidő.

Hogyan állapítható meg az állásidő

Most, hogy tudjuk, mi az internet leállása, elgondolkodhat azon, hogy „hogyan lehet ezt meghatározni?”

Anélkül, hogy bonyolítanánk a kódunkat, mehetünk a pingeléssel. A ping egy olyan módszer, ahol folyamatosan megbízható kiszolgálót - például Cloudflare vagy Google DNS - pingelünk, majd megvárjuk a választ.

Ha pingelünk a szerveren, és nincs válasz, akkor megjegyezzük azt a pontos időt, és addig folytatjuk a pingelést, amíg meg nem kapunk egy pinget és meg nem jegyezzük az időt.

Az időeltolódás figyelembevételével megállapíthatjuk, hogy mikor és mennyi ideig működött az internet.

Óvatosnak kell lennünk egyetlen szerver pingelésénél is, mert a pinget tévesen DDoS-támadásnak téveszthetjük, ami IP-címünk blokkolását okozhatja, ami negatív eredményeket hozna.

Itt van egy folyamatábra, amely elmagyarázza ezt a koncepciót:

Beszélni olcsó; most merüljünk el a kódban, amely bemutatja ennek a logikának a megvalósítását:

Most mutasd meg a kódot

Szokás szerint a Pythonban a szükséges könyvtárak importálásával kezdjük. Ezután létrehozunk egy naplófájlt az aktuális munkakönyvtárban.

A socket könyvtár segítségével kérést küldünk egy külső IP-címre az első függvényben. Ebben a példában a Cloudflare nyilvános DNS-címet használjuk, amelynek nagyon magas az üzemideje. Átadjuk a portot is, és mivel ez egy DNS-szerver, használjuk az 53-as portot.

Ezután ellenőrizzük, hogy van-e hozzáférésünk a naplófájl könyvtárhoz, és kilépünk, ha nincs hozzáférésünk.

A következő lépés kiszámítja a hálózati kapcsolat megszakadásának idejét. Végül a teljes funkcionalitást egy hurokba csomagoljuk, az alábbi kód szerint.

import aljzat
import idő
importálás ideje
import os
import sys
LOG_FNAME = "hálózat.napló "
FÁJL = os.pálya.csatlakozni (os.getcwd (), LOG_FNAME)
def send_ping_request (gazdagép = "1.1.1.1 ", port = 53, időtúllépés = 3):
próbáld ki:
foglalat.setdefaulttimeout (timeout)
s = aljzat.aljzat (aljzat.AF_INET, aljzat.SOCK_STREAM)
s.connect ((gazdagép, port))
az OSError hiba kivételével:
return False
más:
s.Bezárás()
return True
def write_permission_check ():
próbáld ki:
az open (FILE, "a") fájlként:
passz
az OSError hiba kivételével:
nyomtatás ("A naplófájl létrehozása nem sikerült")
sys.kijárat()
végül:
passz
def calc_time (start, stop) def:
time_difference = stop - start
másodperc = lebeg (str (idő_különbség.összesen_ másodperc ()))
return str (dátumidő.timedelta (másodperc = másodperc)).hasított(".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = dátumidő.dátum idő.Most()
motd = "A hálózati kapcsolat figyelése ekkor kezdődött:" + str (monitor_start_time).hasított(".") [0] +" Pingkérés küldése "+ str (ping_freq) +" másodperc alatt "
nyomtatás (motd)
az open (FILE, "a") fájlként:
fájl.ír ("\ n")
fájl.írás (motd + "\ n")
míg True:
ha send_ping_request ():
idő.alvás (ping_freq)
más:
down_time = dátumidő.dátum idő.Most()
fail_msg = "A hálózati kapcsolat nem érhető el:" + str (down_time).hasított(".") [0]
nyomtatás (fail_msg)
az open (FILE, "a") fájlként:
fájl.írás (fail_msg + "\ n")
i = 0
miközben nem küldi_küldés_kérés ():
idő.alvás (1)
i + = 1
ha i> = 3600:
i = 0
most = dátumidő.dátum idő.Most()
continous_message = "A hálózat nem áll rendelkezésre:" + str (most).hasított(".") [0]
nyomtatás (folytonos_üzenet)
az open (FILE, "a") fájlként:
fájl.írás (folytonos_üzenet + "\ n")
up_time = dátumidő.dátum idő.Most()
uptime_message = "Hálózati kapcsolat helyreállítva:" + str (up_time).hasított(".") [0]
leállási idő = kiszámítási idő (leállási idő, üzemidő)
_m = "A hálózati kapcsolat nem volt elérhető" + leállási idő alatt
nyomtatás (uptime_message)
nyomtatás (_m)
az open (FILE, "a") fájlként:
fájl.írás (uptime_message + "\ n")
fájl.írás (_m + "\ n")
mon_net_connection ()

Ha futtatja ezt a szkriptet, akkor az alábbihoz hasonló kimenetet kap:

Következtetés

A fenti szkript segítségével figyelemmel kísérhetjük, ha a hálózati kapcsolat megszakadt, és folyamatosan naplózhatjuk, amíg rendelkezésre áll. Ez az egyszerű szkript nyitott a fejlesztésekre. Bátran állítsa be a kódot az igényeinek megfelelően, és bővítse ki azt.

Ingyenes és nyílt forráskódú játékmotorok a Linux játékok fejlesztéséhez
Ez a cikk felsorolja azokat az ingyenes és nyílt forráskódú játékmotorokat, amelyek felhasználhatók 2D és 3D játékok fejlesztésére Linuxon. Számos ily...
Shadow of the Tomb Raider for Linux Tutorial
A Shadow of the Tomb Raider a Tomb Raider sorozat tizenkettedik kiegészítője - az Eidos Montreal által létrehozott akció-kaland játék franchise. A ját...
Az FPS növelése Linux alatt?
Az FPS jelentése Képkocka másodpercenként. Az FPS feladata a videolejátszások vagy játékteljesítmények képkockasebességének mérése. Egyszerű szavakkal...