forum.bitel.ru
http://forum.bitel.ru/

Прибить ограничения по МАС адресу
http://forum.bitel.ru/viewtopic.php?f=5&t=699
Страница 1 из 1

Автор:  SEA-Jay [ 24 янв 2008, 13:21 ]
Заголовок сообщения:  Прибить ограничения по МАС адресу

Можно попросить сделать скрипт, который выберет из базы по сессиям соответствие логин - мак адрес и автоматом пропишет его в ограничения логина, чтобы выйти клиент в будущем мог только со своего адреса

Автор:  Администратор [ 24 янв 2008, 16:05 ]
Заголовок сообщения: 

А может функцию в радиусе проще сделать автоматического занесения ограничения?

Автор:  SEA-Jay [ 25 янв 2008, 06:51 ]
Заголовок сообщения: 

1. Это будет заноситься для новых клиентов или для старых тоже?
2. Если человек вышел первый раз с одного мака а второй раз с другого, каким образом система поймет какой правильный мак?

Автор:  Администратор [ 25 янв 2008, 15:20 ]
Заголовок сообщения: 

1. у кого не стоит ограничение - будет ставить
2. ни как не поймет, первый раз приколотит. второй - будет звонить и просить убрать приколот.

Автор:  SEA-Jay [ 29 янв 2008, 16:55 ]
Заголовок сообщения: 

Согласен с данной функцией.

Как и где ее сделать? :-)

Автор:  Администратор [ 29 янв 2008, 17:28 ]
Заголовок сообщения: 

Для начала напишите письмо на billing@bitel.ru, вышлите краткое описание функции и ссылку на данную ветку обсуждения. Чтобы не забылось.

Автор:  Gankov [ 30 янв 2008, 04:07 ]
Заголовок сообщения: 

Согласен с предложением, тоже нужна такая функция. В какой версии планируете сделать?

Автор:  SEA-Jay [ 20 мар 2008, 08:04 ]
Заголовок сообщения: 

UP

Как дела в этом направлениии?

Автор:  Администратор [ 20 мар 2008, 15:09 ]
Заголовок сообщения: 

Запись в TODO есть, как будет время - сделаем. Гарантий по срокам никаких не даем.

Автор:  Amir [ 04 апр 2008, 18:26 ]
Заголовок сообщения: 

В 4.4 добавлено событие на аутентификацию. Вызывается после аутентификации, перед отправкой ответа.
Т.е. сейчас есть возможность скриптом занести ограничение, если его нет.
Цитата:
24.03.08 - Добавлено событие RADIUS-аутентификации (после аутентификации, перед отправкой ответа; event.getRequest|getResponse|getLogin|getContract|getErrorCode). Необходимо обновление BGRadiusDialup.

Автор:  SEA-Jay [ 29 июл 2008, 13:51 ]
Заголовок сообщения: 

Как доработать этот скрипт чтобы он сразу прописывал в договоре что клиенту можно выходить только с того мак адреса, с которого выходил 1 раз

import bitel.billing.server.radius.*;

prefix = "client-mac-address";
length = prefix.length();

attributes = request.getVendorAttributes( Vendors.CISCO, CiscoVendor.Cisco_AVPair );
if( attributes != null )
for( it = attributes.iterator(); it.hasNext(); )
{
ra = (RadiusAttribute)it.next();
value = ra.getStringValue();

if( value.startsWith( prefix ) )
{
request.setStringAttribute( RadiusStandartAttributes.Calling_Station_Id, value.substring( length + 1 ) );
}
}

Автор:  snark [ 31 июл 2008, 01:11 ]
Заголовок сообщения: 

2 SEA-Jay
Вы с ума сошли? если Вы измените этот скрипт так чтобы он проверял МАС - это убъет Ваш мускул! надо писать скрипт на радиус аутентификацию!

Автор:  Amir [ 31 июл 2008, 17:18 ]
Заголовок сообщения: 

Код выше должен быть в скрипте предобработки, чтобы при каждом подключении устанавливался caller-id

В скрипте на аутентификацию же можно поставить скрипт, который будет проверять наличие ограничений у логина и добавлять их, если они отсутсвуют.
Примерно такой:
Код:
import bitel.billing.server.call.bean.Login;
import bitel.billing.server.radius.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import java.util.*;
 
// event.getRequest|getResponse|getLogin|getContract|getErrorCode
errCode = event.getErrorCode();
if(errCode==0) {

 login = event.getLogin();
 ps = con.prepareStatement( "SELECT id FROM user_login_limit_{mid} WHERE lid=?" );
 ps.setInt(1, login.getId());
 rs = ps.executeQuery();
 if(!rs.next()){
  number = request.getStringAttribute( RadiusStandartAttributes.Calling_Station_Id ) );
  ps = con.prepareStatement( "INSERT INTO user_login_limit_{mid} (num,lid,sid,param1,param2,comment,type_con) VALUES (?,?,'',?,?,'',5)" );//5 - по номеру клиента
  ps.setInt(1, 0);//первое правило
  ps.setInt(2, login.getId());
  ps.setString(3, "1");//запретить
  ps.setString(4, "*");//все
  ps.executeUpdate();
 
  ps.setInt(1, 1);//второе правило
  ps.setString(3, "0");//разрешить
  ps.setString(4, number);//номер
  ps.executeUpdate();
 }
}

Автор:  mrustik [ 11 ноя 2008, 19:44 ]
Заголовок сообщения: 

А где этот скрипт на аутентификацию ставить??? Извините за глупый вопрос :oops:

Автор:  stark [ 12 ноя 2008, 12:55 ]
Заголовок сообщения: 

mrustik писал(а):
А где этот скрипт на аутентификацию ставить??? Извините за глупый вопрос :oops:

http://bgbilling.ru/v4.5/doc/ch07s08s01.html

Автор:  stark [ 12 ноя 2008, 13:16 ]
Заголовок сообщения: 

я ошибся скрипт в договоре : Автоматизация ->Функции скриптов поведения->там выбрать радиус- аутефикацию

Автор:  mrustik [ 12 ноя 2008, 13:16 ]
Заголовок сообщения: 

Amir писал(а):
Код выше должен быть в скрипте предобработки, чтобы при каждом подключении устанавливался caller-id
В скрипте на аутентификацию же можно поставить скрипт, который будет проверять наличие ограничений у логина и добавлять их, если они отсутсвуют.

в скрипте предобработки я поставил скрипт, чтобы при каждом подключении устанавливался caller-id. Другой скрипт писать после????

Автор:  mrustik [ 12 ноя 2008, 13:31 ]
Заголовок сообщения: 

stark писал(а):
я ошибся скрипт в договоре : Автоматизация ->Функции скриптов поведения->там выбрать радиус- аутефикацию

Там я скрипт поставил, а где его активизировать??????

Автор:  stark [ 12 ноя 2008, 14:07 ]
Заголовок сообщения: 

mrustik писал(а):
stark писал(а):
я ошибся скрипт в договоре : Автоматизация ->Функции скриптов поведения->там выбрать радиус- аутефикацию

Там я скрипт поставил, а где его активизировать??????

открыть договор и там есть "скрипт поведения" слева в дереве

Автор:  mrustik [ 12 ноя 2008, 16:14 ]
Заголовок сообщения: 

кстати, в этой строке выдает ошибку
Код:
number = request.getStringAttribute( RadiusStandartAttributes.Calling_Station_Id ) );

Автор:  stark [ 12 ноя 2008, 16:28 ]
Заголовок сообщения: 

mrustik писал(а):
кстати, в этой строке выдает ошибку
Код:
number = request.getStringAttribute( RadiusStandartAttributes.Calling_Station_Id ) );

какую?

Автор:  mrustik [ 12 ноя 2008, 17:31 ]
Заголовок сообщения: 

Код:
number = request.getStringAttribute( RadiusStandartAttributes.Calling_Station_Id ) );

1. Здесь нужна наверное одна скобка
2.
Код:
Parse error at line 16, column 86.  Encountered: )Parse error at line 16, column 86.  Encountered: )
   at bsh.Parser.generateParseException(Unknown Source)
   at bsh.Parser.jj_consume_token(Unknown Source)
   at bsh.Parser.Statement(Unknown Source)
   at bsh.Parser.BlockStatement(Unknown Source)
   at bsh.Parser.Block(Unknown Source)
   at bsh.Parser.Statement(Unknown Source)
   at bsh.Parser.IfStatement(Unknown Source)
   at bsh.Parser.Statement(Unknown Source)
   at bsh.Parser.BlockStatement(Unknown Source)
   at bsh.Parser.Block(Unknown Source)
   at bsh.Parser.Statement(Unknown Source)
   at bsh.Parser.IfStatement(Unknown Source)
   at bsh.Parser.Statement(Unknown Source)
   at bsh.Parser.BlockStatement(Unknown Source)
   at bsh.Parser.Line(Unknown Source)
   at bsh.Interpreter.Line(Unknown Source)
   at bsh.Interpreter.eval(Unknown Source)
   at bsh.Interpreter.eval(Unknown Source)
   at bsh.Interpreter.eval(Unknown Source)
   at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:58)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:308)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:192)
   at bitel.billing.server.processor.DefaultProcessor.standartAuth(DefaultProcessor.java:250)
   at bitel.billing.server.processor.dialup.DialUpProcessor.authenticationProcess(DialUpProcessor.java:72)
   at bitel.billing.server.radius.RadiusRequestThread.processRequest(RadiusRequestThread.java:120)
   at bitel.billing.server.radius.RadiusRequestThread.run(RadiusRequestThread.java:48)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)

Тут дело в чем-то другом, я убрал пару пустых строк, а ошибка все таже.

Автор:  snark [ 12 ноя 2008, 17:49 ]
Заголовок сообщения: 

mrustik писал(а):
Код:
Parse error at line 16, column 86.
вроде же русским по белому все сказало где искать ...

Автор:  mrustik [ 12 ноя 2008, 18:28 ]
Заголовок сообщения: 

Вначале у меня была line 16, column 86
Код:
number = request.getStringAttribute( RadiusStandartAttributes.Calling_Station_Id ) );

а сейчас
Код:
ps = con.prepareStatement( "INSERT INTO user_login_limit_{mid} (num,lid,sid,param1,param2,comment,type_con) VALUES (?,?,'',?,?,'',5)" );

Получается, что ошибка в чем-то другом

Автор:  mrustik [ 17 ноя 2008, 09:14 ]
Заголовок сообщения: 

У кого-нибудь этот скрипт рабjтает???????

Автор:  Amir [ 17 ноя 2008, 12:27 ]
Заголовок сообщения: 

После изменения скриптов радиуса нужно выполнить radius.sh flush_script_cache

Автор:  mrustik [ 18 ноя 2008, 10:23 ]
Заголовок сообщения: 

Вот рабочий скрипт:
Код:
import bitel.billing.server.call.bean.Login;
import bitel.billing.server.radius.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import java.util.*;
// event.getRequest|getResponse|getLogin|getContract|getErrorCode
errCode = event.getErrorCode();
if(errCode==0) {
 login = event.getLogin();
 ps = con.prepareStatement( "SELECT id FROM user_login_limit_{mid} WHERE lid=?" );
 ps.setInt(1, login.getId());
 rs = ps.executeQuery();
 if(!rs.next()){
  //Это строчку нужно поставить
  request = event.getRequest();
  number = request.getStringAttribute(RadiusStandartAttributes.Calling_Station_Id);
  ps = con.prepareStatement( "INSERT INTO user_login_limit_{mid} (num,lid,sid,param1,param2,comment,type_con) VALUES (?,?,'',?,?,'',5)" );
//5 - по номеру клиента
  ps.setInt(1, 0);//первое правило
  ps.setInt(2, login.getId());
  ps.setString(3, "1");//запретить
  ps.setString(4, "*");//все
  ps.executeUpdate();
  ps.setInt(1, 1);//второе правило
  ps.setString(3, "0");//разрешить
  ps.setString(4, number);//номер
  ps.executeUpdate();
 }
}

Нужно установить строку request = event.getRequest();
{mid} заменить кодом модуля DialUp.
Спасибо за помощь.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/