我正在尝试将 snmptrap 从我的 centos 机器发送到其他 centos 机器。我在日志中看到以下内容,带有 net-snmp 的 snmptrap V3 无法正常工作“usm:engineID 不匹配”
trace: sc_hash(): scapi.c, 464:
trace: sc_get_properlength(): scapi.c, 138:
trace: set_enginetime(): lcd_time.c, 393:
lcd_set_enginetime: engineID 7A 7A 7D 80 7A 7A 7A 83 86 89 8C 8F : boots=0, time=0
trace: usm_get_user_from_list(): snmpusm.c, 3527:
usm: match on user doit
trace: usm_get_user_from_list(): snmpusm.c, 3533:
**usm: no match on engineID (7A 7A 7D 80 7A 7A 7A 83 86 89 8C 8F )**
trace: usm_get_user_from_list(): snmpusm.c, 3527:
usm: match on user doit
trace: usm_get_user_from_list(): snmpusm.c, 3533:
我的 snmptrapd.conf 文件如下所示
[root@localhost crash]# cat /etc/snmp/snmptrapd.conf
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity log,execute,net public
# traphandle SNMPv2-MIB::coldStart /usr/bin/bin/my_great_script cold
createUser -e 00002E390000005056877fb3 doit MD5 doitpassword DES
authUser log doit AuthNoPriv
我使用了 C 的 net-snmp 模块,下面是创建引擎 ID 的代码块,
char engineID[13];
engineID[0]= "0x00";
engineID[1]= "00";
engineID[2]= "2e";
engineID[3]= "39";
engineID[4]= "00";
engineID[5]= "00";
engineID[6]= "00";
engineID[7]= "50";
engineID[8]= "56";
engineID[9]= "87";
engineID[10]= "7f";
engineID[11]= "b3";
engineID[12]= "\0";
session.securityEngineID = (u_char *)engineID;
session.securityEngineIDLen = 12;
除此之外,我没有在接收陷阱的目标机器上进行任何设置。
主要问题是目标机接收陷阱时显示空白描述。请检查下面的屏幕截图。不确定我在这里做错了什么。请指教。
首先,这不是 C 字符串或 char 数组的工作方式。char[]的每个元素都是一个char;即[-128中的单个数字;127]范围,或[0; 255] 如果它是无符号字符。例如,
0x41
or是char'A'
的有效值,但不是——而且绝对不是(粗略地说,这是指向 char[5] 的指针)。"A"
"0x41"
第二:“八位字节串”是字节数组的 ASN.1 术语(“八位字节”是 8 位字节),
unsigned char[]
在 C 中也称为。换句话说,它仅表示普通二进制数据。二进制数据可以用多种方式表示 – 作为一系列 ASCII 字符,或作为一系列十六进制数,或作为单个长十六进制数,......例如,
ABC
和0x414243
(有或没有 0x)和{0x41, 0x42, 0x43}
和{'A', 'B', 'C'}
是不同的方式写入相同的数据。所以如果你有一个像这样的十六进制字符串
00002E390000005056877fb3
(你知道它是十六进制的,因为 snmpd.conf 手册是这么说的),你可以像这样用 C 写它:或者像这样: