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

логины Dialup в сервисы inet... стат IP проставить
http://forum.bitel.ru/viewtopic.php?f=19&t=12269
Страница 1 из 1

Автор:  Akhmat [ 22 фев 2017, 19:13 ]
Заголовок сообщения:  логины Dialup в сервисы inet... стат IP проставить

по скрипту из вики http://wiki.bitel.ru/index.php/%D0%9A%D ... D1%8B_inet
конвертирую логины, все ок. но хочу проставить стат ип в сервисе... не проставляет никак.
ставлю ip из категории 5. вручную проставляется этот ip на сервис, скриптом нет.
Код:
...
         serv = new InetServ();
         serv.setContractId( cid );
         serv.setComment( "Импортирован из VPN" );
         serv.setDateFrom( dateFrom );
         serv.setDateTo( dateTo );
         serv.setLogin( login );
         serv.setPassword( pswd );
         serv.setTypeId( INET_SERV_TYPE_VPN_ID );
         serv.setSessionCountLimit( sessionCount );
         //serv.setDeviceId( inetDeviceId );
         if (lip>0) {//Если есть стат ИП пытаемся проставить
            byte[] bip = Utils.convertLongToBytes(lip) ;
            serv.setIpResourceId(5) ;
            serv.setIpResourceSubscriptionId(5) ;
            serv.setAddressFrom(bip) ;
            serv.setAddressTo(bip) ;
         }
...
                        wsServ.inetServUpdate( serv, new ArrayList<InetServOption>(), false, false, 0 );


в логах ошибка
Код:
add  new service for cid 667115;login tsoraev1
Error while updating  service  for contract 667115;login=tsoraev1:Подходящий ip ресурс не найден


Как проставить?

Автор:  barguzin2 [ 22 фев 2017, 20:01 ]
Заголовок сообщения:  Re: логины Dialup в сервисы inet... стат IP проставить

Ресурс и AddressTo не надо выставлять, достаточно только setAddressFrom

у меня строковые адреса были, сл. код нормально всё создавал
Код:
...
ipAddr = rs.getString(3);
byte[] ip = InetAddress.getByName(ipAddr).getAddress();
...
serv.setAddressFrom(ip);
wsInetServ.inetServUpdate(serv, new ArrayList<InetServOption>(), false, false, 0 );


Проверь еще после установки адреса в сервис вот такую команду, должна выводить ип в виде строки
Код:
print(InetAddress.getByAddress(serv.getAddressFrom()).getHostAddress());

Автор:  fmaks [ 22 фев 2017, 20:14 ]
Заголовок сообщения:  Re: логины Dialup в сервисы inet... стат IP проставить

Вот как-то так для статиков заводил:
Код:
...
                List<Integer> ipResourceCategoryIds = wsServ.ipResourceCategoryIds( inetServ.getDeviceId(), inetServ.getInterfaceId(), inetServ.getTypeId() );
                List<IpResourceNet> rangeList = wsResource.freeIpResourceNetList( ipResourceCategoryIds, null, inetServ.getDateFrom(), inetServ.getDateTo(), 30, Integer.MAX_VALUE );
...

                byte[] b = new byte[4];
                // Получаем ip в b ....
...
                boolean freeIpFound = false;
                for( IpResourceNet range: rangeList ) {
                    if( freeIpFound ) {
                        continue;
                    }

                    if( range.inNet( b ) ) {
                        inetServ.setIpResourceId( range.getIpResourceId() );
                        print( " found free ip resource" );
                       
                        inetServ.setAddressFrom( range.getSubnet() );
                        inetServ.setAddressTo( range.getMaxIp() );
                       
                        freeIpFound = true;
                    }
                }
                if( !freeIpFound ) {
                    print( " ERROR! free ip from resource not found for " + ip );
                    return false;
                }
               
                int serviceId = wsServ.inetServUpdate( inetServ, new ArrayList<InetServOption>(), false, false, 0 );

...


для вас, если это статика с одним ip должна быть маска /32
Код:
                List<IpResourceNet> rangeList = wsResource.freeIpResourceNetList( ipResourceCategoryIds, null, inetServ.getDateFrom(), inetServ.getDateTo(), 32, Integer.MAX_VALUE );

Автор:  fmaks [ 22 фев 2017, 20:25 ]
Заголовок сообщения:  Re: логины Dialup в сервисы inet... стат IP проставить

Хотя мой вариант, возможно, может не подойти, зависит от того, что у вас в типе сервиса указано "в типе адреса".

Автор:  Akhmat [ 22 фев 2017, 20:27 ]
Заголовок сообщения:  Re: логины Dialup в сервисы inet... стат IP проставить

barguzin2 писал(а):
Проверь еще после установки адреса в сервис вот такую команду, должна выводить ип в виде строки
Код:
print(InetAddress.getByAddress(serv.getAddressFrom()).getHostAddress());

Этот метод рабочий. Второй не пробовал.
Спасибо всем.

Автор:  Amir [ 22 фев 2017, 20:45 ]
Заголовок сообщения:  Re: логины Dialup в сервисы inet... стат IP проставить

Добавлю:
serv.setIpResourceId(5) в данном месте не нужен и не сработает, т.к. сервер сам пытается найти для указанного IP и устройства подходящий IP-ресурс (прописанный на устройстве или его предке).
Utils.convertLongToBytes(lip) - скорее всего вернет 8 байт, а надо 4.

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