2

我正在使用 net-snmp 库 (c/c++) 来编写 snmp 陷阱发送器。对于基本对象类型,将对象添加到陷阱非常简单:


snmp_varlist_add_variable(notification_vars, MibName, length, MIBType, MIBValue, len);

其中“MibName”为 OID,“MIBValue”为字符串值,“MIBType”为 ASN 类型。现在,如何为索引表执行此操作?对此有任何支持吗?如何将所有行及其元素添加到陷阱中?

还是有更简单的替代方案?

4

1 回答 1

1

在 SNMP 陷阱中发送整个 SNMP 表是不好的做法。通常 SNMP 表在 OID 实例的数量方面非常大。问题在于 SNMP 使用 UDP 作为传输协议。SNMP 允许 PDU 的大小达到网络的 MTU。缓冲区应该与预期的最大数据包一样大,因此如果可能,它应该可能对应于 MTU。例如,以太网允许高达 1500 字节的帧有效负载。

因此,您的 PDU 最大大小通常平均最多为 10 个 varbind。

这里的常见用例场景是发送 SNMP 陷阱,通知用户某事已更改/发生。用户需要在接收到陷阱时使用 Get-Next/Get-Bulk 从表中获取数据以获取此事件的详细信息。

于 2016-11-08T11:32:38.753 回答