/Klyopa

API : internet connection test script, based on technologies OOKLA.

Primary LanguagePythonMIT LicenseMIT

                                       -.  --
                                      -      :     -= Klyopa =-
                                     -        :.   
                                     -         :    
                                    .          .-     Тестирование
         :.   -:.                  -.          .:  Интернет соединения
         :       :.                :            :
         :.        .-             -   -        - :
          :          .-  .-::....  ....:.:    -- -
          -.         - -..             .:--.-.:  -
           -.        :.                  ...:-- -.
            -       .-.           :*-..:. ..   ..
            ..     ..:            +: . -.  .  .
            ..   -::* :*::        ....-:-  .. -
             --  .-:.: -.:-                ..:     Сервис предоставляется
               -: .....-.   -  .:          ..-           OKKLA
                 -:-:-      .. -      -.  :..:      www.speedtest.net
                     .-.      ..      ..::. .-
                      .--     .:..... -..    -
                        :.----.     .--
                       -.     .-:::-.

1. Установка и использование

Скрипт написан на python v.3. Вы можете использовать скрипт на любой операционной системе через интерпретатор python3.

1.1 Использование в среде Linux

  • убедитесь в доступности python3
  • рекомендуется разворачивать скрипт в виртуальном окружении python python3 -m venv _имя_вашего_окружения
  • скачайте код по ссылке, распакуйте его
  • из под активированного виртуального окружения установите зависимости через pip

pip install -r requirements.txt

  • запустите скрипт

python main.py

1.2 Использование в среде Windows

Для удобства пользователей Windows, скрипт и все зависимости упакованы в один exe файл. Для запуска скачайте файл zip из папки Windows данного репозитория, распакуйте zip и запустите файл exe. Дополнительно никаких зависимостей устанавливать не надо. При этом, в файл exe пакуется только стабильная версия.

В некоторых случаях под Windows, после запуска скрипта закрывается окно консоли. Во избежание данной ошибки запустите start.cmd из архива. Вы можете изменять start.cmd путем добавления/удаления символов :: для выбора той или иной команды.

1.3 ВАЖНО:

В одном из тестов (п.2.1) описывается необходимость запуска скрипта с правами Администратора. В любой операционной системе, если вы запускаете скрипт через интерпретатор python3, то виртуальное окружение также должно быть активированно из под учетной записи Администратора.
Остальные тесты работают из под пользовательской среды.

2. Описание и порядок работы

Первоначальная задача скрипта - получить более/менее объективные результаты тестирования Интернет соединения с возможностью распределния по направлениям и по времени (например, с помощью планировщика задач), и, главное, без участия пользователя.

Сценарии использования различны:

  • косвенный показатель качества услуг доступа в Интернет в корпоративных средах при приемке канала связи в эксплуатацию;
  • периодический мониторинг качества предоставляемой услуги;
  • сравнение предложений различных провайдеров;
  • оценка "последней мили" и/или конретного направления.

Сервис тестирования Интернет соединения основан на технологиях OKKLA. Скрипт прорабатывает следующие шаги:

  • определение текущего IP адреса, имени провайдера связи и локацию;
  • определение наилучшего сервера и проведение теста (алгоритм OKKLA);
  • определение списка ближайших серверов и проведение тестов (алгоритм OKKLA);
  • тесты co случайно выбранными серверами текущей локации;
  • тесты co случайно выбранными серверами по всему миру;
  • генерация отчета в консоли и локального файла report_дата+время.html.

ВАЖНО: скрипт работает только с прямым Интернет-соединением, нет поддержки прокси-серверов

2.1 Тестирование узла провайдера icmp запросами (ping).

Добавлена возможность тестирования узла провайдера icmp запросами. Таким образом, приходит понимание качества "последней мили". Для запуска ping в направлении узла оператора необходимо воспользоваться аргументами командной строки.

ВАЖНО: для проведения icmp тестов скрипт необходимо запускать с правами Администратора (root)

Доступные аргументы:

  • --help - справка
  • --node - указываем имя или ip адрес узла провайдера, который тестируем, например:

--node ttk.ru или --node 8.8.8.8

  • --number_of_tests - количество icmp пакетов для проведения теста (по умолчанию 10000 пакетов), примеры:

--number_of_tests 100

  • --packet_size - размер icmp пакета в байтах (по умолчанию 996 байт). Для совместимости с различными операционными системами действиует ограничение на максимальный размер пакета в 996 байт. Примеры:

--packet_size 64

  • --server_mode - режим сервера speedtest (не реализовано)

  • --ratio_of_global_tests - коэффициент количества глобальных тестов скорости Интернет соединения (по умолчанию 3).

    Подробнее: данный аргумент относится к основному функционалу тестирования Интернет соединения. В алгоритме скрипта заложенны тесты co случайно выбранными серверами текущей локации и всего мира. При проведении таких тестов, минимум тестируется три случайных сервера по текущей локации (ближайший, средней удаленности и территориально удаленный сервер) и три аналогичных сервера по всему миру. Итого 3+3=6 тестов. Данный аргумент позволяет увеличить количество выбранных серверов для тестов. Например:

    --ratio_of_global_tests 2 - увеличивает количество серверов для тестов в два раза (3 * 2 + 3 * 2 = 12)

    --ratio_of_global_tests 3 - это значение по умолчанию, всего тестов с 18-ю серверами (3 * 3 + 3 * 3 = 18)

Примеры командных строк:

  • через интерпретатор python3 main.py --node ttk.ru --number_of_tests 1000 --packet_size 64 --ratio_of_global_tests 1

Тестируем ttk.ru 1000-ю icmp пакетами размером по 64 байта. Глобальных тестов скорости - 6 шт.

  • через exe-файл (windows) main.exe --node 8.8.8.8 --ratio_of_global_tests 5

Тестируем ip 8.8.8.8, количество пакетов 10000 (значение по умолчанию), размер пакетов 996 байт (значение по умолчанию). Количество глобальных тестов скорости - 30 шт.

Результаты icmp тестов консолидируются в таблицу. Таблица попадает в report.html, а также отображается в консоли.

3. Реализованые проверки на ошибки.

Следующие тесты были включены в тело скрипта:

  • наличие Интернет соединения (проверяется доступ к google.com)
  • наличие прав Администратора (root) при icmp тестах
  • проверка доступности узла провайдера для icmp тестирования посредством DNS
  • ограничено значение ratio_of_global_tests от 1 до 10 (от 6 до 60 тестов, соответвенно)
  • проверка размера icmp пакета от 1 до 996 байт
  • ограничено значение number_of_tests от 1 до 10000 пакетов

TODO

  • отчет, что ещё добавить?
  • улучшить алгоритм определения территориально удаленных серверов (сейчас это основано на OKKLA с сильной погрешностью)
  • проправить баг завершения работы скрипта в случае ошибки (только версия для windows)