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

Как извлечь данные из ARP таблицы Mikrotik Routerboard и занести их в MySQL

 08 Май 2011    MikroTik, Scripts

 В этой статье мы напишем скрипт, который будет извлекать данные из ARP таблицы Mikrotik Routerboard и помещать в базу данных MySQL.

 

 MySQL

Рис.1. MySQL.

 

Создаем базу с именем arp_table и в ней таблицу records с тремя полями.

 

 Как извлечь ARP таблицу из Mikrotik Routerboard и занести ее в MySQL

Рис.2. Создаем поля.

 

Создаем поля в таблице records:

  1-е полеID, в котором будет храниться идентификатор записи;

  2-е полеIP, в него будем заносить IP-адреса;

  3-е полеMAC, в него будем заносить МАС-адреса.

 

 Пустая таблица MySQL

Рис.3. Пустая таблица MySQL.

 

Таблица создана. Теперь приступим к ее заполнению.

 

 Mikrotik Routerboard ARP таблица

Рис.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".

 

 Как извлечь ARP таблицу из Mikrotik Routerboard и занести ее в MySQL

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

 

Запускаем скрипт и следим за его работой.

 

 Как извлечь ARP таблицу из Mikrotik Routerboard и занести ее в MySQL

Рис.6. База данных после выполнения скрипта.

 

Результат: скрипт перенес всю ARP таблицу из Mikrotik Routerboard в базу данных.

  

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