Python

Python Script за наблюдение на мрежова връзка

Python Script за наблюдение на мрежова връзка
Необходимостта нашите устройства да бъдат винаги свързани с интернет се превръща по-скоро в основна нужда, отколкото в допълнителна привилегия.

Наличието на приложения и устройства, които трябва да регистрират, изпращат и получават данни към външния свят, е от решаващо значение. По този начин наличието на инструмент, който ви позволява да наблюдавате кога мрежата ви спира, може да ви помогне да отстраните мрежата или да спрете приложенията, преди да изпратите куп грешки в регистрационния файл.

В днешния урок ще изградим прост мрежов монитор, който непрекъснато наблюдава вашата интернет свързаност, като изпраща заявки за пинг на външен ресурс. Скриптът, който ще създадем, също така ще държи дневници, когато интернет не работи и продължителността на престоя:

Изисквания към проекта

За този проект ще ни трябват само:

Логика на проекта

Преди да се потопим в кодиращата част, нека обсъдим и разберем какво се опитваме да постигнем:

Какво представлява мрежата нагоре и престой?

Когато говорим за работа в мрежа и престой, имаме предвид периода, в който мрежовата връзка е напълно недостъпна и по този начин не можем да комуникираме с устройства извън нашата мрежа. Колкото по-дълго интернет не е достъпен, толкова по-дълъг е престойът.

Как да определим престой

Сега, след като знаем какво е престой в интернет, може би се чудите: „как да го определим?”

Без да усложняваме нашия код, можем да използваме ping. Ping е метод, при който непрекъснато изпитваме надежден сървър - може би Cloudflare или Google DNS - и след това изчакваме отговор.

Ако пинг на сървъра и няма отговор, ние отбелязваме точното време и продължаваме да пинг, докато не получим пинг и отбелязваме часа.

Като имаме разлика във времето, можем да отбележим кога интернет е спрял и за колко време.

Също така трябва да бъдем внимателни, когато пингираме един сървър, защото може да имаме фалшиво грешен пинг като DDoS атака, което може да доведе до блокиране на IP адреса ни, което да доведе до отрицателни резултати.

Ето диаграма, обясняваща тази концепция:

Разговорите са евтини; нека сега да се потопим в кода, показващ как да приложим тази логика:

Сега ми покажете кода

Както обикновено, в Python започваме с импортиране на необходимите библиотеки. След това създаваме регистрационен файл в текущата работна директория.

Използваме библиотеката на сокети, за да изпратим заявка до външен IP адрес в първата функция. За този пример използваме публичен DNS адрес на Cloudflare, който има много високо време на работа. Предаваме и порта и тъй като това е DNS сървър, използвайте порт 53.

След това проверяваме дали имаме достъп до директорията на регистрационния файл и се отказваме, ако нямаме достъп.

Следващата стъпка е да се изчисли времето, когато мрежовата връзка е прекъсната. И накрая, обвиваме цялата функционалност в цикъл, както е показано в кода по-долу.

внос сокет
време за импортиране
импортиране на дата и час
внос os
импортиране на sys
LOG_FNAME = "мрежа.регистрация "
ФАЙЛ = os.път.присъединяване (os.getcwd (), LOG_FNAME)
def send_ping_request (хост = "1.1.1.1 ", порт = 53, изчакване = 3):
опитвам:
гнездо.setdefaulttimeout (изчакване)
s = гнездо.гнездо (гнездо.AF_INET, гнездо.SOCK_STREAM)
с.свързване ((хост, порт))
с изключение на OSError като грешка:
връщане False
друго:
с.близо()
връщане Вярно
def write_permission_check ():
опитвам:
с отворен (ФАЙЛ, "а") като файл:
мине
с изключение на OSError като грешка:
print ("Създаването на регистрационен файл не бе успешно")
sys.изход ()
накрая:
мине
def calcu_time (старт, стоп):
разлика във времето = спиране - стартиране
секунди = плувка (str (разлика във времето.общо_секунди ()))
return str (datetime.timedelta (секунди = секунди)).разделен (".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = дата и час.Време за среща.сега()
motd = "Мониторингът на мрежовата връзка е стартиран в:" + str (monitor_start_time).разделен (".") [0] +" Изпращане на заявка за пинг след "+ str (ping_freq) +" секунди "
печат (motd)
с отворен (ФАЙЛ, "а") като файл:
файл.запис ("\ n")
файл.запис (motd + "\ n")
докато е вярно:
ако send_ping_request ():
време.сън (ping_freq)
друго:
down_time = дата и час.Време за среща.сега()
fail_msg = "Мрежовата връзка не е налична при:" + str (down_time).разделен (".") [0]
печат (fail_msg)
с отворен (ФАЙЛ, "а") като файл:
файл.запис (fail_msg + "\ n")
i = 0
докато не е send_ping_request ():
време.сън (1)
i + = 1
ако i> = 3600:
i = 0
сега = дата и час.Време за среща.сега()
continous_message = "Недостъпността на мрежата постоянна при:" + str (сега).разделен (".") [0]
печат (непрекъснато_съобщение)
с отворен (ФАЙЛ, "а") като файл:
файл.запис (непрекъснато_съобщение + "\ n")
up_time = дата и час.Време за среща.сега()
uptime_message = "Мрежовата свързаност възстановена при:" + str (up_time).разделен (".") [0]
време на престой = изчисли време
_m = "Мрежовата връзка не беше достъпна за" + време за престой
печат (uptime_message)
печат (_m)
с отворен (ФАЙЛ, "а") като файл:
файл.запис (uptime_message + "\ n")
файл.запис (_m + "\ n")
mon_net_connection ()

Ако стартирате този скрипт, ще получите изход, подобен на показания по-долу:

Заключение

Използвайки горния скрипт, можем да наблюдаваме кога се губи мрежовата връзка и непрекъснато да я регистрираме, докато не стане налична. Този прост скрипт е отворен за подобрения. Чувствайте се свободни да коригирате кода според вашите нужди и да го разширите.

Топ 5 карти за залавяне на игри
Всички сме виждали и обичаме поточни игри в YouTube. PewDiePie, Jakesepticye и Markiplier са само някои от най-добрите геймъри, които са спечелили мил...
Как да разработите игра на Linux
Преди десетилетие не много потребители на Linux биха прогнозирали, че любимата им операционна система един ден ще бъде популярна игрална платформа за ...
Пристанища с отворен код на търговски игрални машини
Безплатни разширения на играта с отворен код и междуплатформени игри могат да се използват за възпроизвеждане на стари, както и някои от доста скорошн...