oneliner.cmdgen生成SNMP命令的技巧和技巧
发布时间:2023-12-25 05:46:40
oneliner.cmdgen是一个用于生成SNMP命令的Python库。它提供了一些技巧和技巧,可以帮助您有效地使用它。
1. 使用getCmd生成SNMP GET命令:
getCmd是oneliner.cmdgen库中的一个函数,用于生成SNMP的GET命令。您可以在其中指定SNMP版本、目标主机、OID和SNMP团体字符串。以下是一个示例:
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',
)
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()))
这个例子中生成了一个基本的SNMP GET命令,用于获取OID为1.3.6.1.2.1.1.1.0的值。您可以根据需要修改OID和其他参数。
2. 使用nextCmd生成SNMP GETNEXT命令:
nextCmd是oneliner.cmdgen库中的另一个函数,用于生成SNMP的GETNEXT命令。它用于获取给定OID之后的下一个OID的值。以下是一个示例:
from pysnmp.entity.rfc3413.oneliner import cmdgen
cmdGen = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
cmdgen.CommunityData('public'),
cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)),
'1.3.6.1.2.1.2.2.1.2',
)
if errorIndication:
print(errorIndication)
else:
if errorStatus:
print('%s at %s' % (
errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex)-1] or '?'
)
)
else:
for varBindTableRow in varBindTable:
for name, val in varBindTableRow:
print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))
这个例子中生成了一个基本的SNMP GETNEXT命令,用于获取给定OID(在这种情况下是1.3.6.1.2.1.2.2.1.2)之后的OID的值。您可以根据需要修改OID和其他参数。
3. 添加循环以获取多个OID的值:
使用for循环可以轻松获取多个OID的值。以下是一个示例:
from pysnmp.entity.rfc3413.oneliner import cmdgen
cmdGen = cmdgen.CommandGenerator()
oids = ['1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.2.0'] # 可以添加更多的OID
for oid in oids:
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
cmdgen.CommunityData('public'),
cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)),
oid,
)
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()))
这个例子中使用for循环来获取多个OID(在这种情况下是1.3.6.1.2.1.1.1.0和1.3.6.1.2.1.1.2.0)的值。您可以根据需要添加更多的OID。
这些是使用oneliner.cmdgen生成SNMP命令的一些技巧和技巧。您可以根据自己的需求进行调整和扩展。
