【发布时间】:2016-05-21 03:08:22
【问题描述】:
我创建了这个打印字符串值的代码,它工作正常:
add_mibdir(".");
pdu = snmp_pdu_create(SNMP_MSG_GET);
read_objid(if_index, id_oid, &id_len);
snmp_add_null_var(pdu, id_oid, id_len);
status = snmp_synch_response(sess_handle,pdu,&response);
int count=1;
for(vars = response->variables; vars; vars = vars->next_variable)
{
if (vars->type == ASN_OCTET_STR)
{
char *sp = (char *)malloc(1 + vars->val_len);
memcpy(sp, vars->val.string, vars->val_len);
sp[vars->val_len] = '\0';
printf("value #%d is a string: %s\n", count++, sp);
printf("%s\n",vars->val.string);
free(sp);
}
}
例如:SNMPv2-SMI::mib-2.47.1.1.1.1.2.1012 = STRING: "GigabitEthernet Container",返回"GigabitEthernet Container";
但我尝试了一个整数值,但它不起作用:
for(vars = response->variables; vars; vars = vars->next_variable)
printf("%ld",(long int)vars->val.integer);//it returns large numbers;
例如:对于SNMPv2-SMI::mib-2.17.2.11.0 = INTEGER: 1500,我想返回1500,对于IF-MIB::ifOutBroadcastPkts.10103 = Counter32: 14011112,我想返回14011112
如果我使用:
for(vars = response->variables; vars; vars = vars->next_variable)
print_variable(vars->name, vars->name_length, vars);
它返回Counter32:12132,或INTEGER:12324,或STRING:Gi0/1(但我想解析这个结果并将其用于一些变量,没有数据类型,例如:在var a中存储12132 )。
谢谢!
【问题讨论】:
-
打印的是什么而不是你想要的数字?
标签: c++ linux network-programming network-protocols net-snmp