是否可以在 SNMP Trap 中发送 table?

Is it possible to send table in SNMP Trap?

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


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

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

或者有更简单的替代方法吗?

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

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

这里的常见用例场景是发送 SNMP 陷阱,通知用户某些东西有 changed/happened。用户需要在接收到陷阱时使用 Get-Next/Get-Bulk 从 table 获取数据以获取此事件的详细信息。