Создаю агент расширения snmp, служба snmp не передаёт в мою dll snmp-команду get
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.9] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Создаю агент расширения snmp, служба snmp не передаёт в мою dll snmp-команду get
|
Сообщ.
#1
,
|
|
|
|
Создаю агент расширения snmp ( http://habrahabr.ru/post/147365/ ).
Моей dll-кой нормально принимается snmp-запросы только типа GetNext. Snmp-запросы типа Get не принимаются. Снифер SmartSniff показывает, что пакет команды Get доходит до windows-службы snmp нормально. Но дольше в функцию SnmpExtensionQuery моей dll-ки ничего не передаётся. С командой GetNext, windows-служба snmp вызывает SnmpExtensionQuery в моей dll-ке нормально. Код проекта: ![]() ![]() 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: ![]() ![]() function Query(bPduType:Byte; pVarBindList:PSnmpVarBindList; pErrorStatus:PAsnInteger32; pErrorIndex:PAsnInteger32):boolean; export; stdcall; В чём я не прав? |
|
Сообщ.
#2
,
|
|
|
|
Цитата ...и где можно увидеть, что вы это делаете? Но дольше в функцию SnmpExtensionQuery моей dll-ки ничего не передаётся. |
|
Сообщ.
#3
,
|
|
|
|
raxp
...и где можно увидеть, что вы это делаете? [извините, не заметил что вы тут ответили] Экспортирую: ![]() ![]() exports Init name 'SnmpExtensionInit', Query name 'SnmpExtensionQuery'; Дальше сама функция, обрабатывающая запросы: ![]() ![]() //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; Дальше - тело функции: ![]() ![]() 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; |
|
Сообщ.
#4
,
|
|
|
|
Цитата VLeshka @ //работаем; команды типа GETNEXT доходят //команды типа GET не доходят Ну сам подумай - если одно "доходит", а другое нет, то либо константа SNMP_PDU_GET неверно объявлена, либо этот запрос действительно не посылается |
|
Сообщ.
#5
,
|
|
|
|
Цитата leo @ Ну сам подумай - если одно "доходит", а другое нет, то либо константа SNMP_PDU_GET неверно объявлена, либо этот запрос действительно не посылается Насчёт правильности константы - заместо неё поставлял целые числа. Но даже если вдруг константа не подпадает ни под одно "известное" (не находящееся в списке выбора case) мне значение, то срабатывает блок else, выводящий сообщение о неизвестном значении константы. Запрос посылается, т.к. это видно снифером SmartSniff - он ясно показывает, что пакет команды Get доходит до windows-службы snmp нормально. P.S. антивирусников, брандмауэров нет. |