WinSnmp响应消息始终在V1中 我正在用WinSnmp创建一个C++应用程序来管理Windows上的SNMP代理。 它工作得很好,但是我发送的所有“响应”消息都在V1(0)中,尽管我设置了SNMPAPI_UNTRANSLATED_V2 translate模式,GET请求在V2中。 我不明白为什么,我也不知道如何强制版本V2
我的代码:WinSnmp响应消息始终在V1中 我正在用WinSnmp创建一个C++应用程序来管理Windows上的SNMP代理。 它工作得很好,但是我发送的所有“响应”消息都在V1(0)中,尽管我设置了SNMPAPI_UNTRANSLATED_V2 translate模式,GET请求在V2中。 我不明白为什么,我也不知道如何强制版本V2,c++,snmp,winsnmp,C++,Snmp,Winsnmp,我的代码: 如果有人有主意。谢谢 看起来您的窗口的SNMP代理已损坏。即使是专业人士也会犯SNMP实现错误。几年前,我和一些非常昂贵的企业北电和思科交换机一起经历了一场噩梦。谢谢你的回答。我看看这是否真的有问题。这家供应商的标准操作规程。从2005年开始,他们也没有实现SNMP RFC4022。从1989年起,他们的另一个产品仍然没有实现IETF标准。 #include "stdafx.h" #include <Winsnmp.h> #pragma comment(lib, "W
如果有人有主意。谢谢 看起来您的窗口的SNMP代理已损坏。即使是专业人士也会犯SNMP实现错误。几年前,我和一些非常昂贵的企业北电和思科交换机一起经历了一场噩梦。谢谢你的回答。我看看这是否真的有问题。这家供应商的标准操作规程。从2005年开始,他们也没有实现SNMP RFC4022。从1989年起,他们的另一个产品仍然没有实现IETF标准。
#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;
}
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)