Обнаружение интернет-соединения за роутером: Кабельное соединение против сотового (4G/5G)

Вопрос или проблема

У меня есть проект на уме:

Недавно я установил 5G маршрутизатор в своем офисе, чтобы использовать его в качестве резервного источника интернета на случай сбоев основного/кабельного интернета. Резервный маршрутизатор Xiaomi 5G CPE работает хорошо и может активировать резервную интернет-линию за считанные секунды (примерно 2-3 секунды).

Моя проблема заключается в том, что резервная сотовая линия является лимитированной, менее быстрой и менее надежной. Поэтому я хочу использовать ее как можно реже. Мне нужно получать уведомления, когда мой офис работает через резервное интернет-соединение.

Проблема с маршрутизатором Xiaomi 5G CPE в том, что хотя он быстро переключается на резервный интернет, он не уведомляет меня о переключении.

Я подумал, что программирую небольшой инструмент, который будет постоянно мониторить мое интернет-соединение (например, с интервалом в 1 секунду). Когда он регистрирует, что я использую сотовое соединение, я получаю уведомление (по электронной почте/звуковое/визуальное уведомление…).

Однако мне нужно знать, есть ли способ определить, использует ли моя сеть проводное или сотовое соединение. Как основной кабельный модем/маршрутизатор, так и резервный маршрутизатор Xiaomi 5G CPE подключены к одному и тому же WAN порту за моим офисным маршрутизатором: к моему домашнему маршрутизатору Ubuntu EdgeRouter сначала подключен маршрутизатор Xiaomi 5G CPE, к которому затем подключен кабельный модем/маршрутизатор.

У вас есть идеи, как это можно определить? Может быть, анализируя “traceroute” переходы? Есть ли какой-то лучший способ? Знаете ли вы о какой-либо библиотеке, которая могла бы надежно сообщать мне, подключен ли мой офис через кабель или сотовое соединение?

Несмотря на то, что я довольно хорошо владею C#, PowerShell, JavaScript, PHP и т.д., решение должно быть простым, но надежным. Возможно, стоит использовать Python или аналогичный скриптовый язык.

Ответ или решение

Обнаружение интернет-соединения за роутером: Кабельное соединение против Cellular (4G/5G)

Установка резервного роутера 5G в вашем офисе — это шаг к повышению надежности интернет-соединения, однако проблема в отсутствии уведомлений о переключении между основным (кабельным) и резервным (сотовым) соединением требует решения. В этом ответе я предложу несколько методов для мониторинга вашего интернет-соединения и информирования о его состоянии, а также краткий обзор инструментов, которые вы можете использовать.

Задача мониторинга интернет-соединения

Ваш проект по созданию инструмента для мониторинга интернет-соединения вполне осуществим, особенно учитывая, что основное внимание уделяется различиям между кабельным и сотовым internet-соединениями. Резервирование 5G соединения является хорошим подходом для предотвращения даунтаймов, но его метered план требует осторожного использования.

Подходы к обнаружению типа соединения

  1. Пинг и отслеживание маршрута (Traceroute)

    Один из наиболее простых подходов — использовать утилиты, такие как ping и traceroute, для получения информации о маршруте и времени отклика. Код, который вы разрабатываете, может выполнять следующие действия:

    • Запускать ping на известный адрес (например, Google DNS 8.8.8.8) и измерять время отклика.
    • Запускать traceroute на тот же адрес. Вы можете проанализировать hops (прыжки) в пути: если у вас несколько hops, которые проходят через IP-адреса, относящиеся к вашему провайдеру мобильной связи, это может свидетельствовать о том, что вы используете сотовую сеть.

    Пример использования traceroute в Python:

    import subprocess
    
    def check_connection():
       try:
           output = subprocess.check_output(['traceroute', '8.8.8.8']).decode()
           if 'your_mobile_provider_ip' in output:
               return "cellular"
           else:
               return "cable"
       except Exception as e:
           print(f"An error occurred: {e}")
           return None
  2. HTTP-запросы

    Измерение скорости интернет-соединения — еще один способ. Вы можете использовать такие библиотеки, как requests (для Python), чтобы выполнять регулярные запросы к API (например, speedtest.net). Определите, насколько быстро происходит отклик, и в зависимости от этого делайте вывод о типе соединения. Заметьте, что сотовое соединение будет медленнее, чем кабельное.

  3. Использование SNMP (Simple Network Management Protocol)

    Если ваши роутеры поддерживают SNMP, вы можете получить данные о соединении напрямую. SNMP позволяет запрашивать информацию о сертификации и типе соединения, а также достигать других статистических данных. Это более сложный, но эффективный метод.

  4. Модуль для мониторинга

    Многие библиотеки в Python, такие как psutil, могут предоставить информацию о сетевых интерфейсах и их статусе. Используя их, вы можете определить, какой интерфейс активно используется.

    Пример кода:

    import psutil
    
    def get_active_connection_type():
       net_if = psutil.net_if_addrs()
       for interface in net_if:
           if 'eth0' in interface:  # Кабельное соединение
               return "cable"
           elif 'wwan0' in interface:  # Сотовое соединение
               return "cellular"
       return None

Уведомления

Для уведомлений вы можете использовать различные подходы:

  1. Email-уведомления: библиотеки, такие как smtplib в Python, позволяют отправлять письма на ваш адрес в случае переключения на сотовую сеть.

    Пример:

    import smtplib
    from email.mime.text import MIMEText
    
    def send_email_notification():
       msg = MIMEText('Переход на сотовое соединение!')
       msg['Subject'] = 'Уведомление о соединении'
       msg['From'] = 'your_email@gmail.com'
       msg['To'] = 'your_email@gmail.com'
       with smtplib.SMTP('smtp.gmail.com', 587) as server:
           server.starttls()
           server.login('your_email@gmail.com', 'your_password')
           server.send_message(msg)
  2. Звуковые или визуальные уведомления: Используйте библиотеки для создания звуковых или визуальных уведомлений (например, playsound или tkinter для GUI).

Заключение

Выбор метода определения типа соединения может зависеть от ваших технических возможностей и предпочтений. Используйте описанные подходы для успешного мониторинга интернет-соединения и получения уведомлений. Ключевым моментом является внедрение механизма, который позволит вам минимизировать использование резервного соединения, оптимизируя работу вашего офиса и экономя средства.

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

Оцените материал
Добавить комментарий

Капча загружается...