Скрипт для привязки mac-ip для UTM5

Форум для размещения материалов по реализации различных схем использования ПО, решению частых проблем и предупреждению частых ошибок
Закрыто
Nick
Сообщения: 109
Зарегистрирован: Чт янв 20, 2005 20:27

Скрипт для привязки mac-ip для UTM5

Сообщение Nick »

Откроем тему

Это творение производит привязку mac-ip на запускаемом хосте, получая данные из базы UTM. Производится привязка ip-mac у незаблокированых административной блокировкой и у которых кредит+балансе>$balance. Остальные забиваются тем что указано в $ban. Запускать, например по крону указав сеть в качестве параметра, например "arps 192.168.1.".

Пользователь $username должен иметь права на select в таблицах: iptraffic_service, accounts, ip_groups, service_links;

Код:

#!/usr/local/bin/php
<?php
$network=$argv[1];
$balance=-15;
$ban="ff:ff:ff:ff:ff:ff";
$x=0;
$hostname = "utm5_DB_ip";
$username = "utm5_arp";
$password = "password";
$dbname = "UTM5";
#----------------
$link = mysql_connect($hostname,$username,$password) OR DIE ("Can't connect");
@mysql_select_db("$dbname") or die ("Can't select db");

$query = "SELECT INET_NTOA(ip_groups.ip + 4294967296 ), ip_groups.mac FROM ip_groups LEFT JOIN iptraffic_service_links ON iptraffic_service_links.ip_group_id=ip_groups.ip_group_id LEFT JOIN service_links ON service_links.id=iptraffic_service_links.id LEFT JOIN accounts ON accounts.id=service_links.account_id where ip_groups.is_deleted=0 and ip_groups.ip > -1062731776 and ip_groups.ip < -1062666241 and (accounts.balance+accounts.credit)>$balance and accounts.is_blocked < 17 and ip_groups.mac<>'' and INET_NTOA(ip_groups.ip + 4294967296 ) like '%$network%' GROUP BY ip_groups.ip;";

$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$iparray[$x]=($row[0]);
$macarray[$x]=($row[1]);
$x++;
}
mysql_free_result($result);
mysql_close($link);
$x=0;
for ($i=2; $i<=254; ++$i) {
$checkip=$network.$i;
if (in_array($checkip,$iparray)) { # echo date("d.m.y H.i.s"), " +", $checkip, " ", $macarray[$x],"\n";
$f="/sbin/arp -s $checkip $macarray[$x] \n";
exec ($f,$junk,$ret);
$x++;
if ($ret !=0) {
echo("cant execute arp, check sudoers");
echo $junk;
print implode(",", $junk);
} }
else { # echo date("d.m.y H.i.s"), " -",$checkip," ", $ban ," \n";
$f="/sbin/arp -s $checkip $ban\n";
exec ($f,$junk,$ret);
if ($ret !=0) {
echo("cant execute arp, check sudoers");
echo $junk;
print implode(",", $junk);
} } }
reset($iparray);
unset($iparray);
reset($macarray);
unset($macarray);
?>

Аватара пользователя
dalex
Сообщения: 1306
Зарегистрирован: Пт янв 21, 2005 11:54

Сообщение dalex »

у меня проще берутся все сопоставления из базы
/usr/bin/mysql -u user --password="password" -e "select inet_ntoa(4294967295 & ip), mac from ip_groups WHERE mac!='';" UTM5|grep -v -w mac >/tmp/arp.tbl
/sbin/arp -f /tmp/arp.tbl
/bin/rm -f /tmp/arp.tbl

poison
Сообщения: 38
Зарегистрирован: Ср янв 26, 2005 13:47

Сообщение poison »

dalex писал(а):у меня проще берутся все сопоставления из базы
Столкнулся с проблемой. В базу была неверно забита связка mac-ip, потом яя ее удалил из веб-интерфейса, но в arp.tbl она все равно переносиласть, в связи с чем предлагаю следующее усовершенстрование скрипта:

/usr/bin/mysql -u user --password="password" -e "select inet_ntoa(4294967295 & ip), mac from ip_groups WHERE mac!='' and is_deleted=0;" UTM5|grep -v -w mac >/tmp/arp.tbl
/sbin/arp -f /tmp/arp.tbl
/bin/rm -f /tmp/arp.tbl

То есть переносить только не удаленные связки mac-ip

Imperator
Сообщения: 27
Зарегистрирован: Пт май 20, 2005 14:56

Сообщение Imperator »

А никто не написал скрипт, которай бы выполнял бы привязку на локальной машине как в UTM4? Чтобы показыались пары ip-mac и их можно было бы вносить в файл для arp -f.

Аватара пользователя
dalex
Сообщения: 1306
Зарегистрирован: Пт янв 21, 2005 11:54

Сообщение dalex »

А никто не написал скрипт, которай бы выполнял бы привязку на локальной машине как в UTM4? Чтобы показыались пары ip-mac и их можно было бы вносить в файл для arp -f.
А чем интересно все предлагающие здесь варианты занимаются???

Imperator
Сообщения: 27
Зарегистрирован: Пт май 20, 2005 14:56

Сообщение Imperator »

Да вроде как берут mac из базы. А UTM4 брал из кэша arp...

Аватара пользователя
dalex
Сообщения: 1306
Зарегистрирован: Пт янв 21, 2005 11:54

Сообщение dalex »

Да вроде как берут mac из базы. А UTM4 брал из кэша arp...
Сорри не въехал сразу. У такого подхода есть минусы - во первых неизвестно не будет ли в какой то момент в кеше запись с неправльным маком и она внесетя в связку (обновлять то придется периодически).
А так все просто парсится вывод команды arp на предмет убирания лишних данных а затем передается опять же arp -f. ИМХО только из базы брать правильнее.

Imperator
Сообщения: 27
Зарегистрирован: Пт май 20, 2005 14:56

Сообщение Imperator »

Да хотелось бы через веб. А я сам не такой крутой программер. :)

Alexeypp
Сообщения: 21
Зарегистрирован: Вт май 24, 2005 20:34

Re: Скрипт для привязки mac-ip для UTM5

Сообщение Alexeypp »

Nick писал(а):
$ban="ff:ff:ff:ff:ff:ff";
смени МАС
ff:ff:ff:ff:ff:ff в некоторых случаях воспринимается Фрей как броадкаст

-|LSV|-
Сообщения: 98
Зарегистрирован: Ср ноя 23, 2005 17:25

Сообщение -|LSV|- »

А в случае когда на 2х хостах, то где запускать скрипты arp.sh и utm5_arp.pl?
1)Ядро, радиус, БД, веб
2)Фаер, коллектор, впн, rfw
А то просисал в консоле админа у юзера Ip, name , pass, MAC(любой) он логинится как ни в чём не бывало на любом компе.
Пробывал запускать на сервере с ядром...

Код: Выделить всё

# ./utm5_arp.pl
Inserted ip/mac 192.168.1.17/00&#58;0e&#58;a6&#58;4e&#58;73&#58;c8 to database
Inserted ip/mac 192.168.2.1/00&#58;50&#58;bf&#58;03&#58;d0&#58;7c to database
# ./arp.sh
arp&#58; invalid Ethernet address '001195E3A442'
arp&#58; writing to routing socket&#58; No such process
arp&#58; 172.16.0.50&#58; No such process
arp&#58; writing to routing socket&#58; No such process
В чём баг?

Dyr
Сообщения: 25
Зарегистрирован: Вт янв 17, 2006 12:51

Сообщение Dyr »

-|LSV|- писал(а): # ./arp.sh
arp: invalid Ethernet address '001195E3A442'
arp: writing to routing socket: No such process
arp: 172.16.0.50: No such process
arp: writing to routing socket: No such process
[/code]
В чём баг?
Я уж не знаю, что в этом скрипте, но вывод достаточно однозначный - у тебя MAC адрес в неправильной форме, надо отдавать через двоеточия, а у тебя слитно.

Аватара пользователя
CNM
Сообщения: 55
Зарегистрирован: Чт окт 19, 2006 13:29
Контактная информация:

Сообщение CNM »

http://asc.kiev.ua/utm/arp.pl.txt
перловая скриптина, облегчающая задачу импорта в арп нужные связки...

Аватара пользователя
Jovanotti
Сообщения: 63
Зарегистрирован: Вт фев 27, 2007 22:47

Сообщение Jovanotti »

Линк битый.

Закрыто