コードで net-snmp を使用しています。snmpget の場合、このコードを使用しますが、100% 正しいです。
string oiids = ".1.3.6.1.4.1.30429.1.3.2.1.0" ;
struct snmp_session session , *ss ;
struct snmp_pdu *pdu;
struct snmp_pdu *response;
oid anOID[MAX_OID_LEN];
size_t anOID_len = MAX_OID_LEN;
int status;
init_snmp("APC Check");
snmp_sess_init( &session );
ss = snmp_open(&session);
session.peername = "192.168.17.74";
session.community = (u_char *) "public";
session.community_len = strlen("public");
session.version = SNMP_VERSION_2c;
ss = snmp_open(&session);
pdu = snmp_pdu_create(SNMP_MSG_GET);
read_objid(oiids.c_str(), anOID, &anOID_len);
snmp_add_null_var(pdu, anOID, anOID_len);
status = snmp_synch_response(ss, pdu, &response);
for(variable_list * vars = response->variables; vars; vars = vars->next_variable)
print_variable(vars->name, vars->name_length, vars);
ただし、このコードは、複数行の回答を持つ OID では機能しません。この行 pdu = snmp_pdu_create(SNMP_MSG_GET) をこの pdu = snmp_pdu_create(SNMP_MSG_GETNEXT); に変更します。このコードは最初の行のみを返します。
それが問題です。最初の行だけでなく、すべての行を取得するにはどうすればよいですか