Jump to content
Local
dycost

Получение mac с порта коммутатора

Recommended Posts

Такая проблема.

Был написан модуль для получения mac абонента с порта коммутатора. Модуль перестал работать после обновления биллинга. Обновлялся точно не скажу с какого релиза, ориентировочно 0.8.9 или 0.9.0.

 

Суть вот в чем.

Модуль использует скрипт на питоне вызываемый через popen, в принципе весь код вот:

if (cfr('GET_MAC')) {
	
	$inputs = wf_TextInput('switch_address', __('Enter switch address'), '', true, '10');
	$inputs.= wf_TextInput('switch_port', __('Enter switch port'), '', true, '10');
	$inputs.= wf_Submit(__('Get'));
	$form = wf_Form("", 'POST', $inputs, 'glamour');
	show_window(__('Get mac address from switch port'), $form);
	
	if (isset ($_POST['switch_address'])) {
		$process = popen(escapeshellcmd('/usr/local/www/apache22/data/billing/modules/general/get_mac/get_mac.py ' . $_POST['switch_address'] . ' ' . $_POST['switch_port']), "r");
		$mac = fread($process, 2096);
		show_window(__('Active mac address: '), $mac);
		pclose($process);
		};

	} else {
	show_error(__('Access denied'));
}

Питон потому, что парсинг на php я не осилил..

из питона вызывается snmpwalk через  popen (да, такая вот матрешка), собственно для получения mac.

До обновления все работало, и сейчас если выполнить  из консоли что-то типа такого:

<?php
$process = popen(escapeshellcmd('/usr/local/www/apache22/data/billing/modules/general/get_mac/get_mac.py 172.16.0.182 2', "r");
$mac = fread($process, 2096);
echo "$mac";
?>

то все работает.

При выполнении из биллинга питон не создает процесс-потомок snmpwalk.

Какие настройки php или биллинга копать?

Share this post


Link to post
Share on other sites

А error.log то что говорит?

Явно должно свалится с какой-то ошибкой.

Вряд ли апдейт биллинга мог сломать что-то подобное ибо нашего апи там как такого и нет.

Да и собсно чем штатный FDB не подошел?

Edited by l1ght

Share this post


Link to post
Share on other sites

В логах апача пусто.

Ошибки вообще нет. Просто объект класса popen создается пустой.

Про апдейт биллинга я подумал, ибо больше не происходило ничего. PHP, Apache,python не обновлялись и конфиги не правились.

Штатный, насколько я помню, требует dhcp на этой же машине, а этим занимается совсем другая железка.

Share this post


Link to post
Share on other sites
41 минуту назад, dycost сказал:

В логах апача пусто.

Ошибки вообще нет. Просто объект класса popen создается пустой.

Про апдейт биллинга я подумал, ибо больше не происходило ничего. PHP, Apache,python не обновлялись и конфиги не правились.

Штатный, насколько я помню, требует dhcp на этой же машине, а этим занимается совсем другая железка.

мы обычно shell_exec для такой херни пользуем, пробуйте

Share this post


Link to post
Share on other sites

не, не помогло(

где-то ограничивается глубина рекурсии в вызове процессов из процессов.

пришлось переписать так чтобы snmpwalk из php вызывался.

$command = shell_exec('/usr/local/www/apache22/data/billing/modules/general/get_mac/get_command.py ' . $_POST['switch_address'] . ' ' . $_POST['switch_port']);
$data = shell_exec($command);
$mac = shell_exec('/usr/local/www/apache22/data/billing/modules/general/get_mac/parse_mac.py ' . $data);

Но гложет любопытство, что же это было?

гугл молчалив и таинственен..

Share this post


Link to post
Share on other sites
6 минут назад, dycost сказал:

не, не помогло(

где-то ограничивается глубина рекурсии в вызове процессов из процессов.

пришлось переписать так чтобы snmpwalk из php вызывался.


$command = shell_exec('/usr/local/www/apache22/data/billing/modules/general/get_mac/get_command.py ' . $_POST['switch_address'] . ' ' . $_POST['switch_port']);
$data = shell_exec($command);
$mac = shell_exec('/usr/local/www/apache22/data/billing/modules/general/get_mac/parse_mac.py ' . $data);

Но гложет любопытство, что же это было?

гугл молчалив и таинственен..

Какая странная конструкция получилась.

Что возвращает 
 

shell_exec('/usr/local/www/apache22/data/billing/modules/general/get_mac/get_command.py ' . $_POST['switch_address'] . ' ' . $_POST['switch_port']);

И

shell_exec('/usr/local/www/apache22/data/billing/modules/general/get_mac/parse_mac.py ' . $data);

А то я немного не понял какого там происходит вообще

1 час назад, dycost сказал:

Штатный, насколько я помню, требует dhcp на этой же машине, а этим занимается совсем другая железка.

Штатный сбор FDB вообще никак к DHCP не относится.

Смотрите модуль опроса свичей и их snmp шаблоны

  • Like 1

Share this post


Link to post
Share on other sites

первое комманду, для получения мака, типо такой конструкции:

"/usr/local/bin/snmpwalk -c " + name + " -v 2c -Cc " + IP +  " " + oid_port + " | grep 'INTEGER: " + PORT +"$'"

там фишка, что для разных коммутаторов разные OID'ы

последняя парсит данные, что выдал snmpwalk

как-то так:

list_addr =  map(lambda elem: '{0:0>2x}'.format(int(elem)), data.split(".")[-6:])
res = ":".join(list_addr)

я просто старый скрипт разбил на 2.

понимаю, что надо бы на php переписать, но лень, да и не знаю я php на столько.

Share this post


Link to post
Share on other sites
7 минут назад, dycost сказал:

первое комманду, для получения мака, типо такой конструкции:


"/usr/local/bin/snmpwalk -c " + name + " -v 2c -Cc " + IP +  " " + oid_port + " | grep 'INTEGER: " + PORT +"$'"

там фишка, что для разных коммутаторов разные OID'ы

последняя парсит данные, что выдал snmpwalk

как-то так:


list_addr =  map(lambda elem: '{0:0>2x}'.format(int(elem)), data.split(".")[-6:])
res = ":".join(list_addr)

я просто старый скрипт разбил на 2.

понимаю, что надо бы на php переписать, но лень, да и не знаю я php на столько.

И это всё ради того что б не смотреть как работает штатный опрос, ок

  • Like 1

Share this post


Link to post
Share on other sites
7 минут назад, l1ght сказал:

И это всё ради того что б не смотреть как работает штатный опрос, ок 

хм... да, наверное..

ща полез смотреть доки, и действительно, есть возможность опроса свитчей.. давно не читал о нововведения, опробую ка настроение будет)

я сначала подумал о модуле Новые маки,

Share this post


Link to post
Share on other sites
Только что, dycost сказал:

хм... да, наверное..

ща полез смотреть доки, и действительно, есть возможность опроса свитчей.. давно не читал о нововведения, опробую ка настроение будет)

я сначала подумал о модуле Новые маки,

НОВОВВЕДЕНИЕ!?!

Да этому функционалу лет и лет

Share this post


Link to post
Share on other sites
1 час назад, dycost сказал:

нуу... как-то мимо он меня прошел

Он присутствовал еще с релизов 0.4.1-0.4.2. Это где-то начало 2013-го года.

  • Haha 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Oleg2018
      При переносе биллинга на новый сервер сделал восстановоление базы строго по инструкции. Все данные получил. Пользователи работают. Но есть проблема, при создание копии базы через вебинтерфейс создается файл с размер 100 килобайт. База при переносе занимала 18 мегабайт. При проверке целосности базы нашел проблему из представлением op_customers выдает ошибку  #1449 - The user specified as a definer ('root'@'%') does not exist. Кто решал и как эту проблему
    • By Impulsee
      День добрый!
      Есть Связка Ubilling+NAS на freebsd. 
      Настроена на Виртуалке VMware. 
      Без VLAN все работает идеально. Трафик бегает, IP раздается, Денюжка зачисляется и т.д.
      Появилась потребность поднять 3 VLAN на локальном интерфейсе для Абонов. 
      Сделал: /etc/rc.conf
       
      Вывод /etc/firewall.conf 
       
       
      Сети, шаблоны NAS, в биллинге прописал. Абоны IP получают через VLAN. Интернет есть....
       
      НО:
       
      При отрицательном балансе на em1 все отключается мгновенно, и отправляет в кабинет. 
      А на VLAN сетях Интернет есть. 
       
      Кусок /var/stargazer/allconnect.log

       
      кусок /var/log/stargazer.log
       
       
      Подскажите, плиз, в какую сторону копать?
       
    • By 9at0z
      Подскажите, есть юбиллинг в качестве нас микротик. хочу перейти на freeradius. как правильно перейти? в address list используется ALLOW и !ALLOW. поясните как правильно все переделать?
    • By 9at0z
      Подскажите, есть ли возможность, посмотреть список тех, кто взял в начале месяца кредит, но не пополнился. 
    • By 9at0z
      Знатоки. Такая вот проблема. Иногда сервер freeBSD 12 с биллингом.  Просто уходит в ступор виснет. Пока не перезагрузишь. В логах пусто. Просто завис и все. Куда копать? Железо? Или может что то в настройках. В качестве сервера комп. На ssd
×