Python

Скрипт Python для мониторинга сетевого подключения

Скрипт Python для мониторинга сетевого подключения
Потребность в том, чтобы наши устройства всегда были подключены к Интернету, становится больше основной потребностью, чем дополнительной привилегией.

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

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

Требования к проекту

Для этого проекта нам понадобятся только:

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

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

Что такое время работы и простоя сети?

Когда мы говорим о работоспособности и простоях сети, мы имеем в виду период, когда сетевое соединение полностью недоступно, и, следовательно, мы не можем общаться с устройствами за пределами нашей сети. Чем дольше нет интернета, тем дольше время простоя.

Как определить время простоя

Теперь, когда мы знаем, что такое простои в Интернете, вы, возможно, задаетесь вопросом: «Как мы можем это определить??”

Не усложняя наш код, мы можем использовать ping. Пинг - это метод, при котором мы постоянно пингуем надежный сервер, например Cloudflare или Google DNS, а затем ждем ответа.

Если мы пингуем сервер и нет ответа, мы отмечаем это конкретное время и продолжаем пинговать, пока не получим пинг, и не отметим время.

Имея разницу во времени, мы можем определить, когда Интернет не работал и как долго.

Мы также должны быть осторожны при пинге одного сервера, потому что мы можем ошибочно принять пинг за DDoS-атаку, что может привести к блокировке нашего IP-адреса, что приведет к отрицательным результатам.

Вот блок-схема, объясняющая эту концепцию:

Обсуждение дешево; Давайте теперь погрузимся в код, показывающий, как реализовать эту логику:

Теперь покажи мне код

Как обычно, в Python мы начинаем с импорта необходимых библиотек. Далее мы создаем файл журнала в текущем рабочем каталоге.

Мы используем библиотеку сокетов для отправки запроса на внешний IP-адрес в первой функции. В этом примере мы используем общедоступный DNS-адрес Cloudflare, который имеет очень высокое время безотказной работы. Мы также передаем порт, и, поскольку это DNS-сервер, используем порт 53.

Затем мы проверяем, что у нас есть доступ к каталогу файла журнала, и выходим, если у нас нет доступа.

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

импортный сокет
время импорта
дата и время импорта
импорт ОС
import 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 как ошибки:
вернуть ложь
еще:
s.Закрыть()
вернуть True
def write_permission_check ():
пытаться:
с открытым (ФАЙЛ, "a") как файл:
проходить
кроме OSError как ошибки:
print ("Ошибка создания файла журнала")
sys.выход()
наконец-то:
проходить
def calculate_time (начало, остановка):
time_difference = stop - начать
секунды = с плавающей запятой (str (time_difference.total_seconds ()))
return str (datetime.timedelta (секунды = секунды)).расколоть(".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = datetime.дата и время.сейчас()
motd = "Мониторинг сетевого подключения начат в:" + str (monitor_start_time).расколоть(".") [0] +" Отправка запроса ping через "+ str (ping_freq) +" секунды "
печать (motd)
с открытым (ФАЙЛ, "a") как файл:
файл.написать ("\ n")
файл.написать (motd + "\ n")
в то время как True:
если send_ping_request ():
время.спать (ping_freq)
еще:
down_time = datetime.дата и время.сейчас()
fail_msg = "Сетевое соединение недоступно в:" + str (время простоя).расколоть(".") [0]
печать (fail_msg)
с открытым (ФАЙЛ, "a") как файл:
файл.написать (fail_msg + "\ n")
я = 0
пока не send_ping_request ():
время.спать (1)
я + = 1
если i> = 3600:
я = 0
сейчас = дата и время.дата и время.сейчас()
Continous_message = "Постоянная недоступность сети:" + str (сейчас).расколоть(".") [0]
печать (Continous_message)
с открытым (ФАЙЛ, "a") как файл:
файл.написать (Continous_message + "\ n")
up_time = datetime.дата и время.сейчас()
uptime_message = "Сетевое подключение восстановлено в:" + str (up_time).расколоть(".") [0]
down_time = calculate_time (время простоя, время работы)
_m = "Сетевое соединение было недоступно в течение" + время простоя
печать (uptime_message)
печать (_m)
с открытым (ФАЙЛ, "a") как файл:
файл.написать (uptime_message + "\ n")
файл.написать (_m + "\ n")
mon_net_connection ()

Если вы запустите этот сценарий, вы получите результат, аналогичный показанному ниже:

Заключение

Используя приведенный выше сценарий, мы можем отслеживать, когда сетевое соединение потеряно, и постоянно регистрировать его, пока оно не станет доступным. Этот простой скрипт открыт для улучшений. Не стесняйтесь изменять код под свои нужды и расширять его.

Обзор беспроводной мыши Microsoft Sculpt Touch
Я недавно прочитал о Microsoft Sculpt Touch беспроводная мышь и решил ее купить. Побывав некоторое время, я решил поделиться своим опытом с ним. Эта б...
Экранный трекпад и указатель мыши AppyMouse для планшетов с Windows
Пользователи планшетов часто пропускают указатель мыши, особенно когда они привыкли пользоваться ноутбуками. Смартфоны и планшеты с сенсорным экраном ...
Средняя кнопка мыши не работает в Windows 10
В средняя кнопка мыши помогает пролистывать длинные веб-страницы и экраны с большим объемом данных. Если это прекратится, вы в конечном итоге будете и...