Перейти до

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


Рекомендованные сообщения

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

Был написан модуль для получения 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 или биллинга копать?

Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Відредаговано l1ght
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
41 минуту назад, dycost сказал:

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

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах

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

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

пришлось переписать так чтобы 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);

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

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

Ссылка на сообщение
Поделиться на других сайтах
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
Ссылка на сообщение
Поделиться на других сайтах

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

"/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 на столько.

Ссылка на сообщение
Поделиться на других сайтах
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
Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, l1ght сказал:

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
Только что, dycost сказал:

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

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, dycost сказал:

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

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

  • Haha 1
Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від sanyadnepr
      Приветствую всех.
      Подскажите пожалуйста где копнуть и нет ли проблемы со стороны протокола взаимодействия сити24 или возможно не учтена необходимая проверка в модуле сити24 в Ubilling, пока писал понял что похоже в проверке payID, но это не точно.  
      Недавно обнаружилось с сити24 начали прилетать дубликаты платежей, в целом платежей мало, два одинаковых запроса Pay с одинаковым transactionID и payID в одну секунду одному платежному ID при этом биллинг "думает" примерно чуть больше минуты и отвечает одним ответом <result>0</result>, сити24 утверждает что ответ они не получили и по протоколу дальше повторяет запросы дублем, биллинг ответ и так по кругу, сити24 спрашивает каким образом с одинаковым payID от сити24 билл продолжает обрабатывать запросы и пополнять абоненту счет раз в 5 минут примерно, на одну и туже сумму, ведь этот payID уже был обработан предполагают сити24 согласно протоколу.
      Конечно есть вопрос к сити24 зачем они дублем присылают два запроса, но они отвечают что эта ситуация учтена в протоколе и проблема на стороне биллинга, потому что он пополняет счет по уже обработанному одинаковому payID.
      При этом transactionID в дублях одинаковый, но с каждым новым дублем разный.
      Если зафаерволить запросы от сити24, но оставить возможность отвечать то после блокировки билл отправляет 2-3 минуты 6 ответов <account>0001</account>  <result>0</result>.
      После снятия блокировки, дубли и платежи нескольких проблемных абонентов прилетают так же по кругу, при этом и с некоторыми новыми пополнениями происходит аналогичная ситуация.
      В openpayz в платежах transactionID и не видно payID.
    • Від nightfly
      Ubilling 1.4.3 rev 9058 The Bladewood Grove
       
      Зміни в структурі БД. alter.ini: нові опції OPHANIMFLOW_ENABLED та OPHANIMFLOW_URLS котрі вмикають та керують інтеграцією з OphanimFlow. alter:ini: нова опція PHOTOSTORAGE_POSTPROCESSING, що вмикає післяобробку зображень при завантаженні в Сховище зображень. alter:ini: нова опція PHOTOSTORAGE_WATERMARK, що вмикає розміщення вотермарки на всіх зображеннях, що завантажуються. alter:ini: нова опція PHOTOSTORAGE_RECOMPRESS, що вмикає зміну компрессії завантажених зображень. alter:ini: нова опція PHOTOSTORAGE_AUTORESIZE, що вмикає автоматичне та лагідне масштабування зображень конячих розмірів. alter:ini: нова опція PHOTOSTORAGE_DRAWIMGINFO, що вмикає вдруковування в зображення відлагоджувальної інформації. alter.ini: нова опція ONDEMAND_CHARTS, що вмикає відкладене завантаження графіків завантаження користувацької смуги. userstats.ini: нова опція OPHANIM_ENABLED, що вмикає інтеграцію OphanimFlow в кабінеті користувача. Модуль Заздрість: тепер авторизаційні дані пристроїв, не відображаються в списку пристроїв. Модуль “Заздрість”: при створенні та редагуванні пристроїв, для полів “пароль” та “enable пароль” тепер використовуються інпути паролів. Модуль “Заздрість”: заздрісним пристроям додано нове поле “Порт”. Тепер в скриптах можна використовувати, відповідний макрос {PORT}. Модуль “Статистика трафіку користувача”: проведено радикальний рефакторинг. Модуль “Статистика трафіку користувача”: додано опційну можливість, відображення трафіку отриманого з OphanimFlow. Модуль “Статистика трафіку користувача”: виправлено проблему невірного відображення залишку коштів на кінець місяця, при використанні Ішимури. Модуль “Статистика трафіку користувача”: додано можливість відображення графіків за останню годину з OphanimFlow. Модуль “Користувачі”: додано опційну можливість, відображення трафіку отриманого з OphanimFlow. Модуль “Сховище зображень”: тепер додатково перевіряє завантажувані зображення на тему їх валідності. Модуль “Фінансові операції”: виправлено відображення суми платежів користувача. Remote API: новий виклик ophanimtraff, який просто бере і синхронізує локальну БД з віддаленими джерелами OphanimFlow. Remote API: виклик userbynum тепер також опційно містить поле з “Платіжним ID” користувача. Глобально: у всіх полях вводу паролів, окрім форми входу, тепер відображається елемент керування “показати/приховати” пароль. Кабінет користувача: в модулі “Трафік” додано опційну можливість, відображення трафіку отриманого з OphanimFlow. Кабінет користувача: в модулі “Трафік” виправлено проблему невірного відображення залишку коштів на кінець місяця, при використанні Ішимури. Кабінет користувача: в модулі “Відеоспостереження” для NVR WolfRecorder замінено розділювач попередньо заповнених даних авторизації. OpenPayz: додано frontend portmonemulti, для отримання платежів від різних контрагентів. Інформацію по контрагентам бере з біллінгу, також використовую розширену інформацію контрагента. Платіжна система в контрагенті мусить бути створена, як PORTMONE 1984tech: додано функціонал генерації RPZ для isc-bind, спасибі @misterromanbush  
      Повний чейнджлог
      Оновлена демка
       

    • Від mac
      Здається, після оновлення PHP 7.4 до PHP 8.2 feesharvester припинив працювати:
       
      /usr/local/bin/curl "http://127.0.0.1/billing/?module=remoteapi&key={SERIAL}&action=feesharvester" <br /> <b>Fatal error</b>: Uncaught TypeError: Unsupported operand types: string - string in {UBPATH}/billing/api/libs/api.fundsflow.php:570 Stack trace: #0 {UBPATH}/billing/modules/remoteapi/feesharvester.php(22): FundsFlow-&gt;harvestFees('2024-01') ...  
      Невеличке розслідування врешті з'ясувало, що це через наявність пробілу у деяких логінах абонентів. Як так сталося? Тому що інколи був неуважно додан трейлінг пробіл до номеру будинка і цей пробіл потрапив до логіну абоненту. Логін абоненту неможливо змінити ніяким чином штатними засобами. Я не розглядаю створення нового абонента для усунення помілки.

      Був обран такий шлях вирішення проблеми. Заміну функції php explode() знайшов у мережі. Мабуть це станеться в нагоді:

       
      diff api.fundsflow.php.bak api.fundsflow.php.new 559c559 < $eachfee = explode(' ', $eachline); --- > $eachfee = preg_split("~(?<!\\\\)(?:\\\\{2})*'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(*SKIP)(*F)|\s+~s" , $eachline);  
    • Від Dilan
      Собственно ищу кто сделает такую связку с нуля под ключ. Тз высылаю в личку. Заранее спасибо.
    • Від ukrtelekom
      Доброго часу!
      Шукається адміністратор віддалений для разової роботи по коригуванню працюючого Ubilling з мікротами. Якщо стосунки зклєяться- то до постійної додаткової копійки. 
      Всім заздалегідь дякую. Хейти, бажано не писати. Контакти в приватні повідомлення або O73283344O
×
×
  • Створити нове...