Обнаружение интернет-соединения за роутером: Кабель vs. Сотовая связь (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 или подобного скриптового языка.

Спасибо за ваши идеи.

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

Для решения вашей задачи по определению типа интернет-соединения (кабельного или сотового) в условиях использования резервного маршрутизатора 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 могут помочь вам создать надежное решение. Попробуйте различные методы и выберите тот, который лучше всего подходит для ваших нужд. Удачи в вашем проекте!

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

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