2014-06-27 58 views
0

我試圖使用Indy的組件TIdSnmp發送SNMP陷阱。 (代碼是從Implementing SNMP SendTrap using Indy components複製)Indy的SNMP陷阱發送任何東西

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」

而且在數據部分,我可以找到我的價值觀。通過簡單的idSnmp-> SendQuery()方法,SNMP組件可以正常工作以獲取值,並且這也由wireshark註冊。

那麼,有沒有一些additinal條件爲了SendTrap()正常工作?

我有Windows7管理權限。防火牆已關閉。代碼由Embarcadero RAD Studio 2010編譯,桌面應用程序。

SNMP Trap接收器應該等待我的SendTrap()只是爲了SendTrap()可以工作? (不幸的是,我目前還沒有另外一臺計算機用於實驗) 應該將OID「1.5.5.5.5.5.5.5」註冊到我的計算機的某個地方,以便SendTrap()可以正常工作?

也許有其他一些要求?

回答

0

但Wireshark不能註冊器的任何網絡活動

這是不是你在other discussion說。你說它正在工作。

那麼,有沒有一些additinal條件爲了SendTrap()正常工作?

不,我給你的代碼是你所需要的。

SNMP Trap接收器應該等待我的SendTrap()只是爲了SendTrap()可以工作嗎?

否。UDP是無連接的。接收器不需要發送。如果沒有接收方,ICMP錯誤將被髮回給發送方。

應該將OID「1.5.5.5.5.5.5」註冊到我的電腦的某個地方,以便SendTrap()可以正常工作?

+0

是的,是錯了Wireshark的過濾器。當我用'portrange 161-162'取代'udp portrange 161-162'時,Wireshark抓到了數據包。再次感謝您的幫助! – mli