1 个不稳定版本

0.1.0 2020 年 8 月 28 日

#8#snmp


用于 msnmp

MIT/Apache 许可证

79KB
1K SLoC

SNMPv3 消息处理

SNMP 消息处理 实现了准备发送消息和从接收到的消息中提取数据的原语。

支持的 PDU 类型

  • GetRequest
  • GetNextRequest
  • GetBulkRequest
  • Response
  • SetRequest
  • SNMPv2-Trap
  • InformRequest

许可证

许可方式为以下之一

任选其一。

贡献

除非您明确说明,否则根据 Apache-2.0 许可证定义,任何有意提交以包含在作品中的贡献,都应按照上述方式双许可,不附加任何额外条款或条件。


lib.rs:

用于发送和接收 SNMP 消息的原语。

支持的 PDU 类型

  • GetRequest
  • GetNextRequest
  • GetBulkRequest
  • Response
  • SetRequest
  • SNMPv2-Trap
  • InformRequest

示例

use snmp_mp::{ObjectIdent, SnmpMsg, VarBind};

let mut msg = SnmpMsg::new(1);
msg.set_reportable_flag();

if let Some(scoped_pdu) = msg.scoped_pdu_data.plaintext_mut() {
    let sys_desc = ObjectIdent::from_slice(&[0x01, 0x03, 0x06, 0x01, 0x02, 0x01, 0x01, 0x01, 0x00]);
    let var_bind = VarBind::new(sys_desc);

    scoped_pdu
        .set_request_id(1)
        .set_engine_id(b"context_engine_id")
        .push_var_bind(var_bind);
}

let encoded_msg = msg.encode();
// Send the encoded message over the network.

encrypt_scoped_pdudecrypt_scoped_pdu 提供了使用安全模型的便捷方式

msg.encrypt_scoped_pdu(|encoded_scoped_pdu| {
    // A security model encrypts and returns the scoped PDU.
    // let (encrypted_scoped_pdu, priv_params) =
    //     priv_key.encrypt(encoded_scoped_pdu, &security_params, salt);
    // security_params.set_priv_params(&priv_params);

    # let encrypted_scoped_pdu = encoded_scoped_pdu;
    encrypted_scoped_pdu
});

msg.decrypt_scoped_pdu(|encrypted_scoped_pdu| {
    // A security model returns the decrypted scoped PDU wrapped in an `Option`.
    // priv_key
    //     .decrypt(encrypted_scoped_pdu, &security_params)
    //     .ok()
    # None
});

依赖项

~355KB