Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • 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
    Динамическое изменение профиля пользователя с помощью скрипта.

    Динамическое изменение профиля пользователя с помощью скрипта.

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Динамическое изменение профиля пользователя с помощью скрипта., RouterOS
     
    zarko
    Guest
    #1
    0
    29.03.2013 14:17:00
    Хочу создать скрипт, который будет менять настройки профиля пользователя после достижения им лимита трафика, например, когда пользователь скачает 20ГБ, переводить его профиль на 128 кбит/с. Мне кажется, это самый простой способ сделать это при входе пользователя в систему. Может, кто-нибудь сможет помочь? #scripting #help
     
     
     
    qiting
    Guest
    #2
    0
    01.05.2013 18:12:00
    Привет, Скот! Я положил это в бокс на логине, но изменений всё равно нет. Я попробовал протестировать с одним тестовым пользователем, которого заранее подготовил, чтобы скачать файл на конкретном сайте с помощью приложения Internet Download Manager. Но скорость передачи, которую я вижу в приложении, остаётся в соответствии с настройками. Не думаю ли ты, что я правильно указываю параметры, чтобы скрипт работал нормально? Как правильно протестировать этот скрипт? Мне он нужен для моего финального проекта в колледже. Извини, если прошу слишком много. Вот мои скриншоты: ~отредактировано~
     
     
     
    zarko
    Guest
    #3
    0
    02.05.2013 15:29:00
    Ну вот, вот вам более зрелый код, который делает следующее:

    - Проверяет скачанную квоту пользователя hotspot, и если она превышает лимит — меняет профиль пользователя на более медленный.
    - Сбрасывает счетчики в первый день месяца.
    - Восстанавливает исходный профиль пользователя hotspot после сброса счетчика.
    - Отправляет почту с информацией каждый день.
    - Ведет журнал действий.

    Может пригодиться кому-нибудь. Работает отлично на 5.23.

    #Download limit 20GB
    :local downquotaGB “20”
    :local slowprofile “free(128/128)”
    :local fastprofile “free(768/128)”

    Не изменяйте ничего ниже этой строки:

    :local counter
    :local currentprofile
    :local datadown
    :local printout “User download before counters reset:\r\n”
    :local name
    :local day

    #Проверяет, является ли это первым днем месяца, и если да, сбрасывает счетчики:
    :if ([:pick [/system clock get date] 4 6]=“01” ) do={
    /ip hotspot user reset-counters
    :set printout “$printout Monthly reset DONE \r\n”
    :log warning “ SCRIPT   -ProfileChecker-   DONE (counters resetted) ”
    } else={
    :log warning “ SCRIPT   -ProfileChecker-   DONE ”
    }

    #Проверяет квоту и профили всех активных пользователей:
    :foreach counter in=[/ip hotspot user find ] do={
    :set datadown ([/ip hotspot user get $counter bytes-out]/1074000000)
    :set currentprofile [/ip hotspot user get $counter profile]
    :set name ([/ip hotspot user get $counter name])
    :if (![/ip hotspot user get $counter disabled]) do={set printout “$printout $name → $datadown GB \r\n”}
    :if (($datadown>=$downquotaGB) and ($currentprofile!=$slowprofile)) do={
    /ip hotspot user set $counter profile=$slowprofile
    :log warning  “ USER $[/ip hotspot user get $counter name] CROSSED LIMIT, PROFILE CHANGED TO $slowprofile ”
    :set printout “$printout USER $name CROSSED LIMIT, PROFILE CHANGED TO $slowprofile \r\n”
    }
    :if (($datadown<$downquotaGB) and ($currentprofile=$slowprofile)) do={
    /ip hotspot user set $counter profile=$fastprofile
    :log warning  “ USER $[/ip hotspot user get $counter name] BELOW LIMIT, PROFILE CHANGED BACK TO $fastprofile ”
    :set printout “$printout USER $name BELOW LIMIT, PROFILE CHANGED BACK TO $fastprofile \r\n”
    }
    }

    #Отправляет почту с информацией о результатах работы скрипта
    /tool e-mail send server=173.194.70.108 port=25 user= xyz@gmail.com password=xxxxxxx from= xyz@gmail.com tls=yes to= xyz@gmail.com subject=ProfileChecker-DONE! body=$printout
     
     
     
    skot
    Guest
    #4
    0
    03.05.2013 16:43:00
    Скрипт специально проверяет лимит, который запросил zarko, 20ГБ: :local maxBytes 21474836480; На твоем скриншоте видно всего 1100,3 киБ, так что лимит не превышен. Для тестирования измени число выше на лимит, который ты превысишь, а затем выйди/войди, чтобы повторно проверить.
     
     
     
    qiting
    Guest
    #5
    0
    06.05.2013 11:46:00
    Привет, Zarko. Спасибо за участие, но скрипт, который мне нужен, только для ограничения hotspot'а. Я пробовал, мне и хотелось поучаствовать, но всё равно не получается.
     
     
     
    qiting
    Guest
    #6
    0
    06.05.2013 12:35:00
    Ограничил квоту в 3 мб: `local maxBytes 3145728;` и многократно тестировал, но ничего не происходит. Это мои настройки . Тестирование до прохождения 3 мб . Тестирование после прохождения 3 мб . Пожалуйста, помогите понять, где неверные настройки. (Сбрасывал счетчики в ip / hotspot reset all counters, но все равно ничего не происходит.)
     
     
     
    skot
    Guest
    #7
    0
    06.05.2013 23:35:00
    Просто чтобы уточнить, что ты хочешь сделать? Изменить Rate Limit для профиля пользователя (вкладка User Profiles) — или — изменить профиль, назначенный пользователю (вкладка Users)? Скрипт был разработан для выполнения первого варианта. Я вижу одну проблему по скриншотам. Первая строка была изменена вот так: :local slowProfile 80k/80k. Из оригинального скрипта тебе нужно было изменить только значения в первых двух строках, а не имена переменных. То есть, это должно выглядеть примерно так: :local newLimit 80k/80k; :local maxBytes 3145728;. Когда пользователь входит в систему, если он достиг значения maxBytes, его назначенный профиль (вкладка User Profiles) изменится, а его Simple Queue тоже. (Ему не будет назначен другой профиль). Я бы протестировал это, заключив весь скрипт в скобки, чтобы переменные :local не выдавали ошибку. Затем измени переменную userStr на существующее имя пользователя. Теперь ты можешь скопировать/вставить скрипт в терминальное окно для тестирования. Ты можешь использовать команду :put для просмотра значений переменных и убедиться, что они делают то, что нужно. Например, :put $bytes покажет тебе значение переменной $bytes. И так далее. { :local newLimit 80k/80k; :local maxBytes 3145728; #:local userStr [:tostr $user]; :local userStr “tes1”; :local ip [/ip hotspot active get [find user=“$userStr”] address]; :local bytes [/ip hotspot user get [find name=“$userStr”] bytes-out]; :put $bytes; :local profile [/ip hotspot user get [find name=“$userStr”] profile]; :local rateLimit [/ip hotspot user profile get [find name=“$userStr”] rate-limit]; :if ($bytes > $maxBytes) do={ :if ($rateLimit != $newLimit) do={ /log info “[DOWNLOAD LIMIT] - $userStr скачал более $maxBytes байт, ограничиваю профиль до $newLimit”; /queue simple set [find target-addresses=“$ip/32”] max-limit=$newLimit limit-at=$newLimit; /ip hotspot user profile set [find name=“$profile”] rate-limit=$newLimit; } } } HTH
     
     
     
    qiting
    Guest
    #8
    0
    07.05.2013 02:01:00
    Соблюдая все правила, вот перевод сообщения:

    С уважением ко всем шотландцам, но я повторил ваш путь, скопировал/вставил ваш скрипт в поле ввода безлимитного профиля пользователя, а затем сбросил все счетчики в простом очереди и пользовательском hotspot hotspot (tes1). Но все равно ничего не происходит, когда я тестирую скачивание данных с сайта hippo.com с приложениями по умолчанию в стандартном браузере (goo * e ch * me). Действительно, в скрипте нет никаких признаков ошибок, но после тестирования изменений не происходит ни в скорости скачивания, ни в скорости, указанной в простом очереди, ни в логах информации. Еще раз прошу прощения за мою наглость с вопросами. Мои студенты-старшекурсники только и изучают скрипты для Mikrotik, поэтому я прикрепляю свои настройки ниже:

    [fadli@MikroTik] > ip hotspot profile print
    Flags: * - default 0
    0 name="default" hotspot-address=0.0.0.0 dns-name="" html-directory=hotspot rate-limit="" http-proxy=0.0.0.0:0 smtp-server=0.0.0.0 login-by=http-chap split-user-domain=no use-radius=no

    1 name="hsprof1" hotspot-address=192.168.1.1 dns-name="" html-directory=hotspot rate-limit="" http-proxy=0.0.0.0:0 smtp-server=0.0.0.0 login-by=http-chap split-user-domain=no use-radius=yes radius-accounting=yes radius-interim-update=received nas-port-type=wireless-802.11 radius-default-domain="" radius-location-id="" radius-location-name="" radius-mac-format=XX:XX:XX:XX:XX:XX

    [fadli@MikroTik] > ip hotspot user profile print
    Flags: * - default 0
    0 name="default" address-pool=pool1 idle-timeout=none keepalive-timeout=2m status-autorefresh=1m shared-users=1 transparent-proxy=no

    1 name="unlimited" idle-timeout=none keepalive-timeout=2m status-autorefresh=1m shared-users=5 on-login={
     :local newLimit 80k/80k;
     :local maxBytes 3145728;

     :local userStr [:tostr $user];
     :local userStr “tes1”;

     :local ip [/ip hotspot active get [find user=“$userStr”] address];
     :local bytes [/ip hotspot user get [find name=“$userStr”] bytes-out];
     :put $bytes;
     :local profile [/ip hotspot user get [find name=“$userStr”] profile];
     :local rateLimit [/ip hotspot user profile get [find name=“$userStr”] rate-limit];

     :if ($bytes > $maxBytes) do={
       :if ($rateLimit != $newLimit) do={
         /log info “[DOWNLOAD LIMIT] - $userStr has exceeded $maxBytes bytes downloaded, limiting profile to $newLimit”;
         /queue simple set [find target-addresses=“$ip/32”] max-limit=$newLimit limit- at=$newLimit;
         /ip hotspot user profile set [find name=“$profile”] rate-limit=$newLimit;
       }
     }
    }

    [fadli@MikroTik] > queue simple print
    Flags: X - disabled, I - invalid, D - dynamic
    0  D name=“hs-” target-addresses=“” interface=wlan parent=none packet-marks=“” direction=both priority=8 queue=hotspot-default/hotspot-default limit-at=0/0 max-limit=0/0 burst-limit=0/0 burst-threshold=0/0 burst-time=0s/0s total-queue=default-small

    07:10:04 wireless,info 20:16:D8:46:F9:35@wlan: connected
    07:10:14 hotspot,info,debug tes1 (192.168.1.12): trying to log in by http-chap
    07:10:14 hotspot,account,info,debug tes1 (192.168.1.12): logged in
    07:13:34 system,info,account user fadli logged in from 192.168.1.12 via winbox
    07:14:52 system,info hotspot user profile slowProfile removed by fadli
    07:14:58 system,info hotspot user tes2 changed by fadli
    07:16:41 system,info,account user fadli logged in from 192.168.1.12 via telnet
    07:25:52 system,info,account user fadli logged out from 192.168.1.12 via winbox
    07:26:03 system,info hotspot user profile unlimited changed by fadli
    07:58:17 system,info,account user fadli logged in from 192.168.1.12 via telnet
    08:02:54 system,info,account user fadli logged out from 192.168.1.12 via winbox
    08:02:54 system,info,account user fadli logged out from 192.168.1.12 via telnet
    08:02:54 system,info,account user fadli logged out from 192.168.1.12 via telnet
    08:02:58 hotspot,info,debug tes1 (192.168.1.12): logged out: user request
    08:03:05 hotspot,info,debug tes1 (192.168.1.12): trying to log in by http-chap
    08:03:07 hotspot,info,debug tes1 (192.168.1.12): login failed: invalid username or password
    08:03:14 hotspot,info,debug tes1 (192.168.1.12): trying to log in by http-chap
    08:03:31 hotspot,account,info,debug tes2 (192.168.1.19): logged in
    08:19:49 system,info,account user fadli logged in from 192.168.1.12 via telnet

    [fadli@MikroTik] /ip pool>> print
    append detail

    0 name="pool1" ranges=192.168.1.11-192.168.1.50
    ip dns print
    interval=1
    servers: 8.8.8.8
    dynamic-servers:
    allow-remote-requests: yes
    max-udp-packet-size: 4096
    cache-size: 2048KiB
    cache-max-ttl: 1w
    cache-used: 66KiB




    пожалуйста, поправьте меня, если я не прав. Я был действительно подавлен этим. Спасибо
     
     
     
    qiting
    Guest
    #9
    0
    09.05.2013 09:30:00
    Я использую RouterOS v5.24. Выбираю первый вариант – изменение лимита скорости профиля. Во вкладке профиля пользователя у меня есть профиль (unlimited) с неограниченной скоростью. Я ввел скрипт в поле логина. Текущий пользователь (tes1) превысил maxBytes(3145728), пользователь (tes1) не ограничивается новым лимитом (80k/80k). Есть какое-то решение, Skot?
     
     
     
    chshahzadnasir
    Guest
    #10
    0
    25.09.2018 10:10:00
    Слушайте, как поменять $maxBytes на лимит в байтах? Ваш скрипт работает на maxBytes. Спасибо заранее! Ваш скрипт работает хорошо, мне нравится! 30 ГБ :local maxBytes 32212254720; :local newProfile "payment"; :local userStr [:tostr $user]; :local bytes [/ip hotspot user get [find name=“$userStr”] bytes-out]; :local profile [/ip hotspot user get [find name=“$userStr”] profile]; :if ($bytes > $maxBytes) do={ :if ($profile != $newProfile) do={ /log info “[DOWNLOAD LIMIT] - $userStr has exceeded $maxBytes bytes downloaded, changing profile”; /ip hotspot user set [find name=“$userStr”] profile=“$newProfile” } }
     
     
     
    qiting
    Guest
    #11
    0
    01.05.2013 09:57:00
    Привет, Скот. Извини за мой плохой английский. У меня та же проблема, как у Зарко. Я пробовал следовать коду, который ты написал, но ничего не происходит. Нужны ли какие-то настройки очереди для этого случая? И если да, то как их настроить? Спасибо.
     
     
     
    skot
    Guest
    #12
    0
    01.05.2013 15:27:00
    Код предназначен конкретно для точки доступа. Вы вводите код в поле "Профиль пользователя точки доступа при входе"?
     
     
     
    qiting
    Guest
    #13
    0
    01.05.2013 17:42:00
    Боже мой, я вписал это в скрипт Mikrotik... извини. Окей, спасибо, Scots. Попробую сначала.
     
     
     
    skot
    Guest
    #14
    0
    08.05.2013 21:03:00
    Какая у тебя версия RouterOS? Какой вариант тебе больше подходит? Изменить Rate Limit профиля для пользователя? (во вкладке User Profiles) - именно так это работает сейчас. Или изменить профиль, который назначен пользователю? (во вкладке Users). Что у тебя во вкладке User Profiles?
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры