snmptrap V3 与 net-snmp 不工作“usm:engineID 不匹配”

snmptrap V3 与 net-snmp 不工作“usm:engineID 不匹配”

我正在尝试将 snmptrap 从我的 centos 机器发送到另一台 centos 机器。我在日志中看到以下内容,带有 net-snmp 的 snmptrap V3 不起作用“usm:引擎 ID 不匹配”

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;

除此之外,我没有对接收陷阱的目标机器进行任何设置。

主要问题是目标机器接收陷阱时显示空白描述。请查看下面的屏幕截图。不确定我在这里做错了什么。请提供建议。

在此处输入图片描述

答案1

首先,这不是 C 字符串或字符数组的工作方式。字符[]字符; 例如,[-128; 127] 范围内的一个数字,或者 [0; 255] 范围内的一个数字,如果它是未签名char。例如,0x41'A'字符,但"A"不是——而且"0x41"确实不是(粗略地说,这是一个指向 char[5] 的指针)。


第二:“八位字节串”是 ASN.1 术语,表示字节数组(“八位字节”表示 8 位字节),又名unsigned char[]C 语言。换句话说,它只是表示纯二进制数据。

二进制数据可以用多种方式表示 - 一系列 ASCII 字符,或一系列十六进制数,或单个长十六进制数,...例如,ABC0x414243(带或不带 0x)和{0x41, 0x42, 0x43}{'A', 'B', 'C'}是书写相同数据的不同方式。


因此,如果您有一个十六进制字符串00002E390000005056877fb3(您知道它是十六进制的,因为 snmpd.conf 手册是这么说的),您可以用 C 语言像这样编写它:

unsigned char engineID[12];
engineID[0] = 0x00;
engineID[1] = 0x00;
engineID[2] = 0x2e;
engineID[3] = 0x39;
...
engineID[11] = 0xb3;

或者像这样:

unsigned char engineID[] = {0x00, 0x00, 0x2e, 0x39, ..., 0xb3};

相关内容