forum.bitel.ru http://forum.bitel.ru/ |
|
Не подставляется MAC адрес http://forum.bitel.ru/viewtopic.php?f=44&t=7119 |
Страница 1 из 2 |
Автор: | madmax [ 16 авг 2012, 23:12 ] |
Заголовок сообщения: | Не подставляется MAC адрес |
Имеем скрипт предобработки запроса в котором мак адрес приходит в поле Calling_Station_Id и заменяется с octets в strings Код: @Override public void preprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception { RadiusAttribute CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); } Пытаемся подставить мак адрес соответственно Прописали на устройстве Код: # Вендор атрибута, где хранится MAC-адрес radius.macAddress.vendor=-1 radius.macAddress.type=31 #radius.macAddress.prefix=client-mac-address= serv.macAddress.auto=1 Но ничего не происходит, что не так? в логах пусто. |
Автор: | Amir [ 17 авг 2012, 15:10 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
MAC-адрес должен быть проставлен как опция в предобработке. Это производится в обработчиках, которые идут в сборке, сам функционал реализован в ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusProtocolHandler Если делаете свой обработчик, то рекомендую наследоваться от него. Получает данные он по конфигурации Код: radius.macAddress.vendor=<по умолчанию radius.vendor>
radius.macAddress.type= radius.macAddress.prefix=<для cisco-avpair> |
Автор: | madmax [ 17 авг 2012, 15:30 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Но так и есть все наследуется от extends AbstractRadiusProtocolHandler. Вот скрипт Код: package ru.bitel.bgbilling.modules.inet.dyn.device.radius; import ru.bitel.bgbilling.kernel.network.radius.RadiusProtocolHandler; import ru.bitel.bgbilling.kernel.network.radius.RadiusDictionary; import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket; import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandler; import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandlerAdapter; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDevice; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDeviceType; import ru.bitel.common.Utils; import ru.bitel.bgbilling.kernel.*; import ru.bitel.common.sql.ConnectionSet; import ru.bitel.bgbilling.kernel.network.tlv.Tlv; import bitel.billing.common.TimeUtils; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Arrays; import java.util.Date; import java.util.Iterator; import java.util.List; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.xml.bind.annotation.adapters.XmlAdapter; import org.apache.log4j.Logger; import ru.bitel.bgbilling.kernel.network.radius.MSUtils; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttributeSet; import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket; import ru.bitel.bgbilling.kernel.network.radius.nas.Nas; import ru.bitel.bgbilling.server.util.DefaultServerSetup; import ru.bitel.bgbilling.server.util.ServerUtils; import ru.bitel.common.Utils; public class MacadnCoAProtocolHandler extends AbstractRadiusProtocolHandler implements RadiusProtocolHandler { @Override public void preprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception { RadiusAttribute CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); } } И в конфиге устройства прописано Код: radius.macAddress.vendor=-1 radius.macAddress.type=31 Но ничего не происходит |
Автор: | Amir [ 17 авг 2012, 16:27 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Код: public void preprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet )
throws Exception { RadiusAttribute CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); // обработка в классе-предке super.preprocessAccessRequest( request, response, connectionSet ); } |
Автор: | madmax [ 17 авг 2012, 16:45 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Прописали как вы сказали но все тихо. Попробовали даже изменить AbstractRadiusProtocolHandler создали TestRadiusProtocolHandler скопировали весь код и в куске кода добавили свои записи Код: @Override public void preprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception { RadiusAttribute CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); // устанавливаем MAC-адрес setMacAddress( request ); // устанавливаем состояние по наличию определенных атрибутов setStateFromAttributes( request ); } Но все также тихо, даже логи молчат |
Автор: | madmax [ 18 авг 2012, 22:34 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Нашли проблему, у нас запросы идут в EAP, отключили EAP и все заработало. Можете исправить проблему чтобы и с EAP работало. |
Автор: | Amir [ 21 авг 2012, 15:57 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Можно полный лог запросов EAP-сессии, от первого, до Access-Accept? |
Автор: | madmax [ 21 авг 2012, 16:37 ] | ||
Заголовок сообщения: | Re: Не подставляется MAC адрес | ||
Во вложении файл с логом
|
Автор: | Amir [ 21 авг 2012, 17:28 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
В EAP-TTLS настоящие данные, которым нужно доверять, передаются EAP-Message, зашифрованными. С опциям (т.е. с MAC-адресом) вроде несложно поправить. С атрибутами (Calling-Station-Id) надо подумать. |
Автор: | madmax [ 22 авг 2012, 10:01 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
А почему с атрибутами возникнет проблема. Например сейчас замечательно отрабатывает код preprocessAccessRequest в котором можно манипулировать с любыми полями радиуса |
Автор: | Amir [ 22 авг 2012, 13:12 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
В EAP-TTLS тунеллируется пакет внутри пакета, и тот, что туннелируется, и используется для работы (и нужно использовать по протоколу EAP-TTLS). А preprocessAccessRequest вызывается до туннелирования. Возможно нужно сделать еще один метод, который будет вызываться после туннелирования. Т.е. при обычной работе он будет вызываться также, как prerpocessAccessRequest, а при EAP - один раз, перед Access-Accept (т.е. не будет вызываться для каждого запроса EAP сессии - Request-Challenge-Request-Challenge-Request-Accept, как вызывается preprocessAccessRequest). |
Автор: | madmax [ 22 авг 2012, 14:24 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Теперь понятно. если возможно то этот самый "еще один метод" был бы решением проблемы. |
Автор: | madmax [ 09 ноя 2012, 19:57 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Скажите планируется ли создание еще одного метода вызываемого после туннелирования? |
Автор: | Amir [ 28 ноя 2012, 15:53 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Сделали, обработчик активации сервисов должен имплементировать интерфейс ru.bitel.bgbilling.modules.inet.radius.RadiusAccessRequestHandler |
Автор: | madmax [ 29 ноя 2012, 09:54 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
не пойму как это сделать. Сейчас есть такой код, как его можно изменить? Код: public void preprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception { RadiusAttribute CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); request.setStringAttribute( -1, RadiusDictionary.User_Name, Utils.bytesToHexString( CallingStationId.getDataAsByteArray())); request.setIntAttribute( -1, RadiusDictionary.NAS_Port, 0 ); super.preprocessAccessRequest( request, response, connectionSet ); - для авторизации по mac } @Override public void preprocessAccountingRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception { RadiusAttribute CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); request.setStringAttribute( -1, RadiusDictionary.User_Name, Utils.bytesToHexString( CallingStationId.getDataAsByteArray())); request.setIntAttribute( -1, RadiusDictionary.NAS_Port, 0 ); super.preprocessAccountingRequest( request, response, connectionSet ); - для авторизации по mac } Нужно сделать так Код: public void beforeAuthentication( ServerContext context, RadiusPacket request, RadiusPacket response ) throws Exception { RadiusAttribute CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); request.setStringAttribute( -1, RadiusDictionary.User_Name, Utils.bytesToHexString( CallingStationId.getDataAsByteArray())); request.setIntAttribute( -1, RadiusDictionary.NAS_Port, 0 ); super.preprocessAccessRequest( request, response, connectionSet ); - для авторизации по mac } @Override public void preprocessAccountingRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception { RadiusAttribute CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); request.setStringAttribute( -1, RadiusDictionary.User_Name, Utils.bytesToHexString( CallingStationId.getDataAsByteArray())); request.setIntAttribute( -1, RadiusDictionary.NAS_Port, 0 ); super.preprocessAccountingRequest( request, response, connectionSet ); - для авторизации по mac } И установить в обработчик процессора протокола? |
Автор: | Amir [ 29 ноя 2012, 13:41 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Да. Класс обработчика должен "implements RadiusAccessRequestHandler". Т.е., если было Код: public class MyCoAProtocolHandler , нужно: extends AbstractRadiusProtocolHandler implements RadiusProtocolHandler Код: public class MyCoAProtocolHandler extends AbstractRadiusProtocolHandler implements RadiusProtocolHandler, RadiusAccessRequestHandler В методе beforeAuthentication вместо Цитата: super.preprocessAccessRequest( request, response, connectionSet ); - для авторизации по mac super.preprocessAccessRequest( request, response, context.getConnectionSet() );Или, чтобы не путатся с названиями методов, вместо super.preprocessAccessRequest можно вызывать напрямую то, что нужно: Код: // устанавливаем MAC-адрес
super.setMacAddress( request ); // устанавливаем состояние по наличию определенных атрибутов super.setStateFromAttributes( request ); |
Автор: | Amir [ 29 ноя 2012, 13:57 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
И да, ошибся, не в обработчике активации сервисов, а в обработчике процессора протокола, конечно. |
Автор: | madmax [ 10 дек 2012, 15:12 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Не компилируется, выходит две ошибке в коде. добавил Код: import ru.bitel.bgbilling.modules.inet.radius.RadiusAccessRequestHandler; public class MacadnCoAProtocolHandler extends AbstractRadiusProtocolHandler implements RadiusProtocolHandler, RadiusAccessRequestHandler @Override public void beforeAuthentication( ServerContext context, RadiusPacket request, RadiusPacket response ) throws Exception { RadiusAttribute CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); request.setStringAttribute( -1, RadiusDictionary.User_Name, Utils.bytesToHexString( CallingStationId.getDataAsByteArray())); request.setIntAttribute( -1, RadiusDictionary.NAS_Port, 0 ); super.setMacAddress( request ); super.setStateFromAttributes( request ); } 1. в коде public void beforeAuthentication( ServerContext context, RadiusPacket request, RadiusPacket response ) - cannot find symbol ServerContext 2. в коде public class MacadnCoAProtocolHandler не вся ошибка видна но имеется запись на afterAuthentication |
Автор: | madmax [ 12 дек 2012, 16:41 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
что-то никак не получается. По разному пробую но все равно получаю ошибку. |
Автор: | Amir [ 12 дек 2012, 20:16 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Попробуйте так: Код: package ru.bitel.bgbilling.modules.inet.radius;
import java.util.Map; import java.util.Set; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttributeSet; import ru.bitel.bgbilling.kernel.network.radius.RadiusDictionary; import ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker; import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket; import ru.bitel.bgbilling.kernel.network.radius.RadiusProtocolHandler; import ru.bitel.bgbilling.kernel.network.radius.RadiusSession; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServType; import ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusProtocolHandler; import ru.bitel.common.Utils; public class MacadnCoAProtocolHandler extends AbstractRadiusProtocolHandler implements RadiusProtocolHandler, RadiusAccessRequestHandler { @Override public void beforeAuthentication( ServerContext context, RadiusPacket request, RadiusPacket response ) throws Exception { RadiusAttribute<?> CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); request.setStringAttribute( -1, RadiusDictionary.User_Name, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); request.setIntAttribute( -1, RadiusDictionary.NAS_Port, 0 ); super.setMacAddress( request ); super.setStateFromAttributes( request ); } @Override public void afterAuthorization( ServerContext conext, RadiusListenerWorker<InetNas> req, RadiusSession<InetNas, InetRadiusSessionParams> radiusSession, RadiusPacket request, RadiusPacket response ) throws Exception { } @Override public boolean addResponseAttributes( ServerContext context, InetServType inetServType, InetServ inetServ, RadiusPacket response, String realm, Map<String, RadiusAttributeSet> realmAttributeMap, RadiusAttributeSet inetServAttributes, Set<Integer> optionSet ) throws Exception { // return super.addResponseAttributes( context, inetServType, inetServ, response, realm, realmAttributeMap, inetServAttributes, optionSet ); return false; } } |
Автор: | madmax [ 13 дек 2012, 10:50 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
на этом куске кода выдает ошибки Код: @Override public void afterAuthorization( ServerContext conext, RadiusListenerWorker<InetNas> req, RadiusSession<InetNas, InetRadiusSessionParams> radiusSession, RadiusPacket request, RadiusPacket response ) throws Exception { } Что такие значения RadiusListenerWorker<InetNas> req, RadiusSession<InetNas, InetRadiusSessionParams> radiusSession не найдены |
Автор: | Amir [ 13 дек 2012, 16:48 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Случайно в системном пакете создал. Код: package ru.bitel.bgbilling.modules.dyn.inet.radius;
import java.util.Map; import java.util.Set; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttributeSet; import ru.bitel.bgbilling.kernel.network.radius.RadiusDictionary; import ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker; import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket; import ru.bitel.bgbilling.kernel.network.radius.RadiusProtocolHandler; import ru.bitel.bgbilling.kernel.network.radius.RadiusSession; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServType; import ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusProtocolHandler; import ru.bitel.bgbilling.modules.inet.radius.InetNas; import ru.bitel.bgbilling.modules.inet.radius.InetRadiusSessionParams; import ru.bitel.bgbilling.modules.inet.radius.RadiusAccessRequestHandler; import ru.bitel.common.Utils; public class MacadnCoAProtocolHandler extends AbstractRadiusProtocolHandler implements RadiusProtocolHandler, RadiusAccessRequestHandler { @Override public void beforeAuthentication( ServerContext context, RadiusPacket request, RadiusPacket response ) throws Exception { RadiusAttribute<?> CallingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); request.setStringAttribute( -1, RadiusDictionary.User_Name, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); request.setIntAttribute( -1, RadiusDictionary.NAS_Port, 0 ); super.setMacAddress( request ); super.setStateFromAttributes( request ); } @Override public void afterAuthorization( ServerContext conext, RadiusListenerWorker<InetNas> req, RadiusSession<InetNas, InetRadiusSessionParams> radiusSession, RadiusPacket request, RadiusPacket response ) throws Exception { } @Override public boolean addResponseAttributes( ServerContext context, InetServType inetServType, InetServ inetServ, RadiusPacket response, String realm, Map<String, RadiusAttributeSet> realmAttributeMap, RadiusAttributeSet inetServAttributes, Set<Integer> optionSet ) throws Exception { // return super.addResponseAttributes( context, inetServType, inetServ, response, realm, realmAttributeMap, inetServAttributes, optionSet ); return false; } } |
Автор: | madmax [ 14 дек 2012, 01:06 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Частично заработал код. Теперь вылетает ошибка где (MacadnCoAProtocolHandler.java:58) это Код: request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( CallingStationId.getDataAsByteArray() ) ); Вот такая ошибка Код: Common options: {macAddress=..?}
12-13/20:49:13 ERROR [rdsLstnr-p-8-t-5] InetRadiusProcessor - java.lang.NullPointerException at ru.bitel.bgbilling.modules.inet.dyn.device.radius.MacadnCoAProtocolHandler.beforeAuthentication(MacadnCoAProtocolHandler.java:58) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.authentication(InetRadiusProcessor.java:453) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.authentication(InetRadiusProcessor.java:1) at ru.bitel.bgbilling.kernel.network.radius.RadiusSession.authentication(RadiusSession.java:115) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPTTLSAuthenticator0.tunneledAuthentificating(EAPTTLSAuthenticator0.java:134) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPTLSAuthenticator.authenticate(EAPTLSAuthenticator.java:237) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPSession.handshake(EAPSession.java:187) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPSession.accessRequest0(EAPSession.java:91) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPSession.accessRequest(EAPSession.java:73) at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accessRequestImpl(RadiusProcessor.java:390) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.accessRequestImpl(InetRadiusProcessor.java:380) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.accessRequestImpl(InetRadiusProcessor.java:1) at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accessRequest(RadiusProcessor.java:377) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusListenerWorker.accessRequest(InetRadiusListenerWorker.java:58) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusListenerWorker.accessRequest(InetRadiusListenerWorker.java:1) at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.processPacket(RadiusListenerWorker.java:213) at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.runImpl(RadiusListenerWorker.java:135) at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:619) at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40) 12-13/20:49:13 WARN [rdsLstnr-p-8-t-5] InetNas - MAC-address not found. 12-13/20:49:13 INFO [rdsLstnr-p-8-t-5] InetRadiusProcessor - [username=qqq] InetServ not found. 12-13/20:49:13 INFO [rdsLstnr-p-8-t-5] InetRadiusProcessor - [username=qqq] Authenticated as inetServId:4 12-13/20:49:14 INFO [rdsLstnr-p-8-t-5] InetRadiusProcessor - Return code=0 12-13/20:49:14 INFO [rdsLstnr-p-8-t-5] InetRadiusListenerWorker - RESPONSE: |
Автор: | Amir [ 14 дек 2012, 14:00 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
В режиме DEBUG должен вывести перед ошибкой REQUEST_BEFORE_BEFOREAUTHENTICATION - это должен быть пакет внутри шифрованного туннеля. Покажите его вместе с обычным пакетом REQUEST_BEFORE_PREPROCESS. |
Автор: | madmax [ 14 дек 2012, 14:53 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
как видно он только передает атрибут User-Name=qqq а вот почему-то другие атрибуты не показывает Код: 12-14/14:48:54 DEBUG [rdsLstnr-p-8-t-1] InetRadiusProcessor - REQUEST_BEFORE_BEFOREAUTHENTICATION:
Packet type: null Identifier: 0 Authenticator: {CE 6F CA 7E 9A B5 14 03 93 E8 C7 8A 5C A6 1E 2D} Attributes: User-Name=qqq MS-CHAP2-Response={72 00 43 51 04 6F 22 F2 9A A6 2E 3E 0B 29 1E 2F 02 F4 00 00 00 00 00 00 00 00 1D E8 62 CD 26 57 D9 2A 12 14 00 3C EA BA 34 56 4F DC 42 9B B0 A3 E1 CF} MS-CHAP-Challenge={43 51 04 6F 22 F2 9A A6 2E 3E 0B 29 1E 2F 02 F4} 12-14/14:48:54 ERROR [rdsLstnr-p-8-t-1] InetRadiusProcessor - java.lang.NullPointerException at ru.bitel.bgbilling.modules.inet.dyn.device.radius.MacadnCoAProtocolHandler.beforeAuthentication(MacadnCoAProtocolHandler.java:58) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.authentication(InetRadiusProcessor.java:453) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.authentication(InetRadiusProcessor.java:1) at ru.bitel.bgbilling.kernel.network.radius.RadiusSession.authentication(RadiusSession.java:115) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPTTLSAuthenticator0.tunneledAuthentificating(EAPTTLSAuthenticator0.java:134) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPTLSAuthenticator.authenticate(EAPTLSAuthenticator.java:237) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPSession.handshake(EAPSession.java:187) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPSession.accessRequest0(EAPSession.java:91) at ru.bitel.bgbilling.kernel.network.radius.eap.EAPSession.accessRequest(EAPSession.java:73) at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accessRequestImpl(RadiusProcessor.java:390) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.accessRequestImpl(InetRadiusProcessor.java:380) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.accessRequestImpl(InetRadiusProcessor.java:1) at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accessRequest(RadiusProcessor.java:377) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusListenerWorker.accessRequest(InetRadiusListenerWorker.java:58) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusListenerWorker.accessRequest(InetRadiusListenerWorker.java:1) at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.processPacket(RadiusListenerWorker.java:213) at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.runImpl(RadiusListenerWorker.java:135) |
Автор: | madmax [ 17 дек 2012, 14:12 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Получается другие атрибуты он не видит. |
Автор: | Amir [ 17 дек 2012, 14:26 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Придется изменить интерфейс, в метод beforeAuthentication добавить аргумент, но его вроде бы только в тестовых пока используют. |
Автор: | Amir [ 17 дек 2012, 14:34 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Со следующем билдом можно будет сделать так: Код: package ru.bitel.bgbilling.modules.dyn.inet.radius;
import java.util.Map; import java.util.Set; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttributeSet; import ru.bitel.bgbilling.kernel.network.radius.RadiusDictionary; import ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker; import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket; import ru.bitel.bgbilling.kernel.network.radius.RadiusProtocolHandler; import ru.bitel.bgbilling.kernel.network.radius.RadiusSession; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServType; import ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusProtocolHandler; import ru.bitel.bgbilling.modules.inet.radius.InetNas; import ru.bitel.bgbilling.modules.inet.radius.InetRadiusSessionParams; import ru.bitel.bgbilling.modules.inet.radius.RadiusAccessRequestHandler; import ru.bitel.common.Utils; public class MacadnCoAProtocolHandler extends AbstractRadiusProtocolHandler implements RadiusProtocolHandler, RadiusAccessRequestHandler { @Override public void beforeAuthentication( ServerContext context, RadiusListenerWorker<InetNas> req, RadiusSession<InetNas, InetRadiusSessionParams> radiusSession, RadiusPacket tunneledRequest, RadiusPacket response ) throws Exception { RadiusPacket request = req.getRequest(); RadiusAttribute<?> callingStationId = request.getAttribute( -1, RadiusDictionary.Calling_Station_Id ); tunneledRequest.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, Utils.bytesToHexString( callingStationId.getDataAsByteArray() ) ); tunneledRequest.setStringAttribute( -1, RadiusDictionary.User_Name, Utils.bytesToHexString( callingStationId.getDataAsByteArray() ) ); tunneledRequest.setIntAttribute( -1, RadiusDictionary.NAS_Port, 0 ); super.setMacAddress( request ); super.setStateFromAttributes( request ); } @Override public void afterAuthorization( ServerContext conext, RadiusListenerWorker<InetNas> req, RadiusSession<InetNas, InetRadiusSessionParams> radiusSession, RadiusPacket tunneledRequest, RadiusPacket response ) throws Exception { } @Override public boolean addResponseAttributes( ServerContext context, InetServType inetServType, InetServ inetServ, RadiusPacket response, String realm, Map<String, RadiusAttributeSet> realmAttributeMap, RadiusAttributeSet inetServAttributes, Set<Integer> optionSet ) throws Exception { // return super.addResponseAttributes( context, inetServType, inetServ, response, realm, realmAttributeMap, inetServAttributes, optionSet ); return false; } } |
Автор: | madmax [ 17 дек 2012, 14:36 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Ок. как выйдет билд проверим |
Автор: | Amir [ 17 дек 2012, 15:49 ] |
Заголовок сообщения: | Re: Не подставляется MAC адрес |
Выложили. |
Страница 1 из 2 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |