snmp-cmds 是一个 Python 库,用于通过 SNMP 与目标设备进行通信
那里有很多 SNMP 库。何苦?
确实有很多很棒的 SNMP 库可用于 python。
有些,比如 PySNMP,是纯 Python 的。这使得它们跨平台的可移植性令人难以置信,这很棒,但也使它们相对较慢。此外,与 PySNMP 一样令人惊奇的是,它并不以其易用性而著称。
有些,如 net-snmp 绑定和 easysnmp,是作为 Net-SNMP 等 C 库的扩展而构建的。这使得它们非常快速和高效,但需要在它们分布的每个平台上编译它们,并针对特定版本的 Net-SNMP 库进行编译。根本不是很便携。
在编写这个库时,我开始寻找一个中间立场。一个可以利用 Net-SNMP 项目的功能和速度的库,同时是可移植的纯 python 并且不依赖于任何特定版本的 Net-SNMP。我通过制作一个调用 Net-SNMP 二进制文件作为子进程的库来实现这一点。
虽然这个库应该可以在安装了 Net-SNMP 的 Windows 平台上运行,但它尚未在 Windows 上进行测试。谨慎使用。
要求
此软件包需要在您的系统上安装以下软件:
- `Net-SNMP<http://net-snmp.org>`_(可以在 Ubuntu上安装)
sudo apt-get install snmp
- IETF RFC MIB(可以在 Ubuntu上安装)
sudo apt-get install snmp-mibs-downloader
- 蟒蛇 3.5+
安装
简单的方法:
pip3 安装 snmp - cmds
艰难的方式:
git clone https : // github . com / alextremblay / snmp - cmds 。git
cd snmp - cmds
pip install .
用法:API
如果要向一两个 SNMP 目标发出多个 SNMP 请求,则需要使用 API:
从 snmp_cmds 导入 会话
my_device = Session ( ipaddress = '10.0.0.1' ,
read_community = 'secret password' ,
write_community = 'SUPER secret password' )
system_name_string = my_device 。get (
oid = 'SNMPv2-MIB::sysName.0' )
new_name_string = '让我们重命名这个设备'
my_device 。设置( oid = 'SNMPv2-MIB::sysName.0' , value_type = 's' ,
value = new_name_string )
会话 API 方法:get、get_some、get_table、walk、set
用法:命令
如果您想向多个目标发出几个 SNMP 请求,请考虑使用单独的 snmp 命令功能;前任:
从 snmp_cmds 导入 snmpwalk
结果 = snmpwalk ( community = '我的读取密码' ,
ipaddress = '192.xxx' ,
oid = 'SNMPv2-MIB::system' )
print ( result ) # 打印元组列表,每个元组包含
# OID 和在该 OID 处找到的值。
可用命令:snmpget snmpget。snmpgetsome、snmpwalk、snmptable、snmpset
指数和表格
snmp_cmds.commands 模块
该模块提供单独的 SNMP 命令,用于一次性情况,或您需要向多个设备发出单个 SNMP 请求的情况。如果您计划对同一设备进行多次调用,则可能需要查看 api.py。
snmp_cmds.commands.
snmpget
( ipaddress , oid , community='public' , port=161 , timeout=3 )[来源]
包装 Net-SNMP 的snmpget
命令
运行等效的“ ”并解析结果。如果来自服务器的响应是 错误或错误,则此函数返回 。否则,它返回从服务器检索到的值snmpget -Oqv -Pe -t {timeout} -r 0 -v 2c -c {community} {host} {oid}
No Such Object
No Such Instance
None
参数: |
|
---|---|
返回类型: |
|
返回: | 如果成功, |
提高: |
|
snmp_cmds.commands.
snmpgetsome
( ipaddress , oids , community='public' , port=161 , timeout=3 )[来源]
围绕 Net-SNMP 的 Warper
在 OID 列表上运行 Net-SNMP 的“snmpget”命令,并返回形式为 (oid, result) 的元组列表。
参数: |
|
---|---|
返回类型: |
|
返回: | 形式为 (oid, result) 的元组列表 |
提高: |
|
snmp_cmds.commands.
snmpset
( ipaddress , oid , value_type , value , community='private' , port=161 , timeout=3 )[来源]
在给定的 OID 上运行 Net-SNMP 的“snmpset”命令,如果成功则返回结果。
参数: |
|
---|---|
返回类型: |
|
返回: | 在 SNMP 目标上设置的值 |
提高: |
|
snmp_cmds.commands.
snmptable
( ipaddress , oid , community='public' , port=161 , timeout=3 , sortkey=None )[来源]
在给定的 OID 上运行 Net-SNMP 的“snmptable”命令,将结果转换为字典列表,并可选择按给定的键对列表进行排序。
参数: |
|
---|---|
返回类型: |
|
返回: | 一个字典列表,表的每一行一个。dicts 的键对应于表的列名。 |
提高: |
|
snmp_cmds.commands.
snmpwalk
( ipaddress , oid , community='public' , port=161 , timeout=3 )[来源]
在 OID 列表上运行 Net-SNMP 的“snmpget”命令,并返回形式为 (oid, result) 的元组列表。
参数: |
|
---|---|
返回类型: |
|
返回: | 形式为 (oid, result) 的元组列表 |
提高: |
|