Python

Python Script для моніторингу мережевого підключення

Python Script для моніторингу мережевого підключення
Потреба в тому, щоб наші пристрої завжди були підключені до Інтернету, стає більше базовою потребою, ніж додатковою привілеєю.

Наявність програм та пристроїв, які потребують реєстрації, надсилання та отримання даних у зовнішній світ, є критичним. Таким чином, наявність інструменту, який дозволяє контролювати час відключення мережі, може допомогти вам усунути несправності в мережі або зупинити програми, перш ніж надсилати купу помилок журналу.

У сьогоднішньому навчальному посібнику ми створимо простий мережевий монітор, який постійно відстежує ваше підключення до Інтернету, надсилаючи запити пінгу на зовнішній ресурс. Сценарій, який ми створимо, також буде вести журнали, коли не працює Інтернет та тривалість простою:

Вимоги до проекту

Для цього проекту нам знадобляться лише:

Логіка проекту

Перш ніж заглибитися в частину кодування, давайте обговоримо і зрозуміємо, чого ми намагаємось досягти:

Що таке мережеві роботи та простої?

Коли ми говоримо про роботу мережі та простій, ми маємо на увазі період, коли мережеве з'єднання повністю недоступне, і, отже, ми не можемо спілкуватися з пристроями поза нашою мережею. Чим довше Інтернет недоступний, тим довший час простою.

Як визначити час простою

Тепер, коли ми знаємо, що таке простої в Інтернеті, ви можете задатися питанням: «як ми можемо визначити його?"

Не ускладнюючи наш код, ми можемо піти з ping. Пінг - це метод, коли ми постійно перевіряємо надійний сервер, можливо Cloudflare або Google DNS, а потім чекаємо відповіді.

Якщо ми пінгуємо сервер, а відповіді немає, ми відзначаємо цей час і продовжуємо пінгувати, поки не отримаємо пінг, і не зазначаємо час.

Маючи різницю в часі, ми можемо відзначити, коли Інтернет не працював і як довго.

Ми також повинні бути обережними при пінгуванні одного сервера, оскільки ми можемо помилково сприйняти пінг як DDoS-атаку, що може призвести до блокування нашої IP-адреси, що призведе до негативних результатів.

Ось блок-схема, що пояснює цю концепцію:

Розмова дешева; давайте зараз зануримося в код, який показує, як реалізувати цю логіку:

Зараз покажи мені код

Як зазвичай, у Python ми починаємо з імпорту необхідних бібліотек. Далі ми створюємо файл журналу в поточному робочому каталозі.

Ми використовуємо бібліотеку сокетів для надсилання запиту на зовнішню IP-адресу в першій функції. У цьому прикладі ми використовуємо загальнодоступну DNS-адресу Cloudflare, яка має дуже високий час роботи. Ми також передаємо порт, і оскільки це DNS-сервер, використовуйте порт 53.

Потім ми перевіряємо, що маємо доступ до каталогу файлу журналу, і кидаємо, якщо у нас немає доступу.

Наступним кроком є ​​розрахунок часу відключення мережевого з’єднання. Нарешті, ми обертаємо всю функціональність у цикл, як показано в коді нижче.

імпорт сокет
час імпорту
імпорт дата і час
імпорт ос
імпортувати sys
LOG_FNAME = "мережа.журнал "
ФАЙЛ = os.шлях.приєднатися (os.getcwd (), LOG_FNAME)
def send_ping_request (host = "1.1.1.1 ", порт = 53, час очікування = 3):
спробуйте:
розетка.setdefaulttimeout (час очікування)
s = розетка.розетка (розетка.AF_INET, сокет.SOCK_STREAM)
s.підключити ((хост, порт))
крім помилки OSError як помилки:
повернення False
ще:
s.закрити ()
повернути True
def write_permission_check ():
спробуйте:
з відкритим (ФАЙЛ, "а") як файл:
пройти
крім помилки OSError як помилки:
print ("Помилка створення файлу журналу")
sys.вихід()
нарешті:
пройти
def calcu_time (старт, зупинка):
різниця у часі = зупинка - старт
seconds = float (str (різниця в часі.total_seconds ()))
повернути 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 (час_перерви).розділити (".") [0]
друк (fail_msg)
з відкритим (ФАЙЛ, "а") як файл:
файл.запис (fail_msg + "\ n")
i = 0
поки не send_ping_request ():
час.спати (1)
i + = 1
якщо i> = 3600:
i = 0
зараз = дата і час.дата, час.зараз ()
continous_message = "Недоступність мережі постійно зберігається за адресою:" + str (зараз).розділити (".") [0]
друк (continous_message)
з відкритим (ФАЙЛ, "а") як файл:
файл.запис (continous_message + "\ n")
up_time = дата-час.дата, час.зараз ()
uptime_message = "Мережеве підключення відновлено за адресою:" + str (up_time).розділити (".") [0]
час очікування = обчислити час (час очікування, час очікування)
_m = "Мережеве підключення було недоступне протягом" + час очікування
друк (повідомлення про час роботи)
друк (_m)
з відкритим (ФАЙЛ, "а") як файл:
файл.запис (uptime_message + "\ n")
файл.запис (_m + "\ n")
mon_net_connection ()

Якщо ви запустите цей сценарій, ви отримаєте результат, подібний до наведеного нижче:

Висновок

Використовуючи наведений вище сценарій, ми можемо відстежувати втрату мережевого з'єднання та постійно реєструвати його, поки воно не стане доступним. Цей простий сценарій відкритий для вдосконалення. Не соромтеся налаштовувати код відповідно до своїх потреб і розширювати його.

Як використовувати GameConqueror Cheat Engine в Linux
Стаття висвітлює посібник із використання механізму читів GameConqueror в Linux. Багато користувачів, які грають у ігри в Windows, часто використовуют...
Кращі емулятори ігрової консолі для Linux
У цій статті буде перелічено популярне програмне забезпечення для емуляції ігрової консолі, доступне для Linux. Емуляція - це рівень сумісності програ...
Best Linux Distros for Gaming in 2021
The Linux operating system has come a long way from its original, simple, server-based look. This OS has immensely improved in recent years and has no...