В этой статье мы напишем скрипт, который будет извлекать данные из ARP таблицы Mikrotik Routerboard и помещать в базу данных MySQL.
Рис.1. MySQL.
Создаем базу с именем arp_table и в ней таблицу records с тремя полями.
Рис.2. Создаем поля.
Создаем поля в таблице records:
1-е поле — ID, в котором будет храниться идентификатор записи;
2-е поле — IP, в него будем заносить IP-адреса;
3-е поле — MAC, в него будем заносить МАС-адреса.
Рис.3. Пустая таблица MySQL.
Таблица создана. Теперь приступим к ее заполнению.
Рис.4. Mikrotik Routerboard ARP таблица.
Скрипт выглядит следующим образом:
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import mysql_db
import MySQLdb
from paramiko import SSHClient
from paramiko import AutoAddPolicy
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy())
mtipaddress = '192.168.4.1'
mtlogin = 'admin'
mtpassword = 'admin'
for x in range(0, 157):
try:
ssh.connect(mtipaddress, port=22, username=mtlogin, password=mtpassword)
cmd = "put [/ip arp get number=%s mac-address]" % (x)
excmd = ssh.exec_command(cmd)[1].read()
ssh.close()
ssh.connect(mtipaddress, port=22, username=mtlogin, password=mtpassword)
cmd2 = "put [/ip arp get number=%s address]" % (x)
excmd2 = ssh.exec_command(cmd2)[1].read()
ssh.close()
ex1 = excmd.strip()
ex2 = excmd2.strip()
print ex1
print ex2
cur = mysql_db.db.cursor()
sql = ("INSERT INTO records (ip, mac) VALUES ('%s', '%s')" % (ex2, ex1))
cur.execute(sql)
cur.close()
except:
print "error"
Разбираем скрипт:
Подключаем модули для работы с базой данных и ssh-сервером Mikrotik Routerboard:
import mysql_db
import MySQLdb
from paramiko import SSHClient
from paramiko import AutoAddPolicy
Данные для подключения к ssh-серверу Mikrotik Routerboard:
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy())
mtipaddress = '192.168.4.1'
mtlogin = 'admin'
mtpassword = 'admin'
for x in range(0, 157): выполняем цикл for, который будет присваивать переменной х значения от нуля до 157. 0 и 157 — нумерация правил в Mikrotik Routerboard.
try: - создаем обработчик ошибок. То есть, если скрипт по какой-то причине не сможет выполнить какое-либо действие, то он не прекратит свою работу, а пропустит выполнение данного действия и перейдет к следующему.
Соединяемся с Mikrotik Routerboard, извлекаем МАС-адрес:
ssh.connect(mtipaddress, port=22, username=mtlogin, password=mtpassword)
cmd = "put [/ip arp get number=%s mac-address]" % (x)
excmd = ssh.exec_command(cmd)[1].read()
ssh.close()
Соединяемся с Mikrotik Routerboard, извлекаем IP-адрес:
ssh.connect(mtipaddress, port=22, username=mtlogin, password=mtpassword)
cmd2 = "put [/ip arp get number=%s address]" % (x)
excmd2 = ssh.exec_command(cmd2)[1].read()
ssh.close()
Обрезаем пробелы и знаки переноса:
ex1 = excmd.strip()
ex2 = excmd2.strip()
Выводим переменные на экран:
print ex1
print ex2
Заносим полученные значения в базу данных:
cur = mysql_db.db.cursor()
sql = ("INSERT INTO records (ip, mac) VALUES ('%s', '%s')" % (ex2, ex1))
cur.execute(sql)
cur.close()
Если действие не выполняется, выводим сообщение error:
except:
print "error".
Рис.5. Работа скрипта.
Запускаем скрипт и следим за его работой.
Рис.6. База данных после выполнения скрипта.
Результат: скрипт перенес всю ARP таблицу из Mikrotik Routerboard в базу данных.
Евгений Рудченко специально для ASP24.






