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

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2 3 4
  Печать  
Автор Тема: Вытаскивание маков юзеров из радиус запросов.  (Прочитано 24586 раз)
goletsa
NoDeny
Спец
*

Карма: 21
Offline Offline

Сообщений: 973


Просмотр профиля
« : 12 Октября 2009, 12:17:52 »

В логе радиуса пишутся такие параметры как мак и интерфейс пппове сервера:
Например:
Код:
Mon Oct 12 00:00:00 2009
        Service-Type = Framed-User
        Framed-Protocol = PPP
        NAS-Port = 17315
        NAS-Port-Type = Ethernet
        User-Name = "c-08-1372"
        Calling-Station-Id = "00:08:54:04:6A:20"
        NAS-Port-Id = "vlan6_obj"
        Acct-Session-Id = "818016ef"
        Framed-IP-Address = 10.5.251.191
        Acct-Authentic = RADIUS
        Event-Timestamp = "Oct 11 2009 23:59:47 MSD"
        Acct-Session-Time = 550
        Acct-Input-Octets = 916728
        Acct-Input-Gigawords = 0
        Acct-Input-Packets = 6394
        Acct-Output-Octets = 7974217
        Acct-Output-Gigawords = 0
        Acct-Output-Packets = 8032
        Acct-Status-Type = Interim-Update
        NAS-Identifier = "MikroTik"
        NAS-IP-Address = 192.168.0.10
        Acct-Delay-Time = 0
        Client-IP-Address = 192.168.0.10
        Acct-Unique-Session-Id = "fc01597bc77c3744"
        Timestamp = 1255291200

А можно ли както сделать чтобы при логине юзера по пппое в отдельную таблицу писались login\mac\nas-address?

В теории в недалеком будущем бы хотелось чтобы писалось например в отдельное поле таблицы dopdata...
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #1 : 12 Октября 2009, 20:41:32 »

А можно ли както сделать чтобы при логине юзера по пппое в отдельную таблицу писались login\mac\nas-address?

Да, в sql.conf в authorize_check_query предусмотреть передачу параметра Calling-Station-Id
а процедуре radcheck записать в нужную таблицу
Записан
serojperoj
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 72


Просмотр профиля
« Ответ #2 : 13 Октября 2009, 13:11:12 »

переделал чуток radcheck();
если комуто надо - привязка user+pass+MAC(только тех клиентов у кого в доп. поле указан MAC Address)

если кто-то сделал что-то вроде этого - просьба поделитесь =) так-как в мускуле я совсем новенький и уверен что есть иной более грамотный вариант этого скрипта.


Код:
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$  
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'==' AS Op
  FROM users WHERE name=login;
IF ((SELECT dopdata.field_value FROM users,dopdata WHERE dopdata.parent_id=users.id
  AND dopdata.template_num=1 AND dopdata.field_alias='_mac' AND users.name=login
  ORDER BY dopdata.revision DESC LIMIT 1) <> '') THEN

  SELECT users.id,users.name,'Calling-Station-Id' AS Attribute,dopdata.field_value AS Value,'==' AS Op
  FROM users,dopdata WHERE dopdata.parent_id=users.id AND dopdata.template_num=1
  AND dopdata.field_alias='_mac' AND users.name=login ORDER BY dopdata.revision DESC LIMIT 1;
END IF;
END$$
DELIMITER ;

запрос виглядет так:

Код:
mysql> use bill;
Database changed


Код:
mysql> call radcheck('seroj');
+----+-------+-----------+--------+----+
| id | name  | Attribute | Value  | Op |
+----+-------+-----------+--------+----+
|  1 | seroj | Password  | pass11 | == |
+----+-------+-----------+--------+----+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Код:
mysql> call radcheck('yazva');
+----+-------+-----------+---------+----+
| id | name  | Attribute | Value   | Op |
+----+-------+-----------+---------+----+
|  2 | yazva | Password  | pass222 | == |
+----+-------+-----------+---------+----+
1 row in set (0.00 sec)

+----+-------+--------------------+-------------------+----+
| id | name  | Attribute          | Value             | Op |
+----+-------+--------------------+-------------------+----+
|  2 | yazva | Calling-Station-Id | 00:34:58:5D:21:43 | == |
+----+-------+--------------------+-------------------+----+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
« Последнее редактирование: 13 Октября 2009, 13:33:55 от serojperoj » Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #3 : 13 Октября 2009, 13:21:01 »

я думаю
Код:
ORDER BY dopdata.revision DESC LIMIT 1
лучше заменить на подзапрос с выборкой наибольшей ревизии, см. представление users_rev. Мне кажется будет быстрее обрабатываться. Хотя надо, конечно, тестировать или план запроса смотреть
Записан
serojperoj
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 72


Просмотр профиля
« Ответ #4 : 14 Октября 2009, 01:22:40 »

наверное что-то типа этого..
1.
Код:
SELECT field_value FROM dopdata WHERE revision IN (SELECT rev FROM rev_users WHERE id IN (SELECT id FROM users where name=login)) AND field_alias='_mac';
2.
Код:
SELECT field_value from dopvalues where revision IN (SELECT rev FROM rev_users WHERE id IN (SELECT id FROM users where name=login)) and dopfield_id=4;

непомню точно в доках или на форуме было написано что dopdata=dopfields+dopvalues , тоесть смело можно пологать , что  второй запрос более легкий? и еще dopfield_id в таблице dopvalue неповторяютса?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #5 : 14 Октября 2009, 07:14:27 »

2.
Код:
SELECT field_value from dopvalues where revision IN (SELECT rev FROM rev_users WHERE id IN (SELECT id FROM users where name=login)) and dopfield_id=4;

непомню точно в доках или на форуме было написано что dopdata=dopfields+dopvalues , тоесть смело можно пологать , что  второй запрос более легкий? и еще dopfield_id в таблице dopvalue неповторяютса?
абсолютно верно, dopdata это объединение таблиц dopfields и dopvalues, поэтому 2й запрос будет легче. dopfield_id это ссылка на описание поля в таблице dopfields, совершенно правильно по field_alias был вычислен dopfield_id. Для одной ревизии dopfield_id не повторяется
Записан
Maks
NoDeny
Ветеран
*

Карма: 13
Offline Offline

Сообщений: 575


Скажи спасибо - подними карму.

https://t.me/smv https://t.me/smv_wz
Просмотр профиля Email
« Ответ #6 : 20 Августа 2010, 23:13:19 »

Я в Мускуле вообще не шарю, но задача у меня схожа с той что в этой теме.

Нужно чтоб когда абон подключался по PPPoE в его доп данных заносился мак с которого было подключение.
Но это нужно только для статистики, ограничений нет.
И нужно реализовать поиск по этим макам.

Тобиш я пишу мак, а мне ответ, что комп с этим маком подключался с таких, таких учеток.
Идеально было бы время подключения, но если это сильно усложняет задачу (увеличивает стоимость) то не нужно.

Кто сможет реализовать и какова будет стоимоть?
Записан

Nodeny общение
https://t.me/nodeny_chat
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #7 : 21 Августа 2010, 06:06:00 »

если через радиус, то измени процедуру авторизации, добавив один sql запрос Insert
Записан
Maks
NoDeny
Ветеран
*

Карма: 13
Offline Offline

Сообщений: 575


Скажи спасибо - подними карму.

https://t.me/smv https://t.me/smv_wz
Просмотр профиля Email
« Ответ #8 : 21 Августа 2010, 09:55:08 »

Да через радиус.
И в доп полях будут записываться все маки или последний с которого была авторизация?
Записан

Nodeny общение
https://t.me/nodeny_chat
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #9 : 21 Августа 2010, 10:07:36 »

можешь создать еще одно доп поле в БД и в него автоинкрементом будет каждый раз писаться новый мак.
но тогда правильней сделать еще одну таблицу для маков
чтобы одна учетная запись имела несколько маков.
типо поля ID, login, mac
и в нее постоянно дописывать маки, которые видит радиус

или вариант2, который быстрее и проще, это через update обновлять последний мак
Записан
elite
Начальник планеты
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1226

In LAN we trust!

358714596
Просмотр профиля
« Ответ #10 : 21 Августа 2010, 11:30:12 »

или вариант2, который быстрее и проще, это через update обновлять последний мак
нужно видеть, менялся ли мак адрес у абонента или нет Улыбающийся
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #11 : 21 Августа 2010, 18:04:45 »

Цитировать
SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'=='
    FROM users WHERE name=login;
далее сделать сравнение нового мака с тем что есть в бд
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #12 : 21 Августа 2010, 19:00:47 »

можешь создать еще одно доп поле в БД и в него автоинкрементом будет каждый раз писаться новый мак.
но тогда правильней сделать еще одну таблицу для маков
чтобы одна учетная запись имела несколько маков.
типо поля ID, login, mac
и в нее постоянно дописывать маки, которые видит радиус

или вариант2, который быстрее и проще, это через update обновлять последний мак

зачем так сложно. в доп дату писать новый мак только в том случае если єтот мак еще не бил в сети - тогда запросом можно вытаскивать все маки клиента - за одно контролировать - хотя контроль чисто .... мак легко меняется .
можно по дургому - надо проверять с того ли порта свича пришел мак - это более защищенно. кстати счас этим и занят - авторизация через веб с использованием вланов - не авторизированый зверь - только на страничу статистики и кнопка вход - запрос с тоголи порта свича пришел - если да то разрешим - елси нет то выведем соощение и уберем кнопку.переодически опрашиваем всех авторизированых на присутсвтие - если мак исчес из массива то (пользователь отключился ) переведем его порт обратно во влан авторизации. где то так. 
« Последнее редактирование: 21 Августа 2010, 19:06:16 от ser970 » Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #13 : 21 Августа 2010, 20:22:26 »

я думал тоже сделать так, но потом решил что для юзеров это геморно браузер подключать каждый раз.
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #14 : 21 Августа 2010, 21:16:43 »

я думал тоже сделать так, но потом решил что для юзеров это геморно браузер подключать каждый раз.
че геиморойно ? не совсем понял через что звери в однокласнки ходять? смыслн не каждый раз а только при включении компа (если он был отключен от сети более 300 сек)
Записан
Страниц: [1] 2 3 4
  Печать  
 
Перейти в:  

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