我获得了一个通过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 *Snimpy用法
从正式文件中,他们使用load方法加载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名称。例如:
1.3.6.1.2.1.1.5.0,→,nothing;1.3.6.1.2.1.1.5→sysName.问题
OID_的名称,是否需要加载不同的MIB文件(例如Printer-MIB、IF-MIB等)OID__的名字?发布于 2016-09-22 16:40:11
如果您使用load()方法,那么标量和行名将作为实例属性使用,因此您可以查询'sysContact‘等,但是由于'sysDescr’和'sysName‘不是IF-MIB的一部分,您将无法获得它。
您将需要加载相关的MIB,如SNMPv2-MIB,或者尝试通过OID直接获取值。
更新:--我已经看过了--而且看起来很像pysnmp在做这个集合,所以您可以直接使用它。下面的示例是收集一个新的不同的SNMP值,一些是通过OID收集的,另一些是通过MIB中的命名变量收集的(如果您想通过名称获取相关的MIB,则需要有相应的MIB)。这个示例基本上是从pySNMP文档中提取的。
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()))https://stackoverflow.com/questions/39640966
复制相似问题