BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 11 ноя 2024, 01:49

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Как распарсить данные Opt.82
СообщениеДобавлено: 20 мар 2018, 09:01 
Не в сети

Зарегистрирован: 24 июл 2007, 10:58
Сообщения: 89
Карма: 0
Здравствуйте. Подскажите как распарсить данные Opt.82 поступающие на сервер в строковом формате?
DHCP option 82 Huawei OLT MA5603T (GPON)
Не получается распарсить ответ релея Huawei MA5603T, он выдает строковое значение VLAN и PON-порт (Circuit-ID).

Это TCP dump сервера:
IP (tos 0x0, ttl 255, id 36385, offset 0, flags [none], proto UDP (17), length 369)
x.x.x.3.67 > x.x.x.30.67: BOOTP/DHCP, Request from d4:ca:6d:58:c7:de, length 341, hops 1, xid 0x55455574, secs 2, Flags [Broadcast]
Gateway-IP x.x.x.3
Client-Ethernet-Address d4:ca:6d:58:c7:de
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Discover
Parameter-Request Option 55, length 7:
Subnet-Mask, Classless-Static-Route, Default-Gateway, Static-Route
Domain-Name-Server, NTP, Option 138
Hostname Option 12, length 8: "MikroTik"
Client-ID Option 61, length 7: ether d4:ca:6d:58:c7:de
Agent-Information Option 82, length 39:
Circuit-ID SubOption 1, length 23: 48575443AE25BD84/14/701
Remote-ID SubOption 2, length 12: 643E8CAC8882

В логах биллинга:
03-20/11:50:43 INFO [dhcpLstnr-p-10-t-8] AbstractInetDhcpProcessor2 - REQUEST:
Message type: BOOT_REQUEST
Dhcp message type: DHCP Discover{1}
htype: 1, hlen: 6, hops: 1
xid: 1430607220, secs: 7, flags: 11111111111111111000000000000000
Client IP: 0.0.0.0
Your IP: 0.0.0.0
Server IP: 0.0.0.0
Relay IP: x.x.x.3
Client MAC: {D4CA6D58C7DE}
Param request list{55}={1, 121, 3, 33, 6, 42, -118}
Host name{12}={MikroTik}
Client-ident.{61}={01D4CA6D58C7DE}
Agent information{82}=
sub{1}={343835373534343341453235424438342F31342F373031}
sub{2}={363433453843414338383832}

03-20/11:50:43 DEBUG [dhcpLstnr-p-10-t-8] AbstractInetDhcpProcessor2 - OP_BOOT_REQUEST
03-20/11:50:43 DEBUG [dhcpLstnr-p-10-t-8] AbstractInetDhcpProcessor2 - Found device by giaddr id=13
03-20/11:50:43 DEBUG [dhcpLstnr-p-10-t-8] AbstractInetDhcpProcessor2 - Found subDevice by identifier id=29
03-20/11:50:43 DEBUG [dhcpLstnr-p-10-t-8] InetDhcpProcessor2 - DHCP_DISCOVER
03-20/11:50:43 DEBUG [dhcpLstnr-p-10-t-8] InetDhcpProcessor2 - request.giaddr= x.x.x.3, clientAddress=/x.x.x.3:67
03-20/11:50:43 INFO [dhcpLstnr-p-10-t-8] InetDhcpDevice - Search serv on deviceId: 29; 2; vlanId: 0
03-20/11:50:43 INFO [dhcpLstnr-p-10-t-8] InetDhcpProcessor2 - InetServ not found.

_________________
Сервер: вер. 7.1.1021 / 11.09.2018 13:02:44
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_73
inet: вер. 7.1.628 / 11.09.2018 13:02:53


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 20 мар 2018, 12:05 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Код:
# Параметры для извлечения из пакета agentRemoteId
# вид значения в опции agentRemoteId: 0 (по умолчанию) - байты, 1 - строка
#dhcp.option82.agentRemoteId.type=0

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 20 мар 2018, 12:33 
Не в сети

Зарегистрирован: 24 июл 2007, 10:58
Сообщения: 89
Карма: 0
С Remote-ID SubOption 2 - извлекается и устройство находится.
Нужно распарсить Circuit-ID SubOption 1
Circuit-ID SubOption 1, length 23: 48575443AE25BD84/14/701
Серийник/порт/vlan.

_________________
Сервер: вер. 7.1.1021 / 11.09.2018 13:02:44
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_73
inet: вер. 7.1.628 / 11.09.2018 13:02:53


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 21 мар 2018, 16:43 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Код:
    private static final Pattern splitPattern = Pattern.compile( "\\s*[/\\s]\\s*" );

   @Override
   public void preprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
      throws Exception
   {
        DhcpOption circuitIdOption = request.getSubOption( (byte)1 );
        DhcpOption remoteIdOption = request.getSubOption( (byte)2 );

        if( circuitIdOption == null || remoteIdOption == null )
        {
            logger.info( "Options circuitId or remoteId not found" );
            return;
        }

        String remoteIdString = new String( remoteIdOption.value, "UTF8" );
        String circuitIdString = new String( circuitIdOption.value, "UTF8" );

        logger.info( "circuitId: " + circuitIdString );

        String[] circuitIdArray = splitPattern.split( circuitIdString );


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 22 мар 2018, 07:55 
Не в сети

Зарегистрирован: 24 июл 2007, 10:58
Сообщения: 89
Карма: 0
Спасибо. Не могу скомпилировать скрипт, выдает ошибки.

Код:
import java.util.Arrays;
 
import ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket;
import ru.bitel.bgbilling.kernel.network.dhcp.DhcpProtocolHandler;
import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandlerAdapter;
import ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor;
 
public class Dhcp82ProtocolHandler
    extends ProtocolHandlerAdapter
    implements DhcpProtocolHandler


  private static final Pattern splitPattern = Pattern.compile( "\\s*[/\\s]\\s*" );

   @Override
   public void preprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
      throws Exception
   {
        DhcpOption circuitIdOption = request.getSubOption( (byte)1 );
        DhcpOption remoteIdOption = request.getSubOption( (byte)2 );

        if( circuitIdOption == null || remoteIdOption == null )
        {
            logger.info( "Options circuitId or remoteId not found" );
            return;
        }

        String remoteIdString = new String( remoteIdOption.value, "UTF8" );
        String circuitIdString = new String( circuitIdOption.value, "UTF8" );

        logger.info( "circuitId: " + circuitIdString );

        String[] circuitIdArray = splitPattern.split( circuitIdString );
    }     


Вложение:
Скриншот 22-03-2018 105312.png
Скриншот 22-03-2018 105312.png [ 121.41 КБ | Просмотров: 5282 ]


Подскажите где ошибка?

Спасибо!

_________________
Сервер: вер. 7.1.1021 / 11.09.2018 13:02:44
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_73
inet: вер. 7.1.628 / 11.09.2018 13:02:53


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 22 мар 2018, 17:14 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Так пишет же, { не хватает.
Код:
implements DhcpProtocolHandler
{


должно быть


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 23 мар 2018, 08:11 
Не в сети

Зарегистрирован: 24 июл 2007, 10:58
Сообщения: 89
Карма: 0
Все равно с ошибками. Если есть у кого рабочий скрипт, поделитесь пожалуйста. Или скажите в какой скрипт добавить этот код? И куда именно?

_________________
Сервер: вер. 7.1.1021 / 11.09.2018 13:02:44
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_73
inet: вер. 7.1.628 / 11.09.2018 13:02:53


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 23 мар 2018, 10:37 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Код:
import java.util.Arrays;
 
import ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket;
import ru.bitel.bgbilling.kernel.network.dhcp.DhcpProtocolHandler;
import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandlerAdapter;
import ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor;
 
public class Dhcp82ProtocolHandler
    extends ProtocolHandlerAdapter
    implements DhcpProtocolHandler
{

  private static final String splitPattern = "\\s*[/\\s]\\s*";

   @Override
   public void preprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
      throws Exception
   {
        DhcpOption circuitIdOption = request.getSubOption( (byte)1 );
        DhcpOption remoteIdOption = request.getSubOption( (byte)2 );

        if( circuitIdOption == null || remoteIdOption == null )
        {
            logger.info( "Options circuitId or remoteId not found" );
            return;
        }

        String remoteIdString = new String( remoteIdOption.value, "UTF8" );
        String circuitIdString = new String( circuitIdOption.value, "UTF8" );

        logger.info( "circuitId: " + circuitIdString );

        String[] circuitIdArray = circuitIdString.split(splitPattern);
    }

}



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 23 мар 2018, 14:36 
Не в сети

Зарегистрирован: 24 июл 2007, 10:58
Сообщения: 89
Карма: 0
Вложение:
Скриншот 23-03-2018 173055.png
Скриншот 23-03-2018 173055.png [ 136.75 КБ | Просмотров: 5241 ]

_________________
Сервер: вер. 7.1.1021 / 11.09.2018 13:02:44
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_73
inet: вер. 7.1.628 / 11.09.2018 13:02:53


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 23 мар 2018, 20:49 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Код:
package ...

import java.util.Arrays;

import org.apache.log4j.Logger;
 
import ru.bitel.bgbilling.kernel.network.dhcp.DhcpOption;
import ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket;
import ru.bitel.bgbilling.kernel.network.dhcp.DhcpProtocolHandler;
import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandlerAdapter;
import ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor;
import ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor2;

public class Dhcp82ProtocolHandler
    extends ProtocolHandlerAdapter
    implements DhcpProtocolHandler
{
    private static final Logger logger = Logger.getLogger( Dhcp82ProtocolHandler.class );

    private static final String splitPattern = "\\s*[/\\s]\\s*";

    @Override
    public void preprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
        throws Exception
    {
        DhcpOption circuitIdOption = request.getSubOption( (byte)1 );
        DhcpOption remoteIdOption = request.getSubOption( (byte)2 );

        if( circuitIdOption == null || remoteIdOption == null )
        {
            logger.info( "Options circuitId or remoteId not found" );
            return;
        }

        String remoteIdString = new String( remoteIdOption.value, "UTF8" );
        String circuitIdString = new String( circuitIdOption.value, "UTF8" );

        logger.info( "circuitId: " + circuitIdString );
        logger.info( "remoteIdString: " + remoteIdString );

        String[] circuitIdArray = circuitIdString.split( splitPattern );

        request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, remoteIdString );
    }

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как распарсить данные Opt.82
СообщениеДобавлено: 26 мар 2018, 11:44 
Не в сети

Зарегистрирован: 24 июл 2007, 10:58
Сообщения: 89
Карма: 0
Спасибо, большое. Все заработало!

_________________
Сервер: вер. 7.1.1021 / 11.09.2018 13:02:44
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_73
inet: вер. 7.1.628 / 11.09.2018 13:02:53


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.046s | 42 Queries | GZIP : On ]