У вас может возникнуть необходимость подсчета трафика. Вооружимся языком 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.