AES的authPriv的net-snmp v3问题

时间:2019-04-10 08:05:50

标签: snmp net-snmp

我正在使用自己构建的net-snmp库创建一个c ++项目,我能够通过SNMP v2c和SNMP v3(authNoPriv)与我的硬件接口。但是,当我尝试使用authPriv时,这是不成功的,对此有任何建议吗?

我怀疑net-snmp不支持AES。

当我尝试直接运行net-snmp时,我看到隐私协议只有DES选项。因此,我想确认net-snmp是否同时支持AES128和DES隐私协议?

1 个答案:

答案 0 :(得分:0)

  1. 对于authNoPriv,当我使用SHA-1身份验证协议

  2. 时,身份验证失败返回了我
  3. 对于authPriv,我无法与SNMP硬件建立任何连接。

我怀疑我的代码中有问题,因为带有MD5身份验证协议的authNoPriv没有问题,但是当我为相应的安全协议配置时会发生上述错误。

// Definitions
const char * user = "snmpuser";
const char * our_v3_passphrase = "passphrase";
const char * our_v3_privphrase = "privphrase";
struct snmp_session session;

SOCK_STARTUP;

// Initialize the SNMP library
snmp_sess_init(&session);
session.peername = _strdup(argv[1])

// set the SNMP version number
session.version = SNMP_VERSION_3;

session.securityNameLen = strlen(session.securityName);

// set the security level
session.securityLevel = SNMP_SEC_LEVEL_AUTHPRIV; // SNMP_SEC_LEVEL_AUTHNOPRIV (for authNoPriv)

// set the authentication protocol
session.securityAuthProto = usmHMACMD5AuthProtocol; // usmHMACSHA1AuthProtocol
session.securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN; // USM_AUTH_PROTO_SHA_LEN
session.securityAuthKeyLen = USM_AUTH_KU_LEN;

// set authentication key to a hashed version of passphrase
if (generate_Ku(session.securityAuthProto, session.securityAuthProtoLen, (u_char *)our_v3_passphrase, strlen(our_v3_passphrase), session.securityAuthKey, &session.securityAuthKeyLen) != SNMPERR_SUCCESS) {
    snmp_perror(argv[0]);
    snmp_log(LOG_ERR, "Error generating Ku from authentication passphrase. \n");
    SOCK_CLEANUP;
    exit(1);
}

// set the privacy protocol
session.securityPrivProto = usmAES128PrivProtocol; // usmDESPrivProtocol
session.securityAuthProtoLen = USM_PRIV_PROTO_AES128_LEN; // USM_PRIV_PROTO_DES_LEN
session.securityAuthKeyLen = USM_PRIV_KU_LEN;

// set privacy key to a hashed version of privphrase
if (generate_Ku(session.securityAuthProto, session.securityAuthProtoLen, (u_char *)our_v3_privphrase, strlen(our_v3_privphrase), session.securityPrivKey, &session.securityPrivKeyLen) != SNMPERR_SUCCESS) {
    snmp_perror(argv[0]);
    snmp_log(LOG_ERR, "Error generating Ku from authentication passphrase. \n");
    SOCK_CLEANUP;
    exit(1);
}