Автоматический сбор МАК-ов
Автоматический сбор МАК-ов
Доброго времени суток!
Искал по форуму, но чего-то не нашёл! Хотелось бы, чтобы в базу автоматом прописывалась привязка IP-MAC. Ну, т.е. если мак в связке пустой, то от наполняется из arp, а не вбивается вручную. Как сие сделать?
Есть это у моего домашнего провайдера, типа, "мы вам чистим мак и первый мак на вашем ip прописывается в базу"...
Искал по форуму, но чего-то не нашёл! Хотелось бы, чтобы в базу автоматом прописывалась привязка IP-MAC. Ну, т.е. если мак в связке пустой, то от наполняется из arp, а не вбивается вручную. Как сие сделать?
Есть это у моего домашнего провайдера, типа, "мы вам чистим мак и первый мак на вашем ip прописывается в базу"...
Тот кто хочет сменит и с привязкой, это не панацея, нужно оборудование l2. А так видится такое решение: ставится arpwatch, дальну всё в логи и парсятся логи на предмет смены mac адресов, все кто попал - iptables -I FORWARD -s $IP -j DROP или загоняются куда нить в дохлый маршрут.f0ma писал(а):тоже интересен скрипт
Ну, лично у меня пока пока такой алгоритм вытанцовывается: модифицируем arp.sh, чтобы:
1. arp -a > arp.txt
2. grep -v permanent arp.txt > arp2.txt
А вот как дальше - не знаю.... Но по сути:
3. Построчный анализ: проверяем, если ли ИП в базе. Если есть:
3.1. Заносим МАК в базу.
3.2. Если нет - идём дальше (ну, или какие действия по блокировке)
4. Идём к п.3 до окончания файла.
5. arp -a -d
6. Выгрузка из базы маков в файлик
7. arp -f <файлик с маками>
Запускать можно хоть раз в минуту.... Только вот как написать - увы, в shell-е пока не силён
1. arp -a > arp.txt
2. grep -v permanent arp.txt > arp2.txt
А вот как дальше - не знаю.... Но по сути:
3. Построчный анализ: проверяем, если ли ИП в базе. Если есть:
3.1. Заносим МАК в базу.
3.2. Если нет - идём дальше (ну, или какие действия по блокировке)
4. Идём к п.3 до окончания файла.
5. arp -a -d
6. Выгрузка из базы маков в файлик
7. arp -f <файлик с маками>
Запускать можно хоть раз в минуту.... Только вот как написать - увы, в shell-е пока не силён
Можно и без awk. Вот например вывод "Логин" "Пасс" "ИП"
PS. AWK все таки пригодится Этот скрипт вызывает первый и убирает из его вывода первую строку(заголовки столбцов) + сортировка по логину. Результат - в /netup/accounts.txt
Код: Выделить всё
#!/bin/sh
#getacct.sh
/usr/bin/mysql --host=172.16.0.2 -uutm5 -putm5pass utm5billing <<EOF
select uname,upass,inet_ntoa(ip & 0xFFFFFFFF) from ip_groups, iptraffic_service_links, accounts, service_links
WHERE ip_groups.is_deleted=0
AND iptraffic_service_links.ip_group_id=ip_groups.ip_group_id AND service_links.id=iptraffic_service_links.id
AND service_links.account_id = accounts.id
AND service_links.is_deleted=0
AND iptraffic_service_links.is_deleted=0
AND accounts.is_deleted=0
AND ip_groups.is_deleted=0
AND ip_groups.ip_type=0
AND ip_groups.router_id=1
ORDER by uname;
QUIT
EOF
Код: Выделить всё
#!/bin/sh
#saveaccounts.sh
ACC_PATH=/netup/accounts.txt
/etc/ppp/getacct.sh | grep -v "uname" | awk '{print $1" \t "$2" \t"$3}' |sort>> $ACC_PATH
Только ip_groups. Для применения, конечно, рестарт биллинга.Кондор писал(а):Так, скрипт я слепил на php и всё работает, кроме одного: в биллинге маки не появляются даже после рестарта биллинга. Надо ещё что-то править в таблицах кроме ip_groups?
И еще, в базе маки хранятся XX-XX-XX-XX-XX а не XX:XX:XX:XX:XX
Странно. У меня разделители в базе - двоеточие.ds писал(а):Только ip_groups. Для применения, конечно, рестарт биллинга.Кондор писал(а):Так, скрипт я слепил на php и всё работает, кроме одного: в биллинге маки не появляются даже после рестарта биллинга. Надо ещё что-то править в таблицах кроме ip_groups?
И еще, в базе маки хранятся XX-XX-XX-XX-XX а не XX:XX:XX:XX:XX