@ranger-01
2018-05-16T11:55:28.000000Z
字数 5612
阅读 1744
snmp
随着网络的规模越来越庞大,网络中的设备种类繁多,如何对越来越复杂的网络进行有效的管理,从而提供高质量的网络服务已成为网络管理所面临的最大挑战。网络管理已成为整个网络解决方案中重要的一部分。
网络管理通常包含4个要素:
注: “对MIB的读取与写操作”是指对MIB所标示的对象进行get和set。相当于这个对象提供了get和set方法
get/set:
PDU类型 | 名称 |
---|---|
0 | get-request |
1 | get-next-request |
2 | get-response |
3 | set-request |
4 | trap |
trap V1
trap V2
SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用于NMS与Agent的交互
各种报文的操作如下:
前面3种操作由NMS向Agent发出,后面2种操作由Agent向NMS发出。
MIB以树状结构进行存储,树的叶子节点表示管理对象,它可以通过从根节点开始的一条唯一路径来识别,这也就是OID(Object Identifier)
MY-MIB DEFINITIONS ::= BEGIN
IMPORTS
OBJECT-TYPE, Integer32, NOTIFICATION-TYPE, enterprises
FROM SNMPv2-SMI
;
myCompany OBJECT IDENTIFIER ::= {enterprises 42}
testCount OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "A sample count of something."
::= {myCompany 1}
testDescription OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "A description of something"
::= {myCompany 2}
testTrap NOTIFICATION-TYPE
STATUS current
DESCRIPTION "Test notification"
::= {myCompany 3}
END
SNMP协议在OSI模型的应用层(第七层)运作,在第一版中指定五种核心PDU:
SNMP第二版加入:
SNMP第三版提供重要的安全性功能:
# yum list all | grep net-snmp*
net-snmp.x86_64 1:5.5-44.el6_4.4 updates
net-snmp-devel.i686 1:5.5-44.el6_4.4 updates
net-snmp-devel.x86_64 1:5.5-44.el6_4.4 updates
net-snmp-libs.i686 1:5.5-44.el6_4.4 updates
net-snmp-libs.x86_64 1:5.5-44.el6_4.4 updates
net-snmp-perl.x86_64 1:5.5-44.el6_4.4 updates
net-snmp-python.x86_64 1:5.5-44.el6_4.4 updates
net-snmp-utils.x86_64 1:5.5-44.el6_4.4 updates
# rpm -qa | grep net-snmp*
net-snmp-utils-5.5-60.el6.x86_64
(snmp客户端,如snmpget)
net-snmp-devel-5.5-60.el6.x86_64
(开发subagent时要用到的编译工具:net-snmp-config --compile-subagent Test Test.c)
net-snmp-5.5-60.el6.x86_64
(server端:snmpd,snmptrapd)
net-snmp-perl-5.5-60.el6.x86_64
(可以根据mib生成对应源代码:env MIBS="+/etc/snmp/mibs/Test-MIB.my" mib2c Test )
net-snmp-libs-5.5-60.el6.x86_64
# rpm -ql net-snmp-utils
/usr/bin/encode_keychange
/usr/bin/snmpbulkget
/usr/bin/snmpbulkwalk
/usr/bin/snmpdelta
/usr/bin/snmpdf
/usr/bin/snmpget
/usr/bin/snmptrap
...
...
用net-snmp扩展MIB库,实现方法可归结为四种:
1)一是静态库方式,通过修改配置头文件,在相应地方包含新引入的mib模块的.c和.h文件,然后重新编译库文件和扩展代码;这种方式不够灵活,每次修改扩展的MIB后,都需要重新编译snmpd和扩展的代码,再重新安装snmpd到系统中。
2)二是编译动态共享库,只需把新引入的MIB模块的.c和.h文件编译成动态库,通过设置能够让代理程序载入。
对于第二种方式,一需要编译成.so动态共享库,二需要原代理程序是否包含dlmod或load命令,三还要看系统是否支持。一般情况下仅支持Unix平台。
3)三是扩展一个子代理,让SNMPD以主代理的模式运行,对于SNMPD我们只要让它启动就可以,不需要任何的更改和配置,把子代理编译生成的程序运行起来就可以扩展自定义的MIB库。
4)用shell脚本来扩展
% snmptranslate .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
NET-SNMP-MIB::prNames.0
# http://www.oidview.com/mibs/0/SNMPv2-MIB.html
% snmptranslate -On .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
.1.3.6.1.4.1.2021.2.1.2.0
% snmptranslate -Of .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
.iso.org.dod.internet.private.enterprises.ucdavis.procTable.prEntry.prNames.0
# Specifying a MIB object
% snmptranslate sysUpTime.0
Invalid object identifier: sysUpTime.0
% snmptranslate -IR sysUpTime.0
SNMPv2-MIB::sysUpTime.0
% snmptranslate -On -Td -IR sysUpTime
% snmptranslate -On -Td -Ib 'sys.*ime'
% snmptranslate -Tp -IR system
net-snmp-config
# net-snmp-config | grep display
--version displays the net-snmp version number
--indent-options displays the indent options from the Coding Style
--debug-tokens displays a example command line to search to source
--configure-options display original configure arguments
--prefix display the installation prefix
--snmpd-module-list display the modules compiled into the agent
--default-mibs display default list of MIBs
--default-mibdirs display default list of MIB directories
--snmpconfpath display default SNMPCONFPATH
--persistent-directory display default persistent directory
--perlprog display path to perl for the perl modules
yum install pysnmp
apt-get install python-pysnmp4
pip isntall pysnmp
smilint ./MY-MIB -s
build-pysnmp-mib -o MY-MIB.py MY-MIB
snmptrapd -f -Lo
snmpwalk -m MY-MIB -v 2c -c public localhost .1