Биллинговая система Nodeny
19 Апреля 2024, 01:25:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Хранение и отображение MAC адресов.  (Прочитано 2969 раз)
Roman
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 14


Просмотр профиля Email
« : 30 Августа 2017, 17:20:55 »

Доброго дня всем, есть проблема с отображением мак адресов.
Авторизация Mikrotik+Radius.
В таблицу auth_log в поле properties radius кладет инфу в таком виде
Код:
mod=pppoe;user=F4:EC:38:F2:40:0F;nas=10.20.0.2

В таблице маков по урлу /cgi-bin/stat.pl?a=auth_mac
все отображается приблизительно так
Код:
:0:B::D4::5:9::95
:A:3::4D::1:5::15
:0:F::A6::B:C::93



При заходе в карточку клиента и попытке просмотреть список последних авторизаций вывод такой

Код:
30.08.2017 16:33 1 час 41 мин 172.50.2.164 pppoe :6:B::3F::6:2::57 nas=10.20.0.2,vlan=EC:08

При нажатии на ссылку мака, формируется урл следующего содержания.
Код:
/cgi-bin/stat.pl?a=mac_info&mac=%3A6%3AB%3A%3A3F%3A%3A6%3A2%3A%3A57
После этого биллинг пишет
Код:
Информация по мак-адресу 00:06:0b:00:3f:00:06:02:00:57
Естественно инфы опять ноль.
Мало того, руками подменял урлы и правильной длины и правильный мак, который есть в базе. Не ищет Грустный
Куда рыть?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #1 : 30 Августа 2017, 17:44:55 »

При записи в базу из мака должны удаляться разделители, в процедуре radupdate должно быть подобное:

Код:
SELECT REPLACE(login, ':', '') INTO usr_mac;

http://nodeny.com.ua/wiki/index.php/Dhcp%2BRadius
Записан
Roman
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 14


Просмотр профиля Email
« Ответ #2 : 30 Августа 2017, 18:21:09 »

Если я правильно понял, мак должен быть без разделителей?
Ок, попробую конвертануть базу.
Записан
Roman
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 14


Просмотр профиля Email
« Ответ #3 : 30 Августа 2017, 18:49:56 »

У меня процедуры для PPPoE и они отличаются. Сейчас приведу свои.
Radreply ничего не пишет в базу.

Код:
BEGIN
  DECLARE usr_id INT;
  DECLARE usr_on INT;
  DECLARE usr_ip VARCHAR(15) DEFAULT NULL;
  DECLARE shape INT;
  DECLARE shapein INT;
  SELECT id, IF(state='on',1,0) INTO usr_id, usr_on FROM users WHERE name=login LIMIT 1;

 
    SELECT get_ip(usr_id) INTO usr_ip;
    SELECT substr(tags,locate(',shape=',tags)+7)+0 INTO shape FROM users_services WHERE tags LIKE '%,shape=%' AND uid=usr_id;
    IF ( shape > 6 ) THEN SET shapein=shape; ELSE SET shapein=shape; END IF;
    SELECT NULL,login,'Mikrotik-Rate-Limit',CONCAT(shapein,'M/',shape,'M'),'=';
    SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
    SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';


  SELECT NULL,login,'Framed-Protocol','PPP','=';
END

Этим занимается set_auth

Код:
BEGIN
  DECLARE usr_id INT;
  SELECT uid INTO usr_id FROM ip_pool WHERE INET_ATON(usr_ip) = ip LIMIT 1;

  IF( usr_id > 0 ) THEN

    INSERT INTO auth_now SET
        ip = usr_ip,
        properties = auth_properties,
        start = UNIX_TIMESTAMP(),
        last = UNIX_TIMESTAMP()
    ON DUPLICATE KEY UPDATE
        properties = IF(auth_properties!='',auth_properties,properties),
        last = UNIX_TIMESTAMP();

    UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 300
        WHERE ip = INET_ATON(usr_ip) AND type = 'dynamic' LIMIT 1;
  END IF;
END

И по окончании сессии отрабатывается radstop

Код:
BEGIN
  DECLARE usr_id INT;
  DECLARE startses INT;
  DECLARE usr_ip VARCHAR(16);
  DECLARE usr_proper VARCHAR(255) DEFAULT NULL;
  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  SELECT ip,start,properties INTO usr_ip,startses,usr_proper FROM auth_now WHERE ip = get_ip(usr_id) LIMIT 1;
  INSERT INTO auth_log (`uid`,`ip`,`start`,`end`,`properties`) VALUES (usr_id,INET_ATON(usr_ip),startses,UNIX_TIMESTAMP(),usr_proper);
  DELETE FROM auth_now WHERE ip = get_ip(usr_id) LIMIT 1;
END

Насколько я понял, все упирается в этот sql запрос

Код:
INSERT INTO auth_log (`uid`,`ip`,`start`,`end`,`properties`) VALUES (usr_id,INET_ATON(usr_ip),startses,UNIX_TIMESTAMP(),usr_proper);

насколько я понял, эта строка
Код:
mod=pppoe;user=F4:EC:38:F2:40:0F;nas=10.20.0.2
Находится в переменной usr_proper, как правильно в код дописать замену?
Записан
Roman
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 14


Просмотр профиля Email
« Ответ #4 : 30 Августа 2017, 19:05:53 »

Скорее всего мне поможет эта строка в radupdate нужно сделать замену.
Код:
CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));

ну и в radstop внести что-то подобное.
Записан
Roman
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 14


Просмотр профиля Email
« Ответ #5 : 31 Августа 2017, 12:58:14 »

Скорее всего мне поможет эта строка в radupdate нужно сделать замену.
Код:
CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));

Да, именно это и помогло. Старую базу скопировал  в новую sql запросом

Код:
insert into `auth_log_test` (`id`,`uid`,`start`,`end`,`properties`) SELECT `id`,`uid`,`start`,`end`,REPLACE(`properties`,':','') as `properties` FROM `auth_log`

После этого старую грохнул а новую переименовал. Теперь даже прошлые маки отображаются корректно.

Вопрос решен. Тему можно закрывать.
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!