Не видит сервер Guardant Net при попытке GrdLogin

Добрый день,
Приобрели Ваш продукт, пробую как с ним работать. По вашим урокам начал пробовать подключиться к ключу. Нашел ключик, отобразил информацию о нем, но при попытке

GrdLogin(hGrd, $FFFFFFFF, GrdLM_PerStation);

Возвращает ошибку 12 - Сервер Guardant Net не найден

В чем может быть причина.

Re: Не видит сервер Guardant Net при попытке GrdLogin

Здравствуйте, Дмитрий Бурцев.

Для скорейшей локализации проблемы выложите, пожалуйста, весь код, от инициализации Guardant API (GrdStartup) до вызова "проблемной" функции (в данном случае это GrdLogin).

Также приложите скриншот web-интерфейса сервера сетевых ключей Guardant Net (подробно, сервер сетевых ключей описан в первой части руководства пользователя Guardant, по умолчанию вся документация находится в одной папке с установленным комплектом разработчика: %Program Files%\Guardant\Guardant 6\%Public Code%\Doc\) и укажите версию используемого Вами комплекта разработчика.

(2013-07-31 11:28:17 отредактировано Дмитрий Бурцев)

Re: Не видит сервер Guardant Net при попытке GrdLogin

Использую последнюю версию 6.2

  mmo1.Clear;

  mmo1.Lines.Add('Инициализация Guardant API...');
  // Инициализация Guardant API
  nRet := GrdStartupEx(GrdFMR_Remote, nil, nil);
  ErrorHandling(nil,nRet); { Проверка наличия ошибок }

  mmo1.Lines.Add('Создаем хэндл контейнера Guardant API');
  // Создаем хэндл контейнера Guardant API
  hGrd := GrdCreateHandle(nil, GrdCHM_SingleThread, nil);

  // Шифруем пароли доступа для демонстрационных ключей
  dwPublic:= $???-CryptPU;                //вместо ??? код =)
  dwPrivRD:= $???-CryptRD;                //вместо ??? код =)

  mmo1.Lines.Add('Устанавливаем пароли доступа к ключу');
  // Устанавливаем пароли доступа к ключу (перед этим расшифровав их)
  nRet:= GrdSetAccessCodes(hGrd,   dwPublic + CryptPU,  dwPrivRD + CryptRD, 0, 0 );
  ErrorHandling(hGrd,nRet);

  Keys := 0;

  mmo1.Lines.Add('Поиск ключа и отображение о нем информации');
  // Поиск всех ключей и отображение в отладочном режиме их ID

  nRet:= GrdFind(hGrd,  GrdF_First, @dwID, @GrdFindInfo);
  if ( nRet = GrdE_OK ) then
    begin
      Inc(Keys);
      mmo1.Lines.Add('Подробная информация о первом найденном ключе: ');
      mmo1.Lines.Add('ID ключа = ' + IntToStr(GrdFindInfo.dwID));
      mmo1.Lines.Add('Публичный код = 0x'+ IntToHex(GrdFindInfo.dwPublicCode,8) );
      mmo1.Lines.Add('Версия прошивки = ' + IntToStr(GrdFindInfo.byHrwVersion)  );
      mmo1.Lines.Add('Ресурс сетевого ключа (макс) = ' + IntToStr(GrdFindInfo.byMaxNetRes) );
      mmo1.Lines.Add('Тип ключа = ' + IntToHex(GrdFindInfo.wType,4) );
      mmo1.Lines.Add('Номер программы = ' + IntToStr(GrdFindInfo.byNProg) );
      mmo1.Lines.Add('Версия программы = ' + IntToStr(GrdFindInfo.byVer) );
      mmo1.Lines.Add('Серийный номер = ' + IntToStr(GrdFindInfo.wSN) );
      mmo1.Lines.Add('Битовая маска  = ' + IntToStr( GrdFindInfo.wMask));
      mmo1.Lines.Add('Счетчик  = ' + IntToStr( GrdFindInfo.wGP));
      mmo1.Lines.Add('Реальный сетевой ресурс =  ' + IntToStr( GrdFindInfo.wRealNetRes));
      mmo1.Lines.Add('Индекс = ' + IntToStr( GrdFindInfo.dwIndex));
      mmo1.Lines.Add('--------------------------------------------------------');
    end else begin
      mmo1.Lines.Add('Ключи не найдены');
      btn2.Click;
    end;

  mmo1.Lines.Add('Регистрация клиента на сервере');
  nRet := GrdLogin(hGrd, $FFFFFFFF, GrdLM_PerStation);   
  ErrorHandling(hGrd, nRet);  //ТУТ nRET = 12
  mmo1.Lines.Add('--------------------------------------------------------');




К сожалению прикрепить изображение не получается, пишет что большой файл, хотя размер 44 кбайта

Re: Не видит сервер Guardant Net при попытке GrdLogin

Дмитрий Бурцев пишет:

mmo1.Lines.Add('Устанавливаем пароли доступа к ключу');
  // Устанавливаем пароли доступа к ключу (перед этим расшифровав их)
  nRet:= GrdSetAccessCodes(hGrd,   dwPublic + CryptPU,  dwPrivRD + CryptRD, 0, 0 );
  ErrorHandling(hGrd,nRet);
  Keys := 0;
  mmo1.Lines.Add('Поиск ключа и отображение о нем информации');
  // Поиск всех ключей и отображение в отладочном режиме их ID
  nRet:= GrdFind(hGrd,  GrdF_First, @dwID, @GrdFindInfo);

В данном коде пропущен вызов функции GrdSetFindMode, которая устанавливает условия поиска ключа, для работы с которым (получения лицензии для дальнейшей работы на сервере Guardant Net) далее будет вызываться GrdLogin.

Подробное описание последовательности вызовов, минимально необходимого набора функций, указан в справочной системе по Guardant API (GrdAPI.chm).

(2013-07-31 12:53:36 отредактировано Дмитрий Бурцев)

Re: Не видит сервер Guardant Net при попытке GrdLogin

Даже если есть такой вот кусок кода

  dwRemoteMode:= GrdFMR_Remote;   
  dwFlags:= GrdFM_NProg;          { Ищем по номеру программы }
  dwID:=   0;                      { ID ключа. Не используется }
  byProg:= 4;                     { Номер нашей программы  }
  wSN:=    0;                      { Серийный номер. Не используется    }
  byVer:=  0;                   { Версия. Не используется   }
  wMask:=  0;                  { Маска ключа }
  wType:=  0;
  dwModel:= GrdFMM_ALL;         {Все возможные модели }
  dwInterface:= GrdFMI_ALL;     { Все возможные интерфейсы }

  nRet := GrdSetFindMode(hGrd,  dwRemoteMode, dwFlags, byProg, dwID, wSN, byVer, wMask, wType, dwModel, dwInterface );
  ErrorHandling(hGrd,nRet);


Перед поиском ключа, ничего не меняется, да он находит ключ и его информацию, но не может выполнить функцию GrdLogin

Re: Не видит сервер Guardant Net при попытке GrdLogin

Дмитрий Бурцев пишет:

Перед поиском ключа, ничего не меняется, да он находит ключ и его информацию, но не может выполнить функцию GrdLogin

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

  • В приложении указанны корректные коды доступа без ошибок;

  • В одной директории с исполняемым файлом защищенного приложения находится корректно настроенный конфигурационный файл "gnclient.ini". Если такой файл имеется, то обязательно необходимо заменить содержимое этого файла, содержимым, скопированным из web-интерфейса сервера сетевых ключей, полученного по ссылке "Получить ini-файл клиента". После сохранения нового содержимого в "gnclient.ini", надо запустить защищенное приложение;

  • Параметры, установленные для функции GrdSetFindMode, действительно соответствую аналогичным данным, прошитым в тестируемом ключе:

Дмитрий Бурцев пишет:

  dwRemoteMode:= GrdFMR_Remote;   
  dwFlags:= GrdFM_NProg;          { Ищем по номеру программы }
  dwID:=   0;                      { ID ключа. Не используется }
  byProg:= 4;                     { Номер нашей программы  }
  wSN:=    0;                      { Серийный номер. Не используется    }
  byVer:=  0;                   { Версия. Не используется   }
  wMask:=  0;                  { Маска ключа }
  wType:=  0;
  dwModel:= GrdFMM_ALL;         {Все возможные модели }
  dwInterface:= GrdFMI_ALL;     { Все возможные интерфейсы }

  • Важно: Необходимо точно убедиться и в том, что работе защищенного приложения и сервера сетевых ключей Guardant Net не мешают различные средства проактивной защиты - антивирусы, фаерволы, доменные политики, прокси-сервера и.тп, а также настройки маршрутизации внутри конкретной ЛВС и даже вредоносное ПО, например.
    Для того, чтобы установить отсутствие влияния указанных факторов, необходимо провести тестирование по следующему алгоритму:

1) Взять два ПК полностью отключенных от ЛВС (желательно не из числа тех, на которых ведется текущее тестирование);
2) На одном установить драйвер, подсоединить ключ и запустить сервер Guardant Net, а на другом установить защищенное приложение;
3) Соединить данные две машины, прямым (без использования хабов или маршрутизаторов), кроссовым патчкордом;
4) Вручную настроить стандартную (вида: 192.168.x.x) подсеть между данными компьютерами;
5) Выключить абсолютно все средства проактивной защиты запущенные на обоих компьютерах;
6) Запустить защищенное приложение на ПК-клиенте.
  • Необходимо поменять стандартные сетевые порты (секция [SERVER], параметр PORT=) соединения в конфигурационных файлах сервера (grdsrv.ini) и защищенного приложения (gnclient.ini), т.к. стандартные порты указанные "по умолчанию" могут быть уже заняты другим ПО, используемым Вами.

Также уточните, нормально ли у Вас выполняется наш стандартный пример (все примеры находятся в одной папке с установленным комплектом разработчика, директория по умолчанию: " %Program Files%\Guardant\Guardant 6\%Public Code%\Samples\x86\Win32\General Guardant API) с учетом всех вышеизложенных рекомендаций?

Обратите внимание на то, что для корректной работы примера нужно в файле с его исходным кодом  вместо DEMO-кодов доступа указать все Ваши коды (коды в примере задаются с определенным смещением, которое сначала вычитается, а потом, при вызове GrdSetAccessCodes, снова прибавляется), а в тестируемый электронный ключ должна быть прошита стандартная маска - образ, содержащий демонстрационные алгоритмы (см. руководство пользователя, стр. 40).

Антон Тихиенко пишет:

скриншот web-интерфейса сервера сетевых ключей Guardant Net

Выложите на любом хостинге картинок и укажите здесь ссылку на него.

(2013-07-31 14:49:45 отредактировано Дмитрий Бурцев)

Re: Не видит сервер Guardant Net при попытке GrdLogin

Спасибо, попробуем =)

Только скажите, когда используется функция GrdFind и считывание информации по ключу, это означает то, что все коды введены верно?

Re: Не видит сервер Guardant Net при попытке GrdLogin

Дмитрий Бурцев пишет:

Только скажите, когда используется функция GrdFind и считывание информации по ключу, это означает то, что все коды введены верно?

Нет. GrdFind (в отличии, например, от GrdLogin) умеет работать и без кодов доступа. Использование данной функции подобным образом показано на примере консольного приложения - сhknsk.

Re: Не видит сервер Guardant Net при попытке GrdLogin

Все, решена проблема!

Оказывается, когда мне передавали коды (внутри компании), то публичный код оказался правильным, а код на чтение ошиблись одним символом. Все заработало.

Спасибо за оперативность.