Москва+7 (495) 103-4-103
Заказать звонок
  • Заказать звонок
  • Отложить 0 шт.
  • Сравнить 0 шт.
 21 Май 2011    MikroTik, Scripts

У вас может возникнуть необходимость подсчета трафика. Вооружимся языком Python и напишем необходимый скрипт, который подсчитает трафик пользователя и, если нужно лимитировать трафик, выполнит проверку - превышен лимит или нет.

#!/usr/bin/env python

# -*- coding: utf_8 -*-

from paramiko import SSHClient

from paramiko import AutoAddPolicy

mip = '192.168.4.1'

ml = 'admin'

mp = 'admin'

ssh = SSHClient()

ssh.set_missing_host_key_policy(AutoAddPolicy())

ssh.connect(mip, port=22, username=ml, password=mp)

exe = "put [/queue simple get user101 byte]"

excmd2 = ssh.exec_command(exe)[1].read()

ssh.close()

limit = 3000

print excmd2

sp = []

sp = excmd2.split("/")

up = int(sp[0])

down = int(sp[1])

total = (up + down)/1048576

print total

if total >limit:

print "Превышен лимит"

else:

print "Не превышен лимит"

Разбираем скрипт:

Подключаем модули для работы с ssh протоколом:

from paramiko import SSHClient

from paramiko import AutoAddPolicy

Данные для соединения с Mikrotik Routerboard:

mip = '192.168.4.1'

ml = 'admin'

mp = 'admin'

Соединяемся с Mikrotik и извлекаем данные из правила шейпера:

ssh = SSHClient()

ssh.set_missing_host_key_policy(AutoAddPolicy())

ssh.connect(mip, port=22, username=ml, password=mp)

exe = "put [/queue simple get user101 byte]"

excmd2 = ssh.exec_command(exe)[1].read()

ssh.close()

 

 

Рис.1. Список правил шейпера Mikrotik Routerboard.

 

 

Рис.2. Данные о трафике пользователя.

 

limit = 3000 - создаем переменную limit и присваиваем ей значение 3000 мбайт;

sp = []  - создаем пустой список;

Данные извлекутся о входящем и исходящем трафике в таком виде: 672777878/3180111677.

sp = excmd2.split("/") - отделяем входящий и исходящий трафик, значения помещяем в список sp;

up = int(sp[0]) - присваиваем переменной up значение исходящего трафика;

down = int(sp[1]) - присваиваем переменной down значение входящего трафика;

total = (up + down)/1048576 - складываем переменные и переводим в мегабайты;

print total - выводим значение суммарного трафика на экран.

Выполняем проверку, если переменная total больше переменной limit, то выводим сообщение «Превышен лимит», если нет - «Не превышен лимит»

if total > limit:

print "Превышен лимит"

else:

print "Не превышен лимит"

 

 

Рис.3. Выполняем скрипт.

 

Естественно, простой вывод сообщения о превышении лимита нам ничего не даст. Эти сообщения целесообразней заменить на конкретные действия: отключение пользователя, превысившего лимит, или уменьшение скорости.

  

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