Вопрос или проблема
У меня есть проект на уме:
Я недавно установил 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 или подобного скриптового языка.
Спасибо за ваши идеи.
Ответ или решение
Для решения вашей задачи по определению типа интернет-соединения (кабельного или сотового) в условиях использования резервного маршрутизатора 5G Xiaomi, необходимо учитывать несколько подходов и технологий. Вам потребуется создать инструмент, который будет постоянно мониторить текущее состояние соединения и уведомлять вас о переключении между основным и резервным интернет-соединениями.
1. Определение типа соединения
Существует несколько способов обнаружения использования сотовой связи или кабельного соединения:
a. Использование traceroute
Команда traceroute
(или tracert
в Windows) позволяет отследить маршрут пакетов до удаленного хоста. Обычно, маршруты для мобильной связи имеют большую задержку и могут включать определенные узлы, уникальные для сотовых провайдеров. Однако, этот метод не всегда надежен, поскольку IP-адреса могут меняться, и результаты могут быть непостоянными.
b. Проверка IP-адреса
Можно написать скрипт, который будет проверять ваш текущий внешний IP-адрес. Если ваш основной интернет провайдер и сотовый провайдер имеют известные диапазоны IP-адресов, вы можете создать список этих диапазонов и сравнивать свой IP-адрес с ними. Если он попадает в диапазон сотового провайдера, значит, вы используете 5G-соединение.
c. Мониторинг скорости и задержки
Сравнение скорости и задержки соединения может также помочь определить тип соединения. Сотовая связь обычно имеет более высокую задержку и меньшую скорость по сравнению с кабельным соединением. Вы можете периодически запускать тест скорости интернет-соединения (например, с помощью библиотеки типа speedtest-cli
в Python) и сравнивать результаты с пороговыми значениями, характерными для вашего основного соединения.
2. Реализация на Python
Ваша идея о написании инструмента на Python вполне разумна. Вот простой пример кода, который может помочь вам начать:
import os
import time
import requests
# Функция для проверки IP-адреса
def get_external_ip():
response = requests.get("https://api.ipify.org?format=json")
return response.json()['ip']
# Функция для измерения задержки
def ping_test(host):
response = os.system(f"ping -c 1 {host}")
return response == 0
def main():
known_cable_ip_ranges = ['192.168.1.0/24'] # Здесь добавьте диапазоны ваших IP-адресов
known_cell_ip_ranges = ['10.0.0.0/8'] # Пример диапазона для сотового провайдера
check_interval = 5 # Интервал проверки в секундах
while True:
external_ip = get_external_ip()
print(f"Current IP: {external_ip}")
# Проверка, какой тип соединения используется:
if external_ip_in_ranges(external_ip, known_cell_ip_ranges):
print("Используется 5G соединение.")
# Здесь можно добавить уведомления
else:
print("Используется кабельное соединение.")
time.sleep(check_interval)
def external_ip_in_ranges(ip, ranges):
# Здесь нужно реализовать проверку IP-адреса на принадлежность к диапазону
return any(ip_in_range(ip, r) for r in ranges)
def ip_in_range(ip, range):
# Реализуйте эту функцию для проверки диапазонов IP
pass
if __name__ == "__main__":
main()
3. Уведомления
Для уведомлений о смене соединения вы можете использовать библиотеки, такие как notify2
(для визуальных уведомлений) или отправку email с помощью smtplib
. Это поможет вам быстро реагировать на смену соединения и оптимизировать использование вашего резервного интернет-канала.
Заключение
Хотя ваша задача требует некоторой технической реализации, существующие инструменты и библиотеки в Python могут помочь вам создать надежное решение. Попробуйте различные методы и выберите тот, который лучше всего подходит для ваших нужд. Удачи в вашем проекте!