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 9at0z
      Знатоки. Такая вот проблема. Иногда сервер freeBSD 12 с биллингом.  Просто уходит в ступор виснет. Пока не перезагрузишь. В логах пусто. Просто завис и все. Куда копать? Железо? Или может что то в настройках. В качестве сервера комп. На ssd
    • By 9at0z
      1.Доброе утро, подскажите, юбиллинг каждый месяц добавляет каждый месяц тем кто не активный по -300р. то есть идет в минус. как отключить? чтоб если -300 то так и было. 
      2. Скажите если установлю phpmyadmin? все будет впорядке?
    • By twg
      Всем привет.
      Прошу помощи с сабжем. Нужно забрать юзеров с Ubilling в свой билинг, но пока не могу вдуплить, где их, юзеров, балансы. Думал, что в users.Cash, но нет.
    • By Nejron
      Всем здрям! ))
      Изложу суть :
      Имеется некий сервис (в данном случае IPTV личного производства)
      Хотелось бы контролировать с билинга доступ к нему.
      В профиле пользователя создал дополнительное поле с типом "TRIGGER".
       
      А вот дальше хочу спросить как правильно заполнить свою таблицу для ipfw?
      Добавлять/удалять от туда ip клиентов и возможно еще что то посоветуете.
      Возможно кто то что то подобное делал,
      не оставте начинающего админа без совета 😉
       
    • By СИОН
      Доброго времени!
      Вопрос:
      Как сделать чтобы в выводе списка абонов в модуле Пононизатор выводило и город/село?
       

×