На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Создаю агент расширения snmp, служба snmp не передаёт в мою dll snmp-команду get
    Создаю агент расширения snmp ( http://habrahabr.ru/post/147365/ ).

    Моей dll-кой нормально принимается snmp-запросы только типа GetNext. Snmp-запросы типа Get не принимаются.

    Снифер SmartSniff показывает, что пакет команды Get доходит до windows-службы snmp нормально. Но дольше в функцию SnmpExtensionQuery моей dll-ки ничего не передаётся.

    С командой GetNext, windows-служба snmp вызывает SnmpExtensionQuery в моей dll-ке нормально.

    Код проекта:
    ExpandedWrap disabled
      library ProjectSnmpDll;
       
      uses
        Forms,
        MainUnit in 'MainUnit.pas',
        Assistent in 'Assistent.pas',
        Snmp in 'Snmp.pas',
        Mgmtapi in 'Mgmtapi.pas';
       
      {$R *.res}
       
      exports
       
        Init   name 'SnmpExtensionInit',
        Query name 'SnmpExtensionQuery';
       
      end.


    Код объявления функции Query:
    ExpandedWrap disabled
      function Query(bPduType:Byte;
                     pVarBindList:PSnmpVarBindList;
                     pErrorStatus:PAsnInteger32;
                     pErrorIndex:PAsnInteger32):boolean;  export;   stdcall;


    В чём я не прав?
      Цитата
      Но дольше в функцию SnmpExtensionQuery моей dll-ки ничего не передаётся.
      ...и где можно увидеть, что вы это делаете?
        raxp
        ...и где можно увидеть, что вы это делаете?
        [извините, не заметил что вы тут ответили]

        Экспортирую:
        ExpandedWrap disabled
          exports
            Init   name 'SnmpExtensionInit',
            Query name 'SnmpExtensionQuery';


        Дальше сама функция, обрабатывающая запросы:
        ExpandedWrap disabled
          //BOOL SNMP_FUNC_TYPE SnmpExtensionQuery(    BYTE bPduType,
          //                    SnmpVarBindList *pVarBindList,
          //                    AsnInteger32 *pErrorStatus,
          //                    AsnInteger32 *pErrorIndex)
          function Query(bPduType:Byte;
                         pVarBindList:PSnmpVarBindList;
                         pErrorStatus:PAsnInteger32;
                         pErrorIndex:PAsnInteger32):boolean;   export;   stdcall;

        Дальше - тело функции:
        ExpandedWrap disabled
          function Query(bPduType:Byte;
                         pVarBindList:PSnmpVarBindList;
                         pErrorStatus:PAsnInteger32;
                         pErrorIndex:PAsnInteger32):boolean;  export;   stdcall;
          begin
           
           pErrorIndex^ := 0;
           pErrorStatus^ := SNMP_ERRORSTATUS_NOERROR;
           case bPduType of
                    SNMP_PDU_GETNEXT:
                      begin
                      //работаем; команды типа GETNEXT доходят
                      Assist.LogMessageAdd('GETNEXT OK');
                      end;
                    SNMP_PDU_GET:
                      begin
                      //команды типа GET не доходят
                      Assist.LogMessageAdd('GET OK');
                      end;
                    else //case bPduType of
           begin
           Assist.LogMessageAdd('Неизвестное значение bPduType: ' + IntToStr(bPduType));
           //ErrorStatus := SNMP_ERRORSTATUS_NOACCESS;
           //errorIndex := 1;
           end;
          Цитата VLeshka @
          //работаем; команды типа GETNEXT доходят
          //команды типа GET не доходят

          Ну сам подумай - если одно "доходит", а другое нет, то либо константа SNMP_PDU_GET неверно объявлена, либо этот запрос действительно не посылается
            Цитата leo @
            Ну сам подумай - если одно "доходит", а другое нет, то либо константа SNMP_PDU_GET неверно объявлена, либо этот запрос действительно не посылается

            Насчёт правильности константы - заместо неё поставлял целые числа.
            Но даже если вдруг константа не подпадает ни под одно "известное" (не находящееся в списке выбора case) мне значение, то срабатывает блок else, выводящий сообщение о неизвестном значении константы.
            Запрос посылается, т.к. это видно снифером SmartSniff - он ясно показывает, что пакет команды Get доходит до windows-службы snmp нормально.
            P.S. антивирусников, брандмауэров нет.
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0.0687 ]   [ 15 queries used ]   [ Generated: 22.09.26, 13:06 GMT ]