当前位置: 首页 > 工具软件 > Net-C > 使用案例 >

net-snmp配置总结

林哲茂
2023-12-01

一、目的
本配置的目的是演示snmp的应用,在arm板上运行snmpd进程,通过电脑能查询arm板运行状态。
所以需要交叉编译工具,编译成arm版本snmp组件。

二、交叉编译
使用的snmp版本是net-snmp-5.7.3, 编译之后会得到snmpd服务,还有snmpwalk、snmpget等工具。
交叉编译的关键点设置交叉编译工具,去掉不需要的模拟,比如perl, 以及设置要加载的扩展MIB等。直接给出我使用的configure脚本:

./configure --build=i686-linux --host=arm-linux
CC=arm-linux-gcc --with-endianness=little
–enable-mini-agent
–disable-embedded-perl
–with-default-snmp-version=“3”
–with-logfile=/home/xxx/source/arminstall/snmpd.log
–with-persistent-directory=/home/xxx/source/arminstall/var
–with-install-prefix=/home/xxx/source/arminstall
–with-ar=arm-linux-ar
–without-perl-modules
–with-mib-modules=Test
LDFLAGS="-static"

执行完成configure, 再执行make, make install 就可以了。

三、编译自定义的MIB
参考网上的例子,一个简单的MIB Test-SLK-MIB.txt内容文件如下:

Test-SLK-MIB DEFINITIONS ::= BEGIN
IMPORTS OBJECT-GROUP, MODULE-COMPLIANCE, NOTIFICATION-GROUP
FROM SNMPv2-CONF
enterprises, Integer32, Unsigned32, OBJECT-TYPE, MODULE-IDENTITY,
NOTIFICATION-TYPE
FROM SNMPv2-SMI
DisplayString
FROM SNMPv2-TC;
Test MODULE-IDENTITY
LAST-UPDATED “201601221450Z”
ORGANIZATION
“”
CONTACT-INFO
“”
DESCRIPTION
“Video’s Server MIB.”
::= { enterprises 745352 }
Time OBJECT IDENTIFIER ::= { Test 1 }
GetTime OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION “Example : 2016/1/22”
::= { Time 1 }
GetNetSpeed OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
“get internet speed”
::= { Time 2 }
END

MIB文件的目的是通过充当一个模板的作用,通过此模拟文件生成Test.h和Test.c文件,放到源码arm-net-snmp-5.7.3/agent/mibgroup中,编译生成自定义的agent,应答我们定义的请求。
怎么从这个txt文件生成C语言代码文件呢? 用法如下:
env MIBS=”+/path/to/Test-SLK-MIB.txt” mib2c Test
其中前面部分env MIBS=”+/path/to/Test-SLK-MIB.txt” 的作用设置环境变量MIBS,它指示搜索MIBS文件的路径,也就是为了使mib2c工具在搜索路径中找到Test的名字在哪里。服务器端添加Test.c和Test.h后,是不需要这个MIB txt文件的,我的理解是服务器是直接处理OID序号的。客户端如果使用snmpget等工具请求的时候,如果使用Test等名字,也是要设置 MIBS环境变量指明MIB文件的,如果也直接使用OID号,则不需要。
使用模板生成的C语言文件还是需要添加自己的实现的,自己参考后面的参考文献即可。

四、运行snmpd和测试

首先我使用之前pc上使用过的一个snmpd.conf配置文件,主要修改是允许从其他IP访问,允许更多的访问资源,去掉udp6等, 生效的内容如下:
agentAddress udp:161
view systemonly included .1
rocommunity public default -V systemonly
rocommunity6 public default -V systemonly
rouser authOnlyUser
sysLocation Sitting on the Dock of the Bay
sysContact Me me@example.org
sysServices 72
proc mountd
# No more than 4 ‘ntalkd’ processes - 0 is OK
proc ntalkd 4
# At least one ‘sendmail’ process, but no more than 10
proc sendmail 10 1
disk / 10000
disk /var 5%
includeAllDisks 10%
load 12 10 5
trapsink localhost public
iquerySecName internalUser
rouser internalUser
# generate traps on UCD error conditions
defaultMonitors yes
# generate traps on linkUp/Down
linkUpDownNotifications yes
extend test1 /bin/echo Hello, world!
extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
master agentx

直接启动snmpd服务: ./snmpd -c snmpd.conf
之后运行测试工具:
env MIBS="+/home/xxx/mymibs/Test-SLK-MIB.txt" ./apps/snmpget -v2c -c public 192.168.1.100 Test-SLK-MIB:GetTime.0

或者:
./apps/snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.745352.1.1.0

测试完毕。
顺便提一些测试命令, 解析MIB文件:
./apps/snmptranslate -Tp -IR Test-SLK-MIB::Test
调试snmpd启动日志:
sudo ./agent/snmpd -c snmpd.conf -f -Le -Dread_config
显示MIB搜索路径:
net-snmp-config --snmpconfpath

五、参考文献

  1. https://blog.csdn.net/liang_baikai/article/details/53423211?locationNum=1&fps=1
    2.https://www.cnblogs.com/oloroso/p/4814467.html
    3.http://fajun1216.blog.163.com/blog/static/207405106201262104843794/
    4.https://www.cnblogs.com/shenlinken/p/5316021.html
    5.https://blog.csdn.net/liang_baikai/article/details/53423211?locationNum=1&fps=1
 类似资料: