如果正确配置 net-snmp,从技术上讲,您不必初始化或导出任何环境变量。
(注意我在 Ubuntu 12.04.1 LTS 上,所以我真的不必net-snmp
从源代码编译,即使我将涵盖我为完整性所做的全部工作,但这应该只适用于你想设置将一些 MIB 自动添加到net-snmp
其 Python 绑定中。)
首先我做了sudo apt-get install libsnmp-base libsnmp-python libsnmp15 snmp
这将安装 net-snmp 及其库以及 Python 绑定。它还net-snmp
在/usr/share/mibs/netsnmp/
. 如果您想获取一堆其他 IETF/IANA MIB,请执行以下操作:
sudo apt-get install snmp-mibs-downloader
正如您所期望的那样,它会将大量其他标准 MIB(包括 IF-MIB 等)下载到/var/lib/mibs/iana
,/var/lib/mibs/ietf
和. 如果您想再次下载 MIB,该软件包还会为您提供命令。/usr/share/mibs/iana
/usr/share/mibs/ietf
snmp-mibs-downloader
/usr/bin/download-mibs
接下来,使用snmpconf
命令设置您的 net-snmp 环境:
$ snmpconf -h
/usr/bin/snmpconf [options] [FILETOCREATE...]
options:
-f overwrite existing files without prompting
-i install created files into /usr/share/snmp.
-p install created files into /home/$USER/.snmp.
-I DIR install created files into DIR.
-a Don't ask any questions, just read in current
current .conf files and comment them
-r all|none Read in all or none of the .conf files found.
-R file,... Read in a particular list of .conf files.
-g GROUP Ask a series of GROUPed questions.
-G List known GROUPs.
-c conf_dir use alternate configuration directory.
-q run more quietly with less advice.
-d turn on debugging output.
-D turn on debugging dumper output.
我使用snmpconf -p
并浏览了菜单项。该过程基本上会查找现有的 snmp.conf 文件(/etc/snmp/snmp.conf
默认情况下)并将这些文件与新创建的配置文件合并,该配置文件将由选项/home/$USER/.snmp/snmp.conf
指定-p
。从那里开始,您实际上只需要告诉snmpconf
在哪里查找 MIB,但是脚本提供了许多有用的选项,用于在snmp.conf
.
完成后,您应该有一个主要的工作环境snmpconf
。这是我的(非常简单的)的/home/$USER/.snmp/snmp.conf
样子:
###########################################################################
#
# snmp.conf
#
# - created by the snmpconf configuration program
#
###########################################################################
# SECTION: Textual mib parsing
#
# This section controls the textual mib parser. Textual
# mibs are parsed in order to convert OIDs, enumerated
# lists, and ... to and from textual representations
# and numerical representations.
# mibdirs: Specifies directories to be searched for mibs.
# Adding a '+' sign to the front of the argument appends the new
# directory to the list of directories already being searched.
# arguments: [+]directory[:directory...]
mibdirs : +/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp:/home/$USERNAME/.snmp/mibs/newmibs
# mibs: Specifies a list of mibs to be searched for and loaded.
# Adding a '+' sign to the front of the argument appends the new
# mib name to the list of mibs already being searched for.
# arguments: [+]mibname[:mibname...]
mibs +ALL
一些陷阱:
- 加载此配置文件时
net-snmp
,它不会进行递归目录搜索,因此您必须提供 MIB 所在目录的绝对路径。
- 如果您选择告诉
net-snmp
在这些目录中加载所有 300 多个 MIB,它可能会减慢您的 SNMP 查询,并且STDERR
由于某些 MIB 可能已过时、错误或尝试从不存在或未由包下载的 MIB 导入定义。您的选择是:告诉snmpconf
您希望如何处理这些错误,或者找出丢失或过时的内容并自己下载 MIB。如果您选择后者,您可能会发现自己陷入了 MIB 兔子洞,所以请记住这一点。就个人而言,我建议您将它们全部加载,然后向后工作以仅加载对轮询特定设备有意义的给定 MIB。
- 您在搜索路径中指定的目录顺序
snmp.conf
很重要,尤其是在某些 MIB 引用或依赖于其他 MIB 时。我犯了一个错误,我只是通过在目录中获取一个 MIB 文件iana
并将其移动到ietf
目录中来解决。我确信有一种方法可以以编程方式找出哪些 MIB 依赖于其他 MIB,并使它们愉快地共存于一个目录中,但我不想浪费大量时间来解决这个问题。
这个故事的寓意是,如果你有一个适当的 snmp.conf,你应该能够做到这一点:
$ python
>>> import netsnmp
>>> oid = netsnmp.VarList(netsnmp.Varbind('dot1qTpFdbPort'))
>>> res = netsnmp.snmpwalk(oid, Version=2, DestHost='10.0.0.1', Community='pub')
>>> print res
('2', '1')
>>>
仅供参考,我省略了一堆输出,但如果您希望通过配置指令STDERR
,您可以再次将环境配置为转储STDERR
到日志文件。snmp.conf
希望这可以帮助。