Понадобилось настроить сервер 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.



