gpt4 book ai didi

C# SNMP 代理 - 表示 MIB 中的复杂类型

转载 作者:行者123 更新时间:2023-11-30 17:44:00 24 4
gpt4 key购买 nike

我正在用 C# 编写我的第一个 SNMP 代理,我想通过 SNMP GET 请求公开一些系统事件信息。

在 C# 端,所有系统事件都由一个简单的类表示:

public class MySystemEvent  
{
public int Id { get;set; }
public string Message { get; set; }
public DateTime Occurred { get; set; }
}

我想将每个特定事件(由事件 ID 确定)作为 MIB 中的单独节点公开,但我不完全确定如何创建与上述类对应的自定义 ASN.1 复杂类型。我知道我可以使用 SEQUENCE 来表示这些,但不确定我是否正确使用了它们。

到目前为止我做了什么:

enterprise OBJECT IDENTIFIER       ::= { private 1 }
penNode OBJECT IDENTIFIER ::= { enterprise <PEN> }
customSystemNode OBJECT IDENTIFIER ::= { penNode 1 }
events OBJECT IDENTIFIER ::= { customSystemNode 1 }

Event ::= SEQUENCE {
id Integer32,
message DisplayString,
occurred DateAndTime
}

firstSpecificEvent OBJECT-TYPE
SYNTAX Event
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"First specific event."
INDEX { eventId }
::= { events 1 }

eventId OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Event Id."
::= { firstSpecificEvent 1 }

eventMessage OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Event message."
::= { firstSpecificEvent 2 }

eventOccurred OBJECT-TYPE
SYNTAX DateAndTime
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Event occurred."
::= { firstSpecificEvent 3 }

上面的MIB定义了下面的树:

  • 私有(private)
    • 企业
    • 笔节点
      • 自定义系统节点
      • 事件
        • 第一个特定事件
          • 事件编号
          • 事件消息
          • 事件发生

我想添加的是与“事件”节点具有相同结构的多个其他事件,例如在我想要的第一个特定事件之后:

  • 第二个特定事件
    • 事件编号
    • 事件消息
    • 事件发生

如何在不为每个特定事件添加单独的 eventId、eventMessage 和 eventOccurred OBECT-TYPE 定义的情况下做到这一点?是否可以定义允许以下操作的 CustomEventComplexType?

firstSpecificEvent OBJECT-TYPE
SYNTAX CustomEventComplexType
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"First specific event."
::= { events 1 }

secondSpecificEvent OBJECT-TYPE
SYNTAX CustomEventComplexType
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Second specific event."
::= { events 2 }

thirdSpecificEvent OBJECT-TYPE
SYNTAX CustomEventComplexType
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Third specific event."
::= { events 3 }

etc.

最佳答案

我最终按照@LexLi 建议的方式解决了这个问题,方法是创建一个事件表。这样,行条目的定义只需要一次 OBJECT-TYPE 定义。

enterprise OBJECT IDENTIFIER       ::= { private 1 }
penNode OBJECT IDENTIFIER ::= { enterprise <PEN> }
customSystemNode OBJECT IDENTIFIER ::= { penNode 1 }

Event ::= SEQUENCE {
id Integer32,
message DisplayString,
occurred DateAndTime
}

eventTable OBJECT-TYPE
SYNTAX SEQUENCE OF Event
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Table containing event information."
::= { customSystemNode 1 }

eventTableRowEntry OBJECT-TYPE
SYNTAX Event
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"A row entry in the event table."
INDEX { eventId }
::= { eventTable 1 }

eventId OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Event id."
::= { eventTableRowEntry 1 }

eventMessage OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Event message."
::= { eventTableRowEntry 2 }

eventOccurred OBJECT-TYPE
SYNTAX DateAndTime
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Event occurred timestamp."
::= { eventTableRowEntry 3 }

关于C# SNMP 代理 - 表示 MIB 中的复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30140985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com