snmpget返回以5字节编码的值



当我执行snmpget时,MIB返回的RSSI信号值以5个字节编码。它是一个整数,但前缀是00。为什么?Openwrt net-snmp-5.8

trace: snmp_pdu_parse(): snmp_api.c, 4461
dumph_recv:     error status
dumpx_recv:      02 01 00 
dumpv_recv:        Integer:     0 (0x00)
trace: snmp_pdu_parse(): snmp_api.c, 4472:
dumph_recv:     error index
dumpx_recv:      02 01 00 
dumpv_recv:        Integer:     0 (0x00)
trace: snmp_pdu_parse(): snmp_api.c, 4490:
dumph_recv:     VarBindList
trace: snmp_pdu_parse(): snmp_api.c, 4506:
dumph_recv:       VarBind
trace: snmp_parse_var_op(): snmp.c, 164:
dumph_recv:         Name
dumpx_recv:          06 0D 2B 06 01 04 01 81 DB 41 07 0C 01 15 01 
dumpv_recv:            ObjID: iso.3.6.1.4.1.28097.7.12.1.21.1
trace: snmp_pdu_parse(): snmp_api.c, 4515:
dumph_recv:         Value
dumpx_recv:          02 05 00 FF FF FC 19 
dumpv_recv:          truncating signed value **4294966297** to 32 bits (1)
Integer:      4294966297 (0xFFFFFC19)
trace: _sess_process_packet(): snmp_api.c, 5249:
sess_process_packet: received message id#0 reqid#1927527062 len 53
trace: snmp_synch_input(): snmp_client.c, 183:
snmp_synch: Response (ReqID: 1927527062 - Cmd 162)
trace: sprint_realloc_by_type(): mib.c, 1999:
output: sprint_by_type, type 2
iso.3.6.1.4.1.28097.7.12.1.21.1 = INTEGER: 4294966297

这是一个BER编码的事情-你不能在数字的开头有9个或更多的高位或低位序列,你可以在编码int或规范的代码中看到这一点。

当数字很小但不是负数时,您会在开头看到一个前缀0xff,因为数字的前导位将是0b000000000,这是不允许的,所以它会插入一个0b11111111以使值有效。当数字是一个小的负数时,你会在开头看到一个前缀0x00,因为数字的前导位是0b111111111,这是不允许的,所以它会插入一个0b00000000来使值有效。

来自ISO/IEC 8825-1:2003-第8.3.2节

如果整数值编码的内容八位字节由一个以上的八位字节组成,则第一个八位字节的位以及第二个八位位组的比特8:a( 不应全部为一体;和b( 不应全部为零。

最新更新