Меню
Контакты
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   Сб-вс: выходной
Заказать звонок

Скрипт для отключения пользователей в Mikrotik RouterBoard по дате

 30 Апр 2011    MikroTik, Scripts

Напишем скрипт, который будет выполнять отключение пользователей на устройствах Mikrotik Routerboard по дате.

 

 Mikrotik RouterBoard 433 Address List

Рис.1. Mikrotik RouterBoard 433 Address List.

 

Пишем скрипт, который при отрицательном балансе будет отключать пользователей по дате.

#!/usr/bin/env python

# -*- coding: utf_8 -*-

import MySQLdb

import mysql_db

import datetime

from paramiko import SSHClient

from paramiko import AutoAddPolicy

now_date = datetime.date.today()

cur_year = now_date.year

cur_month = now_date.month

cur_day = now_date.day

user_day = cur_day

user_month = cur_month

cur = mysql_db.db.cursor()

sql = ("""SELECT login_user, ip_user, balance FROM users WHERE day = %s AND month = %s""") % (user_day, user_month)

cur.execute(sql)

action = cur.fetchall()

cur.close()

for x in action:

login_user = x[0]

ip_user = x[1]

balance = x[2]

if balance <= 0:

mip = '192.168.4.253'

ml = 'user1'

mp = '1q2w3e'

exe = "/ip fi a disable [find address=%s]" % (ip_user)

print exe

ssh = SSHClient()

ssh.set_missing_host_key_policy(AutoAddPolicy())

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

cmd = "%s" % (exe)

ssh.exec_command(cmd)

ssh.close()

else:

print "Не отключать"

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

cur = mysql_db.db.cursor()

sql = ("""SELECT login_user, ip_user, balance FROM users WHERE day = %s AND month = %s""") % (user_day, user_month)

cur.execute(sql)

action = cur.fetchall()

cur.close()

Извлекаем логин, IP-адрес и баланс пользователей, если поле day равно переменной user_day, а поле month равно - user_month.

for x in action:

login_user = x[0]

ip_user = x[1]

balance = x[2]

В цикле for извлекаем значения из action и заносим в x, присваиваем значения переменным login_user, ip_user, balance.

if balance <= 0:  - Выполняем проверку: баланс пользователя меньше или равно ноль. Если да - отключаем пользователя в Mikrotik Routerboard.

mip = '192.168.4.253'

ml = 'user1'

mp = '1q2w3e'

exe = "/ip fi a disable [find address=%s]" % (ip_user)

print exe

ssh = SSHClient()

ssh.set_missing_host_key_policy(AutoAddPolicy())

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

cmd = "%s" % (exe)

ssh.exec_command(cmd)

ssh.close()

Если нет, то выведем сообщение “Не отключать”.

 

 База данных

Рис.2. База пользователей.

 

В базе данных три пользователя. У первого баланс отрицательный, у второго - положительный, у третьего - нулевой. После выполнения скрипта первый и третий пользователь будут отключены.

 

 Скрипт для отключения пользователей по дате

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

 

Как видно на рисунке, для первого и третьего пользователя скрипт выполнил команду отключения в Mikrotik Routerboard. Второй пользователь благополучно продолжил работу.

 

 Результат работы скрипта, отключение пользователей с отрицательным и нулевым баллансом

Рис.4. Результат работы скрипта.

 

Скрипт успешно справился с поставленной задачей и отключил пользователей по дате.

 

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