Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Статистика WAN-трафика по IP

    Статистика WAN-трафика по IP

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Статистика WAN-трафика по IP, RouterOS
     
    anserk
    Guest
    #1
    0
    12.05.2022 22:14:00
    Делюсь скриптом, который я написал для отслеживания ежемесячной статистики WAN-трафика по IP (на самом деле по MAC). Скрипт считывает счётчики трафика из Kid Control, сохраняет их в JSON-файл и генерирует HTML-отчёт. Если вам нужна только общая статистика по WAN, без детализации по IP, загляните в другой мой скрипт: https://forum.mikrotik.com/viewtopic.php?t=216546

    Ключевые особенности  
    Всё работает локально на роутере. Не нужны никакие внешние серверы или программы для сбора данных. Для просмотра отчёта нужен только компьютер.  
    Лучше всего использовать с USB-флешкой, чтобы не беспокоиться о количестве циклов записи.  
    Если ваше устройство не поддерживает внешнее хранение, можно запускать скрипт реже, но тогда при неожиданных перезагрузках будет больше потерь данных.  
    Обнаруживает ручной сброс счётчиков трафика, если значения Rx стали меньше ранее сохранённых. Если вы планируете сброс, просто запустите скрипт вручную до и после сброса — так сохранится максимальная точность.  
    Использует функционал Kid Control в RouterOS, который даёт приятный бонус — учёт трафика по IP.

    Ограничения  
    Требуется RouterOS версии 7.18.2 и выше, это важно, так как используются новые возможности скриптинга.  
    Kid Control считает весь маршрутизируемый трафик, а не только WAN (например, трафик между VLAN).  
    Теоретически можно переписать скрипт и использовать что-то вроде viewtopic.php?t=168427 вместо Kid Control.  
    RouterOS не поддерживает числа с плавающей точкой, поэтому точность отчёта ±1 ГБ. Вычисления и сохранение ведутся в байтах без повторных округлений. Округление (точнее усечение) происходит только в финальном отчёте.  
    Перезагрузки определяются при помощи файла-маркера в корневой папке, которая на многих устройствах размещена в RAM/tmpfs; если на устройстве нет RAM-диска по умолчанию, создайте свой и укажите путь к файлу. Для максимальной точности запускайте скрипт перед ручной перезагрузкой, чтобы сохранить данные.

    Как использовать  
    Настройте Kid Control для отслеживания трафика. В конфигурации ниже ничего не ограничивается, только включается учёт:  
    /ip kid-control add name=Monitor mon=0s-1d tue=0s-1d wed=0s-1d thu=0s-1d fri=0s-1d sat=0s-1d sun=0s-1d

    Установите и отформатируйте USB-накопитель.  
    Загрузите предоставленный rsc-скрипт на USB (например, через WinBox — Файлы).

    Запланируйте запуск скрипта каждый час (или с нужной вам периодичностью) в 59:59 минуты каждого часа:  
    /system scheduler  
    add interval=1h name=traffic on-event="/import usb1-part1/traffic_per_mac.rsc" policy=read,write,sensitive start-date=2025-04-10 start-time=20:59:59

    Вот как выглядит отчёт:  


    Редактирование поста 2025-04-29: переписанный скрипт traffic_per_mac.rsc (5.72 КБ)
     
     
     
    holvoetn
    Guest
    #2
    0
    23.07.2022 08:52:00
    @anserk, просто маленький привет! Я использую твой скрипт на устройстве SXT, которое обеспечивает интернет в загородном доме. Гораздо удобнее, чем просто отправлять на почту статистику с устройств kid-control.
     
     
     
    bpwl
    Guest
    #3
    0
    23.07.2022 11:39:00
    Очень интересная функция kid-control. Заменяет “IP accounting”? Спасибо за скрипт! Как получить аутентифицированного пользователя (RADIUS) в этот список устройств Kid-Control? (Wi-Fi AP аутентифицируется через WPA2/Enterprise, значение имени пользователя можно скопировать в атрибут “MT Comment” RADIUS с помощью User Manager 5, и оно остается видимым в таблице регистрации, пока устройство подключено. DUDE собирает во “RouterOS Info” все таблицы регистрации, включая поле комментария.) Имя пользователя/пароль сохраняются на клиентском устройстве и повторно не вводятся для того же SSID. Значит, это можно считать автоматическим RSSO (Radius Single Sign-On). Но как заставить Kid-control или Hotspot распознать этот вход?
     
     
     
    anserk
    Guest
    #4
    0
    23.07.2022 18:45:00
    Если вы скачали скрипт до 23 июля 2022 года, обновите строку 35 с  
    :local ip [get $device ip-address]
    на  
    :local ip [:tostr [get $device ip-address]]

    Недавно столкнулся с проблемой переполнения счётчика трафика в отчёте, из-за чего все статистические данные съезжали. Оказалось, что когда у устройства несколько IP-адресов, скрипт брал неправильные поля для счётчиков трафика. Проблема решается принудительным преобразованием всего поля IP в строку.

    @bpwl Я никогда не пользовался RADIUS — разве у аутентифицированного пользователя устройство не получает IP от DHCP-сервера? Точно не знаю, как работает kid-control внутри, кажется, он просто отслеживает устройства по MAC-адресу. Видимо, учитывает всё, что проходит через фаервол, поэтому считает трафик даже между локальными VLAN. Так что пока пользователь что-то отправляет — он в списке.

    Сложность в том, чтобы понять, кто есть кто. Если устройство не зарегистрировало имя в DHCP-сервере, показываются только MAC и IP. А у многих телефонов (например, Apple) MAC-адрес периодически меняется, и тогда точно определить все устройства становится невозможно. Так что kid-control — довольно ограниченная функция, но хорошо работает в простых конфигурациях с примерно постоянным числом устройств.
     
     
     
    bpwl
    Guest
    #5
    0
    23.07.2022 21:29:00
    Самая сложная часть — точно определить, кто есть кто. Вот почему я использую RADIUS с аутентификацией wifi через EAP/PEAP (= имя пользователя/пароль). Данные сохраняются в устройстве один раз (пока не “забудешь” эту wifi-сеть в списке известных). Ограничения идут уже на пользователя. Логин через Hotspot работает примерно так же, но там много приложений — основное использование, а всплывающее окно браузера для входа иногда просто пропускают. А куки Hotspot нужны лишь для того, чтобы не вводить данные каждый раз для одного и того же MAC-адреса. Как бы они ни игрались с приватными MAC-адресами, идентификация пользователя через EAP/PEAP зависит только от сохранённых учётных данных.

    Учёт трафика RADIUS собирает по пользователям, но обычно это весь (wifi)трафик, а интересует в основном только WAN. RADIUS может выделить пользователю определённый диапазон IP-адресов. Но если у тебя несколько сетевых сегментов (например, VLAN), то ситуация усложняется. RADIUS может ещё и привязать пользователя к конкретному VLAN.

    RADIUS можно использовать для VPN, DHCP, Hotspot, wifi и других сервисов. Но, насколько я знаю, только wifi подключение остаётся постоянным. Устройство подключается под этим пользователем без всякого вмешательства, даже если хозяина не было рядом больше года, и даже если у него при этом другой приватный MAC-адрес.
     
     
     
    holvoetn
    Guest
    #6
    0
    23.07.2022 21:32:00
    Я бы подумал, что если из части Radius можно получить такую же информацию (включая имя пользователя), то концепция скрипта всё ещё применима.
     
     
     
    bpwl
    Guest
    #7
    0
    25.07.2022 08:53:00
    RADIUS сам по себе тут особенный случай. Аутентифицировано ли какое-то устройство под конкретным пользователем или IP-адресом? Сложно сказать. Аутентификация по RADIUS — это событие, которое в лучшем случае фиксируется в логе с именем пользователя и MAC-адресом точки доступа (не клиента, а точки доступа), по моему опыту. Деаутентификация в большинстве случаев не затрагивает RADIUS-сервер. (Есть CoA, но чаще всего Wi-Fi просто отключается, “reason=3” со стороны AP, “reason=8” у клиента при роуминге, значительные потери данных — клиент пропал или вышел из зоны?) Поэтому аутентификатор RADIUS не может понять, авторизован ли пользователь сейчас, и не имеет IP-адрес клиента. Точка доступа поддерживает регистрацию по MAC-адресу, но не регистрирует пользователя, использованного для аутентификации. О том, что произошло отключение, RADIUS узнаёт через учётные записи (accounting) — имя пользователя, IP-адрес, MAC-адрес, использованный трафик. Но иногда записи учёта пропускаются. На самом деле я использую старый MT User Manager для сбора RADIUS-учёта, даже если аутентификацию выполняет другой RADIUS-сервер. Причина в том, что MT ограничивает количество учтённых сессий до 19 при лицензии L4. Обновления учёта настроены примерно на каждые 10 минут. Аутентификация по RADIUS — это централизованное событие для нескольких точек доступа, и число активных сессий обычно превышает 19. Даже лицензия L5 позволяет максимум 50 сессий. У меня 10 000 аутентификаций RADIUS в день от 40 именованных пользователей и 100 клиентских устройств на 34 MT AP. В этом большом районе площадью 1 км² много роуминга, в том числе между диапазонами 2.4 и 5 ГГц на одной точке доступа. (Шумные дети, смена помещений, улица/дом и так далее.) Роуминг может происходить каждые несколько секунд и длится долю секунды. Но у стабильных клиентов соединения остаются активными несколько дней подряд. DHCP-аренда в этом случае не мешает — роуминг не обновляет аренду. Время аренды 24 часа, большинство устройств сохраняют один и тот же IP на весь период отпуска. Вся информация есть, но она не связана между собой. DUDE собирает логи с RADIUS-сервера (не MT), DHCP-сервера (не MT) и точек доступа MT. MT User Manager может отслеживать только 19 активных сессий с лицензией L4 через RADIUS-учёт.
     
     
     
    anserk
    Guest
    #8
    0
    12.08.2022 20:00:00
    Я столкнулся с ещё одной ошибкой в скрипте. Одно устройство, которое появилось в kid-control, не имело IP-адреса. Это пустое поле ломало отчёт. Я добавил исправление в приложенный выше скрипт. Там всего одна новая строка:  
    if ([:len $name] = 0) do={ :set $name "unknown" }
    :local ip [:tostr [get $device ip-address]]
    :if ([:len $ip] = 0) do={ :set $ip "no-ip" } <== новая строка
    :local down [get $device bytes-down]
    :local up [get $device bytes-up]
     
     
     
    Dt17
    Guest
    #9
    0
    03.01.2023 06:54:00
    Привет, твой скрипт работает отлично, и я очень благодарен за этот инструмент. Похоже, я немного запутался с некоторыми старыми отчётами, переместив их до последнего дня месяца. Можно ли как-то сгенерировать отчёт со всеми старыми исходными данными? (в формате Txt и чтобы их всё ещё можно было просмотреть в Kid Control). Я не очень разбираюсь в Google Charts.
     
     
     
    anserk
    Guest
    #10
    0
    04.01.2023 20:48:00
    Скрипт использует текущую дату для создания имен txt-файлов, которые затем используются для генерации отчёта. Можно сделать копию скрипта и изменить строку: :local sysdate [/system/clock/get date] На статическую дату за прошлый месяц. Формат — jan/04/2023. Что касается Kid Control, данные там сбрасываются каждый раз при запуске скрипта. Так что вы видите только новые данные с момента последнего запуска.
     
     
     
    Dt17
    Guest
    #11
    0
    05.01.2023 07:11:00
    Спасибо, ценю ваш профессионализм и помощь!
     
     
     
    Rox169
    Guest
    #12
    0
    05.01.2023 08:11:00
    MIKROTIK, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, ВНЕДРИТЕ ЭТО!!! ИЛИ ВЕРНИТЕ НАМ УЧЁТ IP!!! ПОЖАЛУЙСТА, ПОЖАЛУЙСТА!
     
     
     
    Dt17
    Guest
    #13
    0
    06.02.2023 07:46:00
    Итак, из 4 устройств Mikrotik (2 x RB3011 и 2 x RB1100AHx4), которые я сейчас использую, у меня работает только 3. Четвёртое (RB1100AHx4) уже последние 3 месяца выдает эту ошибку. Единственный результат, который генерируется в html, показан ниже. Кто-нибудь знает, в чём может быть ошибка? Все устройства работали на ROS 7.6, сейчас обновлены до ROS 7.7.

    <html><head>
    <script src='https://www.gstatic.com/charts/loader.js'></script>
    <script>
    google.charts.load('current', {packages: ['corechart', 'bar']});
    google.charts.setOnLoadCallback(drawMultSeries);

    function drawMultSeries() {
    var data = google.visualization.arrayToDataTable([
    ['Device', 'Download', 'Upload', 'Total'],

    failure: new contents too long
     
     
     
    anserk
    Guest
    #14
    0
    16.02.2023 18:51:00
    Ошибка: new contents too long, похоже, означает, что у вас заканчивается место где-то.
     
     
     
    sebus46
    Guest
    #15
    0
    22.06.2023 17:27:00
    Жаль, что у RB4011 нет USB…
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры