使用Indy组件实现SNMP SendTrap



我需要通过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的工作示例的注释:)

您没有使用任何值填充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;
}

最新更新