Напишем скрипт, который будет выполнять отключение пользователей на устройствах Mikrotik Routerboard по дате.
Рис.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.




