Вопрос или проблема
У меня есть проект на уме:
Недавно я установил 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 план требует осторожного использования.
Подходы к обнаружению типа соединения
-
Пинг и отслеживание маршрута (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
- Запускать
-
HTTP-запросы
Измерение скорости интернет-соединения — еще один способ. Вы можете использовать такие библиотеки, как
requests
(для Python), чтобы выполнять регулярные запросы к API (например, speedtest.net). Определите, насколько быстро происходит отклик, и в зависимости от этого делайте вывод о типе соединения. Заметьте, что сотовое соединение будет медленнее, чем кабельное. -
Использование SNMP (Simple Network Management Protocol)
Если ваши роутеры поддерживают SNMP, вы можете получить данные о соединении напрямую. SNMP позволяет запрашивать информацию о сертификации и типе соединения, а также достигать других статистических данных. Это более сложный, но эффективный метод.
-
Модуль для мониторинга
Многие библиотеки в 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
Уведомления
Для уведомлений вы можете использовать различные подходы:
-
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)
-
Звуковые или визуальные уведомления: Используйте библиотеки для создания звуковых или визуальных уведомлений (например,
playsound
илиtkinter
для GUI).
Заключение
Выбор метода определения типа соединения может зависеть от ваших технических возможностей и предпочтений. Используйте описанные подходы для успешного мониторинга интернет-соединения и получения уведомлений. Ключевым моментом является внедрение механизма, который позволит вам минимизировать использование резервного соединения, оптимизируя работу вашего офиса и экономя средства.
Обеспечьте своего рода "дополнительный набор инструментов" для контроля, который позволит вашей команде сосредоточиться на более важных задачах, нежели управлении интернет-соединениями.