我尝试写一个非常小的SNMP陷阱接收器,监听UDP端口162。陷阱很好,但我不能解码它们。我已经找到了libber,但由于某种原因,它无法解码陷阱。我可能用错了。我想解码SNMP陷阱应该相当简单,我错过了一些关键的东西。是否可以使用NET-SNMP作为一个库,并从中创建一个小的陷阱接收程序?我一点也不感到惊讶,但找不到任何有关它的信息。也许我的谷歌功夫太弱了。
lqfhib0f1#
好吧,使用net-snmp,你通常使用snmptrapd守护进程来调用你的外部命令/脚本。如果你不能使用这种方式,我建议你看看snmptrapd. c代码。而且,如果我没记错的话,他们构建了一个libsnmptrapd库。应该很容易找到正确的API调用…如果我有时间,我会用一个片段来更新我的答案...my2c
jk9hmnmh2#
要制作一个简单的snmp陷阱应用程序,您应该解析并运行snmptrapd. c来捕获来自您定义的端口地址的陷阱。代码结构对于陷阱初学者来说很重,所以我会告诉你snmptrapd. c的要点来制作一个简单的陷阱接收器。transport = netsnmp_transport_open_server("snmptrap", cp);这一行打开了一个服务器,让你监听定义的端口号“cp”。警告:在Linux操作系统中,端口162只能侦听root用户。所以如果你想监听端口162,你应该用sudo运行代码。ss = snmptrapd_add_session(transport);您应该创建一个netsnmp_session。
transport = netsnmp_transport_open_server("snmptrap", cp);
ss = snmptrapd_add_session(transport);
while (netsnmp_running) { ... numfds = 0; FD_ZERO(&readfds); FD_ZERO(&writefds); FD_ZERO(&exceptfds); block = 0; tvp = &timeout; timerclear(tvp); tvp->tv_sec = 5; snmp_select_info(&numfds, &readfds, tvp, &block); if (block == 1) tvp = NULL; /* block without timeout */ count = select(numfds, &readfds, &writefds, &exceptfds, tvp); if (count > 0) { if (count > 0) { snmp_read(&readfds); } } else { switch (count) { case 0: snmp_timeout(); break; case -1: if (errno == EINTR) continue; netsnmp_running = 0; break; default: netsnmp_running = 0; } } }
在定义的端口捕获snmp陷阱的主循环。
static netsnmp_session * snmptrapd_add_session(netsnmp_transport *t) { ... session->callback = snmp_input; ... }
毕竟,你的陷阱的数据将在snmp_input函数。你可以接受oid,value,value type,sender ipnumber等。的陷阱。
snmp_input
2条答案
按热度按时间lqfhib0f1#
好吧,使用net-snmp,你通常使用snmptrapd守护进程来调用你的外部命令/脚本。如果你不能使用这种方式,我建议你看看snmptrapd. c代码。而且,如果我没记错的话,他们构建了一个libsnmptrapd库。应该很容易找到正确的API调用…
如果我有时间,我会用一个片段来更新我的答案...
my2c
jk9hmnmh2#
要制作一个简单的snmp陷阱应用程序,您应该解析并运行snmptrapd. c来捕获来自您定义的端口地址的陷阱。
代码结构对于陷阱初学者来说很重,所以我会告诉你snmptrapd. c的要点来制作一个简单的陷阱接收器。
transport = netsnmp_transport_open_server("snmptrap", cp);
这一行打开了一个服务器,让你监听定义的端口号“cp”。
警告:在Linux操作系统中,端口162只能侦听root用户。所以如果你想监听端口162,你应该用sudo运行代码。
ss = snmptrapd_add_session(transport);
您应该创建一个netsnmp_session。
在定义的端口捕获snmp陷阱的主循环。
毕竟,你的陷阱的数据将在
snmp_input
函数。你可以接受oid,value,value type,sender ipnumber等。的陷阱。