【问题标题】:Do I need different MIB with those OID?我需要与那些 OID 不同的 MIB 吗?
【发布时间】:2016-09-22 13:51:14
【问题描述】:

我得到了这个通过 SNMP 检索信息的旧版 powershell 脚本,我正在尝试使用 snimpy 将其移植到 Python 中。

$PrintersIP = '10.100.7.47', '10.100.7.48'
Function Get-SNMPInfo ([String[]]$Printers) {
    Begin {
        $SNMP = New-Object -ComObject olePrn.OleSNMP
    }
    Process {
        Foreach ($IP in $Printers) {
            $SNMP.Open($IP,"public",2,3000)
            [PSCustomObject][Ordered]@{
                Name        = $SNMP.Get(".1.3.6.1.2.1.1.5.0")
                IP          = $IP
                UpTime      = [TimeSpan]::FromSeconds(($SNMP.Get(".1.3.6.1.2.1.1.3.0"))/100)
                Model       = $SNMP.Get(".1.3.6.1.2.1.25.3.2.1.3.1")
                Description = $SNMP.Get(".1.3.6.1.2.1.1.1.0")
                #Contact     = $SNMP.Get(".1.3.6.1.2.1.1.4.0")
                #SN          = $SNMP.Get(".1.3.6.1.2.1.43.5.1.1.17.1")
                #Location    = $SNMP.Get(".1.3.6.1.2.1.1.6.0")
                #TonerName   = $SNMP.Get("43.11.1.1.6.1.1")
            }
        }
    }
    End {
        $SNMP.Close()
    }
}
Get-SNMPInfo $PrintersIP | ft -AutoSize *

Simpy 用法

他们使用load 方法从section Usage of the official documentation 加载MIB​​ 文件。

from snimpy.manager import Manager as M
from snimpy.manager import load

load("IF-MIB")
m = M("localhost")
print(m.ifDescr[0])

寻找OID姓名

我找不到某些标识符的 OID 名称。例如:

问题

  • 根据我尝试使用的 OID 的名称,我需要加载不同的 MIB 文件吗? (例如Printer-MIBIF-MIB 等)
  • 我在哪里可以找到丢失的OID 的名字

【问题讨论】:

    标签: python powershell snmp mib snimpy


    【解决方案1】:

    如果您使用 load() 方法,则其中的标量和行名将作为实例属性提供,因此您可以查询 'sysContact' 等,但因为 'sysDescr' 和 'sysName' 是不是 IF-MIB 的一部分,您将无法获得它。

    您将需要加载相关的 MIB,例如 SNMPv2-MIB,或尝试直接通过 OID 获取值。

    更新: 我看了看,snipy,看起来 pysnmp 正在收集,所以你总是可以直接使用它。下面的示例通过 OID 收集新的不同 SNMP 值,而另一些则通过 MIB 中的命名变量(如果要通过名称获取,则需要相关的 MIB 可用)。这个样本几乎取自pySNMP documentation

    from pysnmp.entity.rfc3413.oneliner import cmdgen
    
    cmdGen = cmdgen.CommandGenerator()
    
    errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
        cmdgen.CommunityData('public'),
        cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)),
        '1.3.6.1.2.1.1.1.0',            # sysDescr
        '1.3.6.1.2.1.1.2.0',            # sysObjectId
        '1.3.6.1.2.1.1.3.0',            # upTime
        '1.3.6.1.2.1.1.4.0',            # Contact
        '1.3.6.1.2.1.1.5.0',            # sysName
        '1.3.6.1.2.1.1.6.0',            # Location
        cmdgen.MibVariable('SNMPv2-MIB', 'sysDescr', 0),     #.1.3.6.1.2.1.1.1.0 sysDescr
        cmdgen.MibVariable('SNMPv2-MIB', 'sysName', 0)     #.1.3.6.1.2.1.1.5.0 sysName
    )
    
    
    
    # Check for errors and print out results
    if errorIndication:
        print(errorIndication)
    else:
        if errorStatus:
            print('%s at %s' % (
                errorStatus.prettyPrint(),
                errorIndex and varBinds[int(errorIndex)-1] or '?'
                )
            )
        else:
            for name, val in varBinds:
                print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))
    

    【讨论】:

    • 谢谢,你怎么知道在哪里可以找到OID
    • 我已经为你扩展了我的答案,并给出了一个使用 pysnmp 通过 OID 检索的示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多