查看源代码 snmp_pdus (snmp v5.18)

SNMP PDU 的编码和解码函数

在使用此模块 snmp_pdus 之前,应仔细研究 RFC1157、RFC1905 和/或 RFC2272。

模块 snmp_pdus 包含用于编码和解码 SNMP 协议数据单元 (PDU) 的函数。简而言之,此模块将字节列表转换为 Erlang 记录表示,反之亦然。记录定义可以在文件 snmp/include/snmp_types.hrl 中找到。如果使用 snmpv3,则包含 snmp_types.hrl 的模块必须在包含头文件之前定义常量 SNMP_USE_V3。示例

-define(SNMP_USE_V3, true).
-include_lib("snmp/include/snmp_types.hrl").

在编写自己的网络进程时,必须显式地进行编码和解码。

摘要

类型

消息是版本相关的。 'vsn_hdr' 是一个 community 字符串(v1 和 v2)或一个 'v3_hdr' 记录 (v3)。 'data' 是一个 PDU(v1 和 v2c)或一个(可能加密的)'scopedPdu'。

函数

将字节列表解码为 SNMP 消息。请注意,如果存在 v3 消息,则不会解码 msgSecurityParameters。它们必须通过调用安全模型特定的解码函数(例如 dec_usm_security_parameters/1)显式解码。另请注意,如果 scopedPDU 已加密,则 data 字段中将存在 OCTET STRING 编码的 encryptedPDU

将字节列表解码为 SNMP 消息,但不解码消息的数据部分。这意味着,数据仍然是字节列表,通常是编码的 PDU(v1 和 V2)或编码且可能加密的 scopedPDU (v3)。

将字节列表解码为 SNMP Pdu。

将字节列表解码为 SNMP ScopedPdu。

将字节列表解码为 scoped pdu 记录,或者 - 如果 scoped pdu 已加密 - 解码为字节列表。

将字节列表解码为 SNMP UsmSecurityParameters。

将消息记录编码为字节列表。

Message 是一个记录,其中 data 字段被假定为已编码(字节列表)。如果存在 v1 或 v2 消息,则 data 字段是编码的 PDU,如果存在 v3 消息,则 data 是编码且可能加密的 scopedPDU

将 SNMP Pdu 编码为字节列表。

将 SNMP ScopedPdu 编码为字节列表,该列表可以加密,并且在加密之后,可以通过调用 enc_encrypted_scoped_pdu/1 进行编码;或者它可以作为 message 记录中的 data 字段使用,然后可以通过 enc_message_only/1 进行编码。

将 SNMP UsmSecurityParameters 编码为字节列表。

类型

-type message() :: #message{version :: term(), vsn_hdr :: term(), data :: term()}.

消息是版本相关的。 'vsn_hdr' 是一个 community 字符串(v1 和 v2)或一个 'v3_hdr' 记录 (v3)。 'data' 是一个 PDU(v1 和 v2c)或一个(可能加密的)'scopedPdu'。

-type msg_id() :: 0..2147483647.
-type msg_security_model() :: 0..2147483647.
-type pdu() ::
          #pdu{type :: term(),
               request_id :: term(),
               error_status :: term(),
               error_index :: term(),
               varbinds :: term()}.
-type pdu_type() ::
          'get-request' | 'get-next-request' | 'get-bulk-request' | 'get-response' | 'set-request' |
          'inform-request' | 'snmpv2-trap' | report.
-type scoped_pdu() :: #scopedPdu{contextEngineID :: term(), contextName :: term(), data :: term()}.
-type trappdu() ::
          #trappdu{enterprise :: term(),
                   agent_addr :: term(),
                   generic_trap :: term(),
                   specific_trap :: term(),
                   time_stamp :: term(),
                   varbinds :: term()}.
链接到此类型

usm_security_parameters()

查看源代码
-type usm_security_parameters() ::
          #usmSecurityParameters{msgAuthoritativeEngineID :: term(),
                                 msgAuthoritativeEngineBoots :: term(),
                                 msgAuthoritativeEngineTime :: term(),
                                 msgUserName :: term(),
                                 msgAuthenticationParameters :: term(),
                                 msgPrivacyParameters :: term()}.
-type v3_hdr() ::
          #v3_hdr{msgID :: term(),
                  msgMaxSize :: term(),
                  msgFlags :: term(),
                  msgSecurityModel :: term(),
                  msgSecurityParameters :: term(),
                  hdr_size :: term()}.
-type version() :: 'version-1' | 'version-2' | 'version-3'.

函数

-spec dec_message(Bytes) -> Message when Bytes :: [byte()], Message :: message().

将字节列表解码为 SNMP 消息。请注意,如果存在 v3 消息,则不会解码 msgSecurityParameters。它们必须通过调用安全模型特定的解码函数(例如 dec_usm_security_parameters/1)显式解码。另请注意,如果 scopedPDU 已加密,则 data 字段中将存在 OCTET STRING 编码的 encryptedPDU

链接到此函数

dec_message_only(Bytes)

查看源代码
-spec dec_message_only(Bytes) -> Message when Bytes :: [byte()], Message :: message().

将字节列表解码为 SNMP 消息,但不解码消息的数据部分。这意味着,数据仍然是字节列表,通常是编码的 PDU(v1 和 V2)或编码且可能加密的 scopedPDU (v3)。

-spec dec_pdu(Bytes) -> Pdu when Bytes :: [byte()], Pdu :: trappdu() | pdu().

将字节列表解码为 SNMP Pdu。

-spec dec_scoped_pdu(Bytes) -> ScopedPDU when Bytes :: [byte()], ScopedPDU :: scoped_pdu().

将字节列表解码为 SNMP ScopedPdu。

链接到此函数

dec_scoped_pdu_data(Bytes)

查看源代码
-spec dec_scoped_pdu_data(Bytes) -> ScopedPduData
                             when
                                 Bytes :: [byte()],
                                 ScopedPduData :: scoped_pdu() | EncryptedPDU,
                                 EncryptedPDU :: [byte()].

将字节列表解码为 scoped pdu 记录,或者 - 如果 scoped pdu 已加密 - 解码为字节列表。

链接到此函数

dec_usm_security_parameters(Bytes)

查看源代码
-spec dec_usm_security_parameters(Bytes) -> UsmSecParams
                                     when Bytes :: [byte()], UsmSecParams :: usm_security_parameters().

将字节列表解码为 SNMP UsmSecurityParameters。

-spec enc_message(Message) -> Bytes when Message :: message(), Bytes :: [byte()].

将消息记录编码为字节列表。

链接到此函数

enc_message_only(Message)

查看源代码
-spec enc_message_only(Message) -> Bytes when Message :: message(), Bytes :: [byte()].

Message 是一个记录,其中 data 字段被假定为已编码(字节列表)。如果存在 v1 或 v2 消息,则 data 字段是编码的 PDU,如果存在 v3 消息,则 data 是编码且可能加密的 scopedPDU

-spec enc_pdu(Pdu) -> Bytes when Pdu :: pdu(), Bytes :: [byte()].

将 SNMP Pdu 编码为字节列表。

链接到此函数

enc_scoped_pdu(ScopedPdu)

查看源代码
-spec enc_scoped_pdu(ScopedPdu) -> Bytes when ScopedPdu :: scoped_pdu(), Bytes :: [byte()].

将 SNMP ScopedPdu 编码为字节列表,该列表可以加密,并且在加密之后,可以通过调用 enc_encrypted_scoped_pdu/1 进行编码;或者它可以作为 message 记录中的 data 字段使用,然后可以通过 enc_message_only/1 进行编码。

链接到此函数

enc_usm_security_parameters(UsmSecParams)

查看源代码
-spec enc_usm_security_parameters(UsmSecParams) -> Bytes
                                     when UsmSecParams :: usm_security_parameters(), Bytes :: [byte()].

将 SNMP UsmSecurityParameters 编码为字节列表。