Indy SNMP 陷阱是否有版本选项?

Are there version options for Indy SNMP traps?

我正在使用 Embarcadero RAD Studio XE3 及其 TIdSNMP Indy SNMP 组件来准备 SNMP 陷阱通知并将其发送到企业服务器。我根据陷阱类型设置了 12 个 varbinds,Wireshark 正在查看并正确剖析目标主机上的陷阱。看来我的结局没问题。

根据实施团队的说法,该系统的Manager端似乎没有识别出这些陷阱,也无法对其进行解码。他们指出了陷阱本身中的 SNMP 版本项,即 'v2u'。由于此版本已弃用,他们希望看到版本 'v2c',并且他们断言所有其他陷阱都是此版本。

问题是,关于要发送什么版本的陷阱,我有什么选择吗?我看到 TIdSNMP::Trap 有一个 Version 成员;设置为 3 这么简单吗?

这是我正在使用的代码:

void SendTrap(int atcsfield)
{
    /* TIdSnmp *snmp = new TIdSNMP(0); */
    snmp->Trap->Clear();
    snmp->Trap->Version = 2;
    snmp->Trap->Community=String(cfg.snmp.community);
    snmp->Trap->TimeTicks = GetTickCount() - InitialTickCount;
    snmp->Trap->Enterprise=String(cfg.snmp.oid);
    snmp->Trap->GenTrap=6;
    snmp->Trap->SpecTrap=1;
    for(int i=0;i<MAX_VARBINDS;i++)
    {
        if(svb[i].Length())
        {
            varb.sprintf("%s.1.%d",BaseOID.c_str(),i);
            snmp->Trap->MIBAdd(varb,svb[i], ASN1_OCTSTR);
        }
    }
    for(int i=0;i<MAX_VARBINDS;i++)
    {
        if(ivb[i]!=-1)
        {
            varb.sprintf("%s.1.%d",BaseOID.c_str(),i);
            snmp->Trap->MIBAdd(varb, ivb[i], ASN1_INT);
        }
    }
    snmp->Host = ManagerIpList->Strings[j];
    snmp->SendTrap();
}

目前TIdSNMP仅支持SNMPv1。将 Trap->Version 设置为 2 不会发送 v2/v3 格式的陷阱,因为陷阱 PDU 的布局在 v1 和 v2/v3 之间不同。

对更新的 SNMP 版本的支持在 Indy 的待办事项列表中:

更新 TIdSNMP 以支持更新的 SNMP 版本 https://code.google.com/p/indyproject/issues/detail?id=139 http://indy.codeplex.com/workitem/19076