如何从SNMP流中获取变量的单位?

如何从SNMP流中获取变量的单位?,snmp,snmp4j,Snmp,Snmp4j,我是snmp4j的新手。我使用[1]中的示例代码从SNMP流中提取一些有意义的信息 在示例代码中,提取了变量的oid和值,但值没有单位。比如说 ,oid 1.3.6.1.4.1.2021.4.6.0(SNMP-MIB::memAvailReal.0)给出的值为13385068,不带单位KB。有没有办法用snmp4j中的单位获取值 谁能帮我看看这个吗 [1] 我相信您检索的值只是Integer32类型的标量 MIB中的描述是“主机上可用的实际/物理内存空间” 它甚至没有在那里指定单位,所以我认为没

我是snmp4j的新手。我使用[1]中的示例代码从SNMP流中提取一些有意义的信息

在示例代码中,提取了变量的oid和值,但值没有单位。比如说

,oid 1.3.6.1.4.1.2021.4.6.0(SNMP-MIB::memAvailReal.0)给出的值为13385068,不带单位KB。有没有办法用snmp4j中的单位获取值

谁能帮我看看这个吗


[1]

我相信您检索的值只是Integer32类型的标量

MIB中的描述是“主机上可用的实际/物理内存空间”

它甚至没有在那里指定单位,所以我认为没有任何地方可以检索单位数据。如果我错了,很高兴被人纠正

memAvailReal OBJECT-TYPE
    SYNTAX  Integer32
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
    "Available Real/Physical Memory Space on the host."
    ::= { memory 6 }
换句话说,它是一个数值,来自MIB文件的描述性元数据甚至没有显示单位,因此在代码中没有从何处获取信息

编辑:

我在谷歌上搜索了更多内容,找到了另一个具有以下定义的UCD-SNMP-MIB版本:

memAvailReal OBJECT-TYPE
    SYNTAX  Integer32
    UNITS       "kB"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
    "The amount of real/physical memory currently unused
         or available."
    ::= { memory 6 }
所以信息在这个版本的MIB中可用

看起来您可能可以使用SmiManager类来利用这些信息:

但是,将SMIMAger集成到应用程序中可能不是一件小事(进一步研究一下,似乎使用SMIMAger需要许可证!)

对于我自己的小项目,我正在预解析MIB,并将所需的部分存储在我的NoSQL数据库中,而不是包括全面的MIB解析支持。这样,我就可以有一个与每个OID关联的元数据目录,它更易于访问/更新和操作


希望能有所帮助。

Thanx Matt,但当您在终端中调用snmpwalk命令时,它也会显示单位。e、 g.UCD-SNMP-MIB::memAvailReal.0=INTEGER:9799456KB这怎么可能?@Sajini然后我会投票支持你的问题!我也很想知道。通常情况下,MIB有一个单位条目,但当你发布时,我在谷歌上搜索了你的MIB,我发布的就是我发现的。。。你有相关的MIB吗?@Sajini我在网上找到了另一个版本的MIB,其中包含一个单位定义,所以我更新了我的答案。