snmp总结三:net-snmp
snmp总结三:net-snmp
本实例测试版本 net-snmp-5.8,开发主机ubuntu已安装 net-snmp。
1 交叉编译
交叉编译时对功能进行一定的裁剪,编译脚本示例如下所示:
#!/bin/sh
HOME=$(pwd)
PREFIX_DIR=$HOME/install
COMPILE_HEAD=/opt/imx6ull_toolchain/bin/arm-none-linux-gnueabi-
# 编译snmp
make_snmp()
{
cd $HOME
rm -rf net-snmp-5.8
tar zxvf net-snmp-5.8.tar.gz
cd net-snmp-5.8
./configure --prefix=$PREFIX_DIR --host=arm-linux --target=arm-linux --build=i686-linux \
--with-cc=${COMPILE_HEAD}gcc --with-ar=${COMPILE_HEAD}ar --with-endianness=little --disable-embedded-perl \
LDFLAGS=-L$PREFIX_DIR/lib CFLAGS=-I$PREFIX_DIR/include \
--disable-perl-cc-checks --without-perl-modules --disable-applications --disable-manuals --disable-scripts --disable-ipv6 \
--with-default-snmp-version="3" --with-sys-contact="fiber" --with-sys-location="china" --with-logfile="/var/log/snmpd.log" \
--with-persistent-directory="/var/net-snmp"
make clean
make
if [ $? == 0 ]; then
make install
fi
cd $HOME
rm -rf net-snmp-5.8
}
make_snmp
- 编译完成后将相关动态库、snmpd可执行程序拷贝到目标板。
-
snmpd -v
NET-SNMP version: 5.8
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
2 snmpd.conf
SNMPv2c基础配置示例
# snmp 代理协议及端口
agentAddress udp:6161
view all included .1
# 读写公共体
rwcommunity public
# 动态加载自定义mib库
dlmod hybrid_scalar /home/wanghuan/wh_tools/snmp/hybrid-snmp/hybrid.so
dlmod hybrid_table /home/wanghuan/wh_tools/snmp/hybrid-snmp/hybrid.so
# SNMPv2c trap配置
trap2sink 192.168.1.108:6162 public
trap2sink 192.168.1.109:6162 public
trap2sink 192.168.1.111:6162 public
SNMPv3基础配置示例
# snmp 代理协议及端口
agentAddress udp:6161
view all included .1
# 动态加载自定义mib库
dlmod hybrid_scalar /home/wanghuan/wh_tools/snmp/hybrid-snmp/hybrid.so
dlmod hybrid_table /home/wanghuan/wh_tools/snmp/hybrid-snmp/hybrid.so
# SNMPv3 配置
# 定义用户访问权限(读写) snmpuser
rwuser snmpuser
# 创建 snmpuser 用户,认证方式MD5,加密算法DES
createUser snmpuser MD5 auth123456 DES encrypt123456
# SNMPv3 trap配置
trapsess -v 3 -u snmpuser -a MD5 -A auth123456 -x DES -X encrypt123456 -l authPriv 192.168.1.108:6162
3 动态支持拓展 MIB
使用 snmp 管理设备时通常厂家都会为设备自定义拓展 MIB。拓展 MIB 的支持有好几种方式,这里选用以动态库的方式进行拓展。
使用测试的 hybrid.mib。
HYBRID-MIB DEFINITIONS ::= BEGIN --MIB文件开始
IMPORTS --模块数据类型引用区域
OBJECT-GROUP, NOTIFICATION-GROUP
FROM SNMPv2-CONF
enterprises, Integer32, OBJECT-TYPE, MODULE-IDENTITY, OBJECT-IDENTITY, Unsigned32,
NOTIFICATION-TYPE
FROM SNMPv2-SMI
TEXTUAL-CONVENTION, DisplayString
FROM SNMPv2-TC;
-- PMU
-- FROM FH-SMI;
-- 网能:电源系统监控单元
-- 1.3.6.1.4.1.9999.1 根节点
HybridPower MODULE-IDENTITY
LAST-UPDATED "202208250000Z"
ORGANIZATION "Fiberhome."
CONTACT-INFO
"Tel: +86 186xxxxxxx
E-mail: xxxxxxx@fiberhome.com"
DESCRIPTION
"Hybrid power system example mib file."
::= { enterprises 9999 }
--
-- 节点定义
--
-- 简单标量
-- 1.3.6.1.4.1.9999.1
exampleObject OBJECT-IDENTITY
STATUS current
DESCRIPTION
"Example Object"
::= { HybridPower 1 }
-- 1.3.6.1.4.1.9999.1.1
exampleObject1 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Example:Integer32 read-only."
::= { exampleObject 1 }
-- 1.3.6.1.4.1.9999.1.2
exampleObject2 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Example:Integer32 read-write."
::= { exampleObject 2 }
-- 1.3.6.1.4.1.9999.1.3
exampleObject3 OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Example:String."
::= { exampleObject 3 }
-- 简单表类型,用户列表
-- 1.3.6.1.4.1.9999.2
userTable OBJECT-TYPE
SYNTAX SEQUENCE OF UserEntry
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"userTable"
::= { HybridPower 2 }
-- 1.3.6.1.4.1.9999.2.1
userEntry OBJECT-TYPE
SYNTAX UserEntry
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"userEntry."
INDEX { userIdx }
::= { userTable 1 }
UserEntry ::= SEQUENCE {
userIdx Integer32,
userName OCTET STRING,
userAge Integer32
}
-- 1.3.6.1.4.1.9999.2.1.1
userIdx OBJECT-TYPE
SYNTAX Integer32 (1..100)
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"User index."
::= { userEntry 1 }
-- 1.3.6.1.4.1.9999.2.1.2
userName OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"User name."
::= { userEntry 2 }
-- 1.3.6.1.4.1.9999.2.1.3
userAge OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"User age."
::= { userEntry 3 }
-- trap 测试
-- 1.3.6.1.4.1.9999.3
hibridNotifications OBJECT-IDENTITY
STATUS current
DESCRIPTION
"notification tree."
::= { HybridPower 3 }
-- 1.3.6.1.4.1.9999.3.1
RecNotify NOTIFICATION-TYPE
OBJECTS { RecCur, RecVol }
STATUS current
DESCRIPTION
"Description."
::= { hibridNotifications 1 }
-- trap 通知对象
-- 1.3.6.1.4.1.9999.4
notificationObjs OBJECT IDENTIFIER
::= { HybridPower 4 }
-- 1.3.6.1.4.1.9999.4.1
RecCur OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS accessible-for-notify
STATUS current
DESCRIPTION
"Rectifier current."
::= { notificationObjs 1 }
-- 1.3.6.1.4.1.9999.4.2
RecVol OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS accessible-for-notify
STATUS current
DESCRIPTION
"Rectifier voltage."
::= { notificationObjs 2 }
END
3.1 mib2c 生成 c 程序
使用 mib2c 程序生成 c 程序,命令示例如下:
# 生成标量程序
env MIBS="+/home/wanghuan/wh_tools/snmp/hybrid-snmp/hybrid.mib" mib2c -c mib2c.scalar.conf -f hybrid_scalar .1.3.6.1.4.1.9999
# 生成trap程序
env MIBS="+/home/wanghuan/wh_tools/snmp/hybrid-snmp/hybrid.mib" mib2c -c mib2c.notify.conf -f hybrid_notify .1.3.6.1.4.1.9999
# 生成表格程序
env MIBS="+/home/wanghuan/wh_tools/snmp/hybrid-snmp/hybrid.mib" mib2c -c mib2c.iterate.conf -f hybrid_table .1.3.6.1.4.1.9999
3.2 动态库支持
编写 makefile 生成 hybrid.so
CC := gcc
CFLAGS := -I. `net-snmp-config --cflags` -g -std=gnu99
LDFLAGS := -shared -fPIC
TAGET_NAME = hybrid
all: $(TAGET_NAME).so
$(TAGET_NAME).so:
$(CC) $(CFLAGS) $(LDFLAGS) -o $(TAGET_NAME).so hybrid_scalar.c hybrid_table.c hybrid_notify.c
.PHONY : clean
clean :
rm -f *.so *.o
修改 snmpd.conf 配置文件,在末尾添加
# snmp 代理协议及端口
agentAddress udp:6161
view all included .1
# 读写公共体
rwcommunity public
# 动态加载自定义mib库
dlmod hybrid_scalar /home/wanghuan/wh_tools/snmp/hybrid-snmp/hybrid.so
dlmod hybrid_table /home/wanghuan/wh_tools/snmp/hybrid-snmp/hybrid.so
# SNMPv2c trap配置
trap2sink 192.168.1.108:6162 public
运行 snmpd
sudo snmpd -f -Lo --master=agentx -Dagentx,dlmod -c /home/wanghuan/wh_tools/snmp/snmpd.conf
4 snmp测试
代理端运行后,我们通过 MIB Browser 工具加载 hybrid.mib 对其进行简单的 get、set操作测试。
get测试

set测试

表格查询


浙公网安备 33010602011771号