使用 C 的 NET-SNMP SET 请求

NET-SNMP SET request using C

如何使用 NET-SNMP C API 设置 SNMP SET 请求?

我尝试搜索一些功能文档,但找不到。

man snmp_pdu_create

显示...

#include <net-snmp/pdu_api.h> 
netsnmp_pdu *snmp_pdu_create( int type);

引用 NET-SNMP website

   /*
    * Create the PDU for the data for our request.
    *   1) We're going to GET the system.sysDescr.0 node.
    */    
   pdu = snmp_pdu_create(SNMP_MSG_GET);

所以,让我们用我们请求的 oid 填充它。让我们为这个例子获取 system.sysDescr.0 变量。有许多方法可以创建有问题的 oid。您可以自己将数字无符号整数值放入我们上面创建的 anOID 数组中,或者您可以使用以下函数调用之一来执行此操作。我们推荐第一个(get_node),因为它最强大并且接受更多类型的 OID。

read_objid(".1.3.6.1.2.1.1.1.0", anOID, &anOID_len);
#if OTHER_METHODS    get_node("sysDescr.0", anOID, &anOID_len);     
read_objid("system.sysDescr.0", anOID, &anOID_len);    
#endif

因此我们使用以下语句将此 oid 添加到 PDU 中,并将其设为 NULL:(所有 oid 都应与 NULL 值配对,以用于传出的信息请求。对于 SNMP-SET pdu,我们将放置在我们想要将 oid 设置为的值中。

   snmp_add_null_var(pdu, anOID, anOID_len);

您可以按照 http://www.net-snmp.org/wiki/index.php/TUT:Simple_Application 的步骤操作,但不要使用

snmp_add_null_var(pdu, varoid, varoid_len);

只需使用

snmp_add_var(pdu, varoid, varoid_len, type, value);

完整示例:https://github.com/winlibs/net-snmp/blob/master/apps/snmpset.c