WINSNMP Response schlägt fehl bei SnmpRecvMsg



  • Liebes Community-Forum,

    ich versuche mich gerade in der WINSNMP-API einen SNMP-Manager zu erstellen.
    Das Senden der Get-Nachricht funktioniert. Der SNMP-Agent erhält die Nachricht und gibt auch eine Response-Nachricht zurück. Jedoch bricht schlägt mein SnmpRecvMsg mit dem Fehler 8 (NOOP) fehl.

    So sieht mein Code in Visual Studio 2013 Express aus:

    [code]
    #include <Windows.h>
    #include <WinInet.h>
    #include <WinSnmp.h>
    #include <iostream>

    using namespace std;

    SNMPAPI_STATUS CALLBACK snmpProc(HSNMP_SESSION hSession, HWND hWnd, UINT wMSG, WPARAM wParam, LPARAM lParam, LPVOID lpClientData)
    {
    return 0;
    }

    int main()
    {
    HSNMP_SESSION hSession;
    unsigned long lMajor;
    unsigned long lMinor;
    unsigned long lLevel;
    unsigned long lVersion;
    unsigned long lTranslation;
    unsigned long lOn;
    HSNMP_ENTITY dst, src;
    HSNMP_CONTEXT context;
    smiBYTE pByteData[] = "public";
    smiOCTETS smiOct = { 6, (smiLPBYTE)pByteData };
    smiOID smiOid;
    smiVALUE dValue;

    if (SnmpStartupEx(&lMajor, &lMinor, &lLevel, &lTranslation, &lOn) != SNMPAPI_SUCCESS)
    cout << "Startup fehlgeschlagen" << endl;

    SnmpSetRetransmitMode(SNMPAPI_ON);

    if (!(hSession = SnmpCreateSession(GetConsoleWindow(), 0, snmpProc, NULL)))
    cout << "Session fehlgeschlagen" << endl;

    dst = SnmpStrToEntity(hSession, "....");
    src = SnmpStrToEntity(hSession, "....");

    // OCTET of interests
    context = SnmpStrToContext(hSession, &smiOct);
    smiUINT32 OID[] = { 1, 3, 6, 1, 2, 1, 1, 1, 0 };
    smiOid.ptr = (smiLPUINT32)OID;
    smiOid.len = 9;
    dValue.syntax = SNMP_SYNTAX_OCTETS;
    dValue.value.uNumber = 0;

    // Senden der Nachricht
    HSNMP_VBL vblData = SnmpCreateVbl(hSession, &smiOid, &dValue);
    HSNMP_PDU pduData = SnmpCreatePdu(hSession, SNMP_PDU_GET, NULL, NULL, NULL, vblData);

    if (SnmpSendMsg(hSession, src, dst, context, pduData) == SNMPAPI_FAILURE)
    cout << "Senden fehlgeschlagen" << endl;

    // Empfangen der Nachricht

    HSNMP_ENTITY dstZiel, srcZiel;
    HSNMP_CONTEXT hContextZiel ;
    HSNMP_PDU pduDataZiel;
    HSNMP_VBL vblDataZiel;

    if (SnmpRecvMsg(hSession, &srcZiel, &dstZiel, &hContextZiel, &pduDataZiel) != SNMPAPI_FAILURE)
    {
    //if (SnmpSendMsg(hSession, dst, src, context, pduDataZiel) == SNMPAPI_FAILURE)
    cout << "Empfangen.." << endl;

    SNMPAPI_STATUS st = SnmpGetLastError(hSession);

    smiOID nSmiOID;
    smiVALUE nSmiValue;
    smiINT pduType;
    smiINT32 iReqID;
    if (SnmpGetPduData(pduDataZiel, &pduType, &iReqID, NULL, NULL, &vblDataZiel) != SNMPAPI_SUCCESS)
    cout << "PDUUmwandeln fehlgeschlagen" << endl;

    if (SnmpGetVb(vblDataZiel, iReqID, &nSmiOID, &nSmiValue) != SNMPAPI_SUCCESS)
    cout << "Umwandeln fehlgeschlagen" << endl;

    SNMPAPI_STATUS st2 = SnmpGetLastError(hSession);
    }

    SnmpClose(hSession);

    SnmpCleanup();

    system("Pause");
    }

    Ich hoffe Ihr könnt mir hierzu ein paar Tipps geben, da ich schon lange an diesem Problem mich vergnüge. Vielen Dank vorab...


Log in to reply