net-snmp扩展有多种方式,在此只介绍两种——动态库扩展,静态库扩展。
在做net-snmp开发之前,首先确定net-snmp相关的软件是否安装。
rpm -qa | grep snmp net-snmp-5.3.1-19.el5 net-snmp-perl-5.3.1-19.el5 net-snmp-libs-5.3.1-19.el5 net-snmp-utils-5.3.1-19.el5 net-snmp-devel-5.3.1-19.el5
使用动态库扩展net-snmp有4个步骤,分别是:
1:编写MIB库。
2:根据MIB库生成源代码。可以使用mib2c工具。
3:编译。
4:修改配置文件。
编写MIB库
假设我们现在需要使用snmp来获取某个服务器上的硬盘使用情况——df命令显示的数据。首先我们需要一个字段来表示HostName,然后我们需要一个表来存放磁盘的信息DiskInfoTable。
1 DISK-SNMP-MIB DEFINITIONS ::= BEGIN 2 IMPORTS 3 MODULE-IDENTITY, enterprises, OBJECT-TYPE, Integer32, 4 NOTIFICATION-TYPE FROM SNMPv2-SMI 5 SnmpAdminString FROM SNMP-FRAMEWORK-MIB 6 netSnmp FROM NET-SNMP-MIB 7 RowStatus, StorageType ,DisplayString FROM SNMPv2-TC 8 InetAddressType, InetAddress FROM INET-ADDRESS-MIB 9 ; 10 DiskCheck MODULE-IDENTITY 11 LAST-UPDATED "201602170000Z" 12 ORGANIZATION "www.cnblogs.com/ngnetboy" 13 CONTACT-INFO 14 "postal: none 15 email: ngnetboy@163.com 16 " 17 DESCRIPTION 18 "check the disk" 19 REVISION "201602170000Z" 20 DESCRIPTION "First draft" 21 ::= { enterprises 888888 } 22 23 root OBJECT IDENTIFIER ::= {DiskCheck 1} 24 25 HostName OBJECT IDENTIFIER ::= {root 1} 26 DiskInfoTable OBJECT IDENTIFIER ::= {root 2} 27 28 HostName OBJECT-TYPE 29 SYNTAX DisplayString 30 ACCESS read-only 31 STATUS current 32 DESCRIPTION 33 "PC is name" 34 ::= {root 1} 35 DiskInfoTable OBJECT-TYPE 36 SYNTAX SEQUENCE OF DiskInfoEntry 37 ACCESS not-accessible 38 STATUS current 39 DESCRIPTION "The disk's info include size used avail capacity and mounted on" 40 ::= {root 2} 41 42 diskInfoEntry OBJECT-TYPE 43 SYNTAX DiskInfoEntry 44 ACCESS not-accessible 45 STATUS current 46 DESCRIPTION "A row describing a given working group" 47 INDEX { Filesystem } 48 ::= {DiskInfoTable 1} 49 50 DiskInfoEntry ::= SEQUENCE { 51 Filesystem DisplayString 52 size DisplayString 53 used DisplayString 54 avail DisplayString 55 capacity DisplayString 56 mountedOn DisplayString 57 } 58 59 Filesystem OBJECT-TYPE 60 SYNTAX DisplayString 61 ACCESS read-only 62 STATUS current 63 DESCRIPTION "name of the disks" 64 ::= {diskInfoEntry 1} 65 66 size OBJECT-TYPE 67 SYNTAX DisplayString 68 ACCESS read-only 69 STATUS current 70 DESCRIPTION "size of the disks" 71 ::= {diskInfoEntry 2} 72 73 used OBJECT-TYPE 74 SYNTAX DisplayString 75 ACCESS read-only 76 STATUS current 77 DESCRIPTION "used of the disks" 78 ::= {diskInfoEntry 3} 79 80 avail OBJECT-TYPE 81 SYNTAX DisplayString 82 ACCESS read-only 83 STATUS current 84 DESCRIPTION "avail of the disks" 85 ::= {diskInfoEntry 4} 86 87 capacity OBJECT-TYPE 88 SYNTAX DisplayString 89 ACCESS read-only 90 STATUS current 91 DESCRIPTION "capacity of the disks" 92 ::= {diskInfoEntry 5} 93 94 mountedOn OBJECT-TYPE 95 SYNTAX DisplayString 96 ACCESS read-only 97 STATUS current 98 DESCRIPTION "mounted_on of the disks" 99 ::= {diskInfoEntry 6} 100 END