Ответное сообщение WinSnmp всегда в V1

Я создаю приложение C ++ с WinSnmp для управления агентом SNMP в Windows.
Это работает довольно хорошо, но все сообщения «Ответ», которые я отправляю, находятся в V1 (0), хотя я установил режим преобразования SNMPAPI_UNTRANSLATED_V2 и запрос GET находится в V2.
Я не понимаю, почему, и я не знаю, как заставить версию V2.

Мой код:

#include "stdafx.h"#include <Winsnmp.h>

#pragma comment(lib, "Wsnmp32.lib")SNMPAPI_STATUS ReceiveMessage( HSNMP_SESSION hSession )
{
SNMPAPI_STATUS status;

HSNMP_ENTITY srcEntity, destEntity;
HSNMP_CONTEXT context;
HSNMP_PDU pdu;

status = SnmpRecvMsg(hSession, &srcEntity, &destEntity, &context, &pdu);
if (status == SNMPAPI_SUCCESS) {
smiINT pduType, errorStatus, errorIndex;
smiINT32 requestId;
HSNMP_VBL vbl = NULL;
if (pdu) {
if (SnmpGetPduData(pdu, &pduType, &requestId, &errorStatus, &errorIndex, &vbl) == SNMPAPI_SUCCESS) {

if (pduType == SNMP_PDU_GET) {
HSNMP_PDU responsePdu = SnmpCreatePdu(hSession, SNMP_PDU_RESPONSE, requestId, SNMP_ERROR_NOERROR, 0, vbl);

if (SnmpSendMsg(hSession, destEntity, srcEntity, context, responsePdu) != SNMPAPI_SUCCESS) {
printf("error");
}
SnmpFreePdu(responsePdu);
}

SnmpFreeVbl(vbl);
}
SnmpFreePdu(pdu);
}
SnmpFreeEntity(srcEntity);
SnmpFreeEntity(destEntity);
SnmpFreeContext(context);
}

return status;
}

static SNMPAPI_STATUS CALLBACK snmpCallback
(IN HSNMP_SESSION hSession,
IN HWND hWnd,
IN UINT wMsg,
IN WPARAM wParam,
IN LPARAM lParam,
IN LPVOID lpClientData)
{
SNMPAPI_STATUS res;
if (wParam == 0) {
res = ReceiveMessage(hSession);
} else if (wParam == SNMPAPI_TL_TIMEOUT) {
res = SNMPAPI_SUCCESS;
}

return res;
}

int _tmain(int argc, _TCHAR* argv[])
{
smiUINT32 majVersion, minorVersion, level, translateMode, retransmitMode;
if (SnmpStartupEx(&majVersion, &minorVersion, &level, &translateMode, &retransmitMode) == SNMPAPI_SUCCESS) {

if (SnmpSetTranslateMode(SNMPAPI_UNTRANSLATED_V2) != SNMPAPI_SUCCESS) {
printf("Unable to set translate mode");
}
HSNMP_SESSION hSession = SnmpCreateSession(NULL, 0, snmpCallback, NULL);
SnmpGetTranslateMode(&translateMode);
if (hSession) {
HSNMP_ENTITY localEntity = SnmpStrToEntity(hSession, "0.0.0.0");
SnmpListen(localEntity, SNMPAPI_ON);

while(true) {
Sleep(1000);
}
}
}

return 0;
}

Содержимое пакетов UDP, полученных и отправленных (с Wireshark):

No.     Time           Source                Destination           Protocol Length Info
126 2.592412000    10.247.29.212         10.247.29.112         SNMP     90     get-request 1.3.6.1.4.1.4865.2.100.1.800001.1.1.0

Internet Protocol Version 4, Src: 10.247.29.212 (10.247.29.212), Dst:
10.247.29.112 (10.247.29.112) User Datagram Protocol, Src Port: rapidbase (1953), Dst Port: snmp (161) Simple Network Management Protocol
version: v2c (1)
community: public
data: get-request (0)
get-request
request-id: 19
error-status: noError (0)
error-index: 0
variable-bindings: 1 item
1.3.6.1.4.1.4865.2.100.1.800001.1.1.0: Value (Null)
Object Name: 1.3.6.1.4.1.4865.2.100.1.800001.1.1.0 (iso.3.6.1.4.1.4865.2.100.1.800001.1.1.0)
Value (Null)

No.     Time           Source                Destination           Protocol Length Info
127 2.595141000    10.247.29.112         10.247.29.212         SNMP     90     get-response 1.3.6.1.4.1.4865.2.100.1.800001.1.1.0

Internet Protocol Version 4, Src: 10.247.29.112 (10.247.29.112), Dst:
10.247.29.212 (10.247.29.212) User Datagram Protocol, Src Port: 54034 (54034), Dst Port: rapidbase (1953) Simple Network Management Protocol
version: version-1 (0)
community: public
data: get-response (2)
get-response
request-id: 19
error-status: noError (0)
error-index: 0
variable-bindings: 1 item
1.3.6.1.4.1.4865.2.100.1.800001.1.1.0: Value (Null)
Object Name: 1.3.6.1.4.1.4865.2.100.1.800001.1.1.0 (iso.3.6.1.4.1.4865.2.100.1.800001.1.1.0)
Value (Null)

Если у кого-то есть идея. Спасибо !

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]