Меню
Контакты
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

Скрипт уменьшения скорости пользователей после превышения лимита

 18 Дек 2010    MikroTik, Scripts

Рассмотрим ситуацию: пользователям предоставляется доступ к сети Интернет на скорости 5мбит/c. Нужно уменьшить скорость пользователям, которые превысили лимит в 5000 Мбайт.

Скрипт выглядит так.

:local upload;

:local download;

:local totaltraf;

:local realtraff;

:local limit;

:set limit 5000;

:for y from=2 to=254 do={:local n; :set n "user$y"; :put $n; :set realtraff [/queue simple get "$n" byte]; :set upload [:pick $realtraff 0 ([:find $realtraff "/"]-1)]; :set download [:pick $realtraff ([:find $realtraff "/"]+1) [:len $realtraff]]; :set totaltraf (($upload + $download) / 1048576); :put $totaltraf; :if ($totaltraf >= $limit ) do={ /queue simple set [find name="$n"] max-limit="1M/1M"}}

 

Разбор скрипта.

:local upload;

:local download;

:local totaltraf;

:local realtraff;

:local limit;

:set limit 5000;

Создаются необходимые переменные и переменной «limit» присваивается нужное значение.

  

:for y from=2 to=254 do={:local n; :set n "user$y"; :put $n; :set realtraff [/queue simple get "$n" byte];

Извлекается значение о переданном и полученном трафике и заносится в переменную realtraff.

 

Рис.1. Количество трафика.

 

Значение трафика отображается в таком виде: 54634544/4543543. Левая часть – upload, правая – download. Для работы нам нужно получить целые числа.

 

:set upload [:pick $realtraff 0 ([:find $realtraff "/"]-1)];

:set download [:pick $realtraff ([:find $realtraff "/"]+1) [:len $realtraff]];

:set totaltraf (($upload + $download) / 1048576);

Складываем оба значения, переводим в мегабайты, и заносим в переменную totaltraf.

 

:if ($totaltraf >= $limit ) do={ /queue simple set [find name="$n"] max-limit="1M/1M"}

Производим сравнение. Если суммарный трафик равен или превышает лимит, то уменьшаем скорость для этого пользователя до 1-го Мбит/c.

 

Рис.2. Mikrotik RouteBoard RB493AH System Scheduler.

 

Переходим в планировщик System Scheduler.

 

Рис.3. Добавляем новый скрипт.

 

Добавляем скрипт в планировщик и выставляем интервал, через который будет срабатывать этот скрипт.

 

Рис.4. Работа скрипта.

 

У user110 явный перебор. Поэтому скрипт ограничил скорость только для этого пользователя. Нужно будет создать еще один скрипт, который будет выполняться один раз в сутки, обнулять статистику и возвращать правилам исходные значения.

 

Евгений Рудченко специально для asp24