【问题标题】:Implementing SNMP SendTrap using Indy components使用 Indy 组件实现 SNMP SendTrap
【发布时间】:2014-06-25 05:39:58
【问题描述】:

我需要通过 SNMP 从我的 C++Builder 上的应用程序报告错误。

我开始使用 Indy 组件实现 SNMP SendTrap。

void __fastcall TMainForm::btSendTrapClick(TObject *Sender)
{
UnicodeString myEnterprise   = "1.5.5.5.5.5.5.5";
UnicodeString eventType      = "1.5.5.5.5.5.5.5.1";
UnicodeString eventDistance  = "1.5.5.5.5.5.5.5.2";

TIdSNMP * idSnmp = 0;
TSNMPInfo * infoSnmp = 0;

idSnmp                 = new TIdSNMP(NULL);
infoSnmp               = new TSNMPInfo(idSnmp);

idSnmp->Host           = edHost->Text;
idSnmp->Community      = "public";

infoSnmp->Host           = edHost->Text;
infoSnmp->Community      = "public";
infoSnmp->Enterprise = myEnterprise;
infoSnmp->GenTrap = 6;                       // I've met such values
infoSnmp->SpecTrap = 1;                      // somewhere in inet
infoSnmp->MIBAdd(eventType,"ftCritical");
infoSnmp->MIBAdd(eventDistance,"2.357");

idSnmp->SendTrap();

delete idSnmp;
}

但是当我运行应用程序时,我的系统中没有 udp 活动。当我运行这样的事情时

idSnmp->QuickSend(sysDescr, "public", edHost->Text, val);

wireshark 显示 192.168.100.21 192.168.100.19 SNMP 82 get-request 1.3.6.1.2.1.1.3.0

但是当idSnmp->SendTrap()wireshark 什么都看不到时(在这两种情况下,wireshark 的过滤器都是 UDP 端口范围 161-162)

我很高兴看到一些关于我的代码的评论,或者可能是 SendTrap 的工作示例 :)

【问题讨论】:

    标签: snmp indy c++builder-2010


    【解决方案1】:

    您没有使用任何值填充TIdSNMP::Trap。这就是TIdSNMP::SendTrap() 不发送任何内容的原因。它没有任何东西可以发送。

    试试这个:

    void __fastcall TMainForm::btSendTrapClick(TObject *Sender)
    {
        String myEnterprise   = _D("1.5.5.5.5.5.5.5");
        String eventType      = myEnterprise + _D(".1");
        String eventDistance  = myEnterprise + _D(".2");
    
        TIdSNMP *idSnmp = new TIdSNMP(NULL);
    
        idSnmp->Trap->Host       = edHost->Text;
        idSnmp->Trap->Community  = _D("public");
        idSnmp->Trap->Enterprise = myEnterprise;
        idSnmp->Trap->GenTrap    = 6;                       // I've met such values
        idSnmp->Trap->SpecTrap   = 1;                      // somewhere in inet
        idSnmp->Trap->MIBAdd(eventType, _D("ftCritical"));
        idSnmp->Trap->MIBAdd(eventDistance, _D("2.357"));
    
        idSnmp->SendTrap();
    
        delete idSnmp;
    }
    

    或者,您可以改用TIdSNMP::QuickSendTrap()

    void __fastcall TMainForm::btSendTrapClick(TObject *Sender)
    {
        String myEnterprise   = _D("1.5.5.5.5.5.5.5");
        String eventType      = myEnterprise + _D(".1");
        String eventDistance  = myEnterprise + _D(".2");
    
        TStringList *names = new TStringList;
        names->Add(eventType);
        names->Add(eventDistance);
    
        TStringList *values = new TStringList;
        values->AddObject(_D("ftCritical"), (TObject*)ASN1_OCTSTR);
        values->AddObject(_D("2.357"), (TObject*)ASN1_OCTSTR);
    
        TIdSNMP *idSnmp = new TIdSNMP(NULL);
        idSnmp->QuickSendTrap(edHost->Text, myEnterprise, _D("public"), 162, 6, 1, names, values);
        delete idSnmp;
    
        delete names;
        delete values;
    }
    

    或者,如果您正在为移动设备编译:

    void __fastcall TMainForm::btSendTrapClick(TObject *Sender)
    {
        String myEnterprise   = _D("1.5.5.5.5.5.5.5");
        String eventType      = myEnterprise + _D(".1");
        String eventDistance  = myEnterprise + _D(".2");
    
        TIdMIBValueList *mibs = new TIdMIBValueList;
        mibs->Add(TIdMIBValue(eventType, _D("ftCritical"), ASN1_OCTSTR));
        mibs->Add(TIdMIBValue(eventDistance, _D("2.357"), ASN1_OCTSTR));
    
        TIdSNMP *idSnmp = new TIdSNMP(NULL);
        idSnmp->QuickSendTrap(edHost->Text, myEnterprise, _D("public"), 162, 6, 1, mibs);
        delete idSnmp;
    
        delete mibs;
    }
    

    【讨论】:

    • 感谢您的回答。我不知道为什么,但我认为当我填充 snmpInfo 时就足够了。显然我错过了assigning idSnmp->Trap = snmpInfo 但不幸的是,它并没有解决我的问题。我从字面上复制了您的代码,但还没有网络活动。
    • 如果它有效,那么请接受我的回答,以便我得到认可。至于idSnmp->Trap = snmpInfo,会泄露原来的Trap对象。使用TIdSNMP 创建的TIdSNMPInfo,就像我展示的那样。根本不要创建自己的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多