Indy的SNMP Trap什么都不发送

时间:2014-06-27 07:00:29

标签: c++builder snmp indy10 snmp-trap

我尝试使用Indy的组件TIdSnmp发送SNMP陷阱。 (代码是从Implementing SNMP SendTrap using Indy components复制的)

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 = 0;

 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;
}

但wireshark并没有注册任何网络活动。我尝试使用QuickSendTrap变体获得相同的结果。 在绝望中,我决定尝试使用Indy的UDP组件发送内容。

void __fastcall TForm1::btFireClick(TObject *Sender)
{
 TIdUDPClient* udpClient = 0;
 TIdBytes sendData;

 myClass* packet = new myClass();
 packet->a = 10;
 packet->b = 77;
 packet->c = "Test";

 int size = sizeof(*packet);
 sendData = RawToBytes(packet, size);

 udpClient = new TIdUDPClient(NULL);
 udpClient->Host = "192.168.100.19";
 udpClient->Port = 162;
 udpClient->SendBuffer(sendData);

 delete udpClient;
}

当然,它不是真正的SNMP陷阱,但是wireshark看到了这一点:

192.168.100.21  192.168.100.19  UDP 54  Source port: 49873  Destination port: snmptrap

Wireshark过滤器是" udp portrange 161-162"

在数据部分,我可以找到我的价值观。顺便说一句,SNMP组件可以通过简单的idSnmp-> SendQuery()正确地获取值,这也是wireshark注册的。

那么,是否有一些附加条件才能使SendTrap()正常工作?

我有Windows7,管理权限。防火墙已关闭。 代码由Embarcadero RAD Studio 2010编译,桌面应用程序。

SNMP Trap接收器是否应该等待我的SendTrap()才能使SendTrap()工作? (不幸的是,我目前还没有另外一台计算机进行实验) 应该是OID" 1.5.5.5.5.5.5.5"只是为了SendTrap()可以在我的电脑中注册吗?

也许有其他一些要求?

1 个答案:

答案 0 :(得分:0)

  

但wireshark并未注册任何网络活动

这不是你在other discussion中所说的。你说它有效。

  

那么,是否有一些附加条件才能使SendTrap()正常工作?

没有。我给你的代码就是你所需要的。

  

SNMP Trap接收器是否应该等待我的SendTrap()才能使SendTrap()工作?

没有。 UDP是无连接的。发送时不需要接收器。如果没有接收方,则会将ICMP错误发送回发送方。

  

应该是OID" 1.5.5.5.5.5.5.5"只是为了SendTrap()可以在我的电脑中注册吗?

没有