Меню
Контакты
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 таблицу из MySQL в текстовый файл

 31 Май 2011    MikroTik, Scripts

Понадобилось настроить сервер FreeBSD с авторизацией IP + MAC и перенести на нее существующую базу пользователей.

Во FreeBSD статическая запись в ARP таблицу добавляется так:

 

arp -s 192.168.1.1 0:92:37:91:12:a3 pub

Но добавлять данные для всей подсети таким способом слишком долго.

Второй способ добавления статической записи в ARP таблицу FreeBSD:

 

# arp -d -a

# arp -f /home/user/arp_table

 

#arp -d -a  - удаляем все записи из ARP таблицы;

# arp -f /home/user/arp_table — заносим данные в ARP таблицу из файла.

Второй способ, конечно, гораздо проще. Но это в том случае, если бы у нас был готовый файл с записями IP + MAC. К сожалению, у нас его нет. Однако есть база данных MySQL, из которой мы можем извлечь данные и поместить в файл.

 

#!/usr/bin/env python

# -*- coding: utf_8 -*-

import mysql_db

import MySQLdb

pool = '192.168.4.'

for x in range(1, 255):

try:

select_ip = '%s%s' % (pool, x)

cur = mysql_db.db.cursor()

sql = ("SELECT mac FROM records WHERE ip='%s'") % (select_ip)

cur.execute(sql)

ipmac = cur.fetchone()

cur.close()

mac = ipmac[0]

rec = "%s %s\n" % (select_ip, mac)

print rec

f = open('arp_table', 'a')

f.write(rec)

f.close()

except:

rec2 = "%s 00:00:00:00:00:33\n" % (select_ip)

f = open('arp_table', 'a')

f.write(rec2)

f.close()

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

 Подключаем модули для работы с базой данных:

import mysql_db

import MySQLdb

 Создаем переменную и присваиваем ей значение:

pool = '192.168.4.'

Выполняем цикл for, который будет присваивать переменной х, значения от 1, до 255:

for x in range(1, 255):

Создаем переменную select_ip, заносим в нее значение двух переменных: pool и x, получаем значение IP-адреса, для которого нужно выбрать МАС-адрес из базы данных:

select_ip = '%s%s' % (pool, x)

Извлекаем данные из базы:

cur = mysql_db.db.cursor()

sql = ("SELECT mac FROM records WHERE ip='%s'") % (select_ip)

cur.execute(sql)

ipmac = cur.fetchone()

cur.close()

Получаем значение МАС-адреса:

mac = ipmac[0]

Создаем переменную rec, которая будет состоять из связки IP и МАС-адреса:

rec = "%s %s\n" % (select_ip, mac)

Открываем файл и заносим в него значение переменной rec:

f = open('arp_table', 'a')

f.write(rec)

f.close()

Если в базе

MySQL не будет значения для какого-то IP-адреса, то произойдет ошибка. Чтобы этого не было, выполним: 

except:

rec2 = "%s 00:00:00:00:00:33\n" % (select_ip)

f = open('arp_table', 'a')

f.write(rec2)

 

 

Рис.1. Запуск скрипта.

 

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

 

 

Рис.2. Готовый файл.

 

Открываем созданный файл в текстовом редакторе, чтобы убедиться, что все в порядке.

 

 

Рис.3. FreeBSD, ARP таблица.

 

После добавления записей в

ARP таблицу, выполним команду arp -a, которая отобразит все записи.

 

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