arm-linux—SNMP简单网络管理协议的交叉编译和测试

1. 平台信息

Linux:VMware? Workstation 12 Pro + Ubuntu 12.04 64bit

ARM:ZLG EPC-M6G2C 工控主板

涉及工具:SecureCRT(串口终端)、SugarNMSTool 智和网管软件

交叉工具链:arm-linux-gnueabihf-gcc (gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux)

SNMP源码版本:net-snmp-5.7.3

2. SNMP协议

SNMP:“简单网络管理协议”,用于网络管理的协议。SNMP用于网络设备的管理。SNMP的工作方式:管理员需要向设备获取数据,所以SNMP提供了“读”操作;管理员需要向设备执行设置操作,所以SNMP提供了“写”操作;设备需要在重要状况改变的时候,向管理员通报事件的发生,所以SNMP提供了“Trap”操作。

更多:https://blog.csdn.net/bbwangj/article/details/80981098

3. 移植和交叉编译SNMP

3.1 下载源码

官网下载地址:http://www.net-snmp.org/download.html

本次下载的是5.7.3版本:https://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.3/

选择下载压缩包:net-snmp-5.7.3.tar.gz

在指定目录下,解压缩源码包:

1

root@Linux-host:~/hu/SNMP# tar -xzvf net-snmp-5.7.3.tar.gz

3.2 配置configure,生成.config文件

snmp的configure配置,可以使用./configure --help查看一下配置选项,具体如下表所示:

选项说明
–host=arm-linux运行平台
–target=arm-linux目标平台
–build=i686-linux编译平台
–with-cc=arm-linux-gcc交叉编译工具
–with-ar=arm-linux-ar使用的打包工具
–prefix=/usr/local/net-snmp安装目录
–disable-shared不编译共享库
–disable-scripts不要安装mib2c等脚本
–with-endianness=little指定小端模式
-enable-mini-agent最小化构建agent
--disable-deprecated不编译弃用的功能
--without-logfile指定snmpd不输出日志文件(可以使用--with-logfile指定默认日志文件位置)
--disable-minimalist删除所有非基本的代码功能
–enable-debugging打开调试信息
--disable-testing-code不使用测试代码(某些代码不被使用)
–with-openssl=/opt/hardhatopenssl库路径(用于支持加密等)
–disable-ipv6不使用IPv6
–disable-manuals不安装manpage说明页
–disable-ucd-snmp-compatibility不需要兼容ucd-snmp
–disable-snmptrapd-subagent不用支持snmptrapd的子代理
–disable-embedded-perl在SNMP代理和snmptrapd禁用嵌入式Perl。默认启用
–disable-applications是否关闭snmpget等功能,根据自己的需要选择
--with-default-snmp-version="3"指定默认协议版本
--enable-as-needed仅链接需要库,不链接不必要的库(如果只使用其他方法行不通,链接libperl针对应用而非Net-SNMP库。)

对于交叉编译,我的配置如下:

1
2
3
4
5

root@Linux-host:~/hu/SNMP/net-snmp-5.7.3# ./configure --host=arm-linux \
--build=i686-linux --with-cc=arm-linux-gnueabihf-gcc \
--with-ar=arm-linux-gnueabihf-ar --with-endianness=little \
--disable-ipv6 --disable-embedded-perl --disable-shared  \
--prefix=/root/hu/SNMP/arm-snmp

其中

--with-cc=arm-linux-gnueabihf-gcc需要自己根据情况而定,

--disable-ipv6 取消ipv6的支持

--disable-embedded-perl 不加这一配置,会报错找不到perl库,如下提示:

1
2
3

/usr/bin/ld: cannot find -lperl
collect2: error: ld returned 1 exit status
make[1]: *** [libnetsnmpagent.la] 错误 1

也可以安装相关库:

1

sudo apt-get install libperl-dev

没有出错时,最后提示信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

...

---------------------------------------------------------
            Net-SNMP configuration summary:
---------------------------------------------------------

  SNMP Versions Supported:    1 2c 3
  Building for:               linux
  Net-SNMP Version:           5.7.3
  Network transport support:  Callback Unix Alias TCP UDP IPv4Base SocketBase TCPBase UDPIPv4Base UDPBase
  SNMPv3 Security Modules:     usm
  Agent MIB code:            default_modules =>  snmpv3mibs mibII ucd_snmp notification notification-log-mib target agent_mibs agentx disman/event disman/schedule utilities host
  MYSQL Trap Logging:         unavailable
  Embedded Perl support:      disabled
  SNMP Perl modules:          disabled
  SNMP Python modules:        disabled
  Crypto support from:        internal
  Authentication support:     MD5 SHA1
  Encryption support:         DES AES
  Local DNSSEC validation:    disabled

---------------------------------------------------------

3.3 编译安装

编译:

1
2
3
4
5

root@Linux-host:~/hu/SNMP/net-snmp-5.7.3# make

...
chmod a+x net-snmp-config
touch net-snmp-config-x

用arm-linux-gnueabihf-strip工具可以对生成的snmpd进行瘦身:

1
2
3
4
5
6
7

root@Linux-host:~/hu/SNMP/net-snmp-5.7.3# ll agent/snmpd
-rwxr-xr-x 1 root root 6528914  7月  2 15:07 agent/snmpd*

root@Linux-host:~/hu/SNMP/net-snmp-5.7.3# arm-linux-gnueabihf-strip agent/snmpd

root@Linux-host:~/hu/SNMP/net-snmp-5.7.3# ll agent/snmpd
-rwxr-xr-x 1 root root 1336548  7月  2 15:08 agent/snmpd*

由上可以看出,snmpd由6M多变为1.3M

安装:

1

root@Linux-host:~/hu/SNMP/net-snmp-5.7.3# make install

之后可以在指定的目录下得到安装后的文件。

1
2
3

root@Linux-host:~/hu/SNMP/net-snmp-5.7.3# cd ../arm-snmp/
root@Linux-host:~/hu/SNMP/arm-snmp# ls
bin  include  lib  sbin  share

3.4 配置文件snmp.conf的修改

先将示例的配置文件拷贝到安装目录下:

root@Linux-host:~/hu/SNMP/net-snmp-5.7.3# cp EXAMPLE.conf ../arm-snmp/share/snmp/snmpd.conf

后进行修改:

root@Linux-host:~/hu/SNMP/arm-snmp# vim share/snmp/snmpd.conf

修改1:打开对外udp:161端口

# Listen for connections from the local system only
#agentAddress udp:127.0.0.1:161 #注释掉
# Listen for connections on all interfaces (both IPv4 *and* IPv6)
#agentAddress udp:161,udp6:[::1]:161
agentAddress udp:161 #添加

修改2:选择SNMP协议版本

#
# ACTIVE MONITORING
#

# send SNMPv1 traps
#trapsink localhost public
# send SNMPv2c traps
trap2sink localhost public
# send SNMPv2c INFORMs
#informsink localhost public

修改3:设置访问权限

#
# ACCESS CONTROL
#

# system + hrSystem groups only
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1

# Full access from the local host
#rocommunity public localhost
# Default access to basic system info
# rocommunity public default -V systemonly
rocommunity public default

4. 移植到目标板

4.1指令流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

[root@EPC-M6G2C opt]# mkdir SNMP/
[root@EPC-M6G2C opt]# cd SNMP/
[root@EPC-M6G2C SNMP]# cp /media/mmcblk0p1/arm-net-snmp-5.7.3.tar ./
[root@EPC-M6G2C SNMP]# tar -xvf arm-net-snmp-5.7.3.tar

[root@EPC-M6G2C SNMP]# ls
arm-net-snmp-5.7.3/     arm-net-snmp-5.7.3.tar* readme.txt*
[root@EPC-M6G2C SNMP]# cd arm-net-snmp-5.7.3/
[root@EPC-M6G2C arm-net-snmp-5.7.3]# wr cp sbin/snmpd /usr/sbin/
[root@EPC-M6G2C arm-net-snmp-5.7.3]# wr cp -r share/ /usr/local/
[root@EPC-M6G2C arm-net-snmp-5.7.3]# ll /usr/sbin/snmpd
-rwxr-xr-x    1 root     root        1.3M Jul  2 07:36 /usr/sbin/snmpd*
[root@EPC-M6G2C arm-net-snmp-5.7.3]# ll /usr/local/share/snmp/
total 8
drwxr-xr-x    3 root     root         296 Jul  2 07:36 ./
drwxr-xr-x    3 root     root         224 Jul  2 07:36 ../
drwxr-xr-x    2 root     root        5.1K Jul  2 07:36 mibs/
-rw-r--r--    1 root     root        6.9K Jul  2 07:36 snmpd.conf

4.2 运行snmpd

snmpd命令选项:

1
2
3
4
5
6
7
8
9
10
11
12

注:snmpd命令的有用选项
-c FILE 指定文件为配置文件
-C 不读取默认的配置文件
-d dump接收和发送SNMP数据包
-D TOKEN 对于给定的TOKEN(标志)打开调试信息 ( -Dmib_init)
-I [-]INITLIST 对于要初始化的MIB列表显示
-M DIRLIST 指定MIB库的路径
-V 显示详细信息
-Le 把错误信息输出到日志中
-Lf FILE 把错误信息输出到指定文件中
-m MIBLIST use MIBLIST instead of the default MIB list
-f                    do not fork from the shell

依次可执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

[root@EPC-M6G2C arm-net-snmp-5.7.3]# snmpd -c /usr/local/share/snmp/snmpd.conf -
f -Le -d -M /usr/local/share/snmp/mibs/
Turning on AgentX master support.
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf
Failed to create the persistent directory for /var/net-snmp/snmpd.conf
read_config_store open failure on /var/net-snmp/snmpd.conf

Sending 44 bytes to UDP: [127.0.0.1]:162->[0.0.0.0]:0
0000: 30 2A 02 01  00 04 06 70  75 62 6C 69  63 A4 1D 06    0*.....public...
0016: 0A 2B 06 01  04 01 BF 08  03 02 0A 40  04 C0 A8 0A    .+.........@....
0032: 74 02 01 00  02 01 00 43  01 62 30 00                 t......C.b0.

NET-SNMP version 5.7.3

Sending 1 bytes to callback: 2 on fd 5
0000: 00                                                    .


Received 1 byte packet from callback: 1 on fd 3
0000: 00                                                    .


Sending 1 bytes to callback: 1 on fd 3
0000: 00                                                    .


Received 1 byte packet from callback: 2 on fd 5
0000: 00                                                    .


Sending 1 bytes to callback: 2 on fd 5
0000: 00                                                    .


Received 1 byte packet from callback: 1 on fd 3
0000: 00                                                    .


Sending 1 bytes to callback: 1 on fd 3
0000: 00                                                    .

可以看出运行正常,有发送和接受的udp数据包。

4.3 注意事项

4.3.1 iptables 防火墙对外开放udp:161端口访问权限

1

iptables -I INPUT -p udp --dport 161 -j ACCEPT

可用命令查看当前情况:

iptables -L

4.3.2 确保udp:161端口不被占用(161是snmp默认端口,一般情况下不会被其他占用)

可用命令查看端口情况:

netstat -an |grep 161

4.3.3 mibs文件路径可以不用指定,运行也没有问题,但是snmpd.conf配置文件路径必需要指定。

5. snmp测试

明天再写,先下班。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
linux环境下的snmp测试脚本, Installing SNMPv2C Agent Conformance Test Package 2008/04/08 IPv6 Promotion Council Terminology =========== Tester Node (TN) A tester node for the conformance tests. Node Under Test (NUT) A testee node for the conformance tests. Network Under Test The network where the conformance tests are executed. Tester Interface The network interface of TN hooked up to the Network Under Test. Interface Under Test The network interface of NUT hooked up to the Network Under Test. Prerequisites ============= Prerequisites for TN: - The package supports FreeBSD 6.0-RELEASE or higher version. - The package can also coexist with FreeBSD version of KAME. Installing the package onto TN ============================== 0. Before Starting (A) You need to install following softwares. - Perl (Required version : 5.8.7 or higher) - Net-SNMP (Required version : 5.3.1 or higher) *** You can download it from the following URL: http://net-snmp.sourceforge.net/ - v6eval (Required version : 3.0.11 or higher) Please refer to 00README.v6eval in "v6eval" for more information. *** You can download it from the following URL: http://www.tahi.org/release/ - koi (Required version : 1.1.1 or higher) Please refer to README file in "koi" package for more information. *** You can download it from the following URL: http://www.tahi.org/release/ 1. Extracting ct package % tar zxvf ct-snmpv2c-ag-X.X.tar.gz 2. Copying ct package Copy ct directory to any directory you like. % cp -pR $ORGDIR/ct-snmpv2c-ag-X.X $SOMEWHERE/ct-snmpv2c-ag-X.X % chmod -R +w $SOMEWHERE/ct-snmpv2c-ag-X.X 4. Setup ct environment % (enable TN's ipv6 capibility) % cd $SOMEWHERE/ct-snmpv2c-ag-X.X % edit config.txt % make test [End of INSTALL]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zypiverson001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值