arm-linux---SNMP简单网络管理协议的交叉编译_snmp configure 编译-程序员宅基地

技术标签: linux  arm-linux  snmp  

目录

1. 平台信息

2. SNMP协议

3. 移植和交叉编译SNMP

3.1 下载源码

3.2 配置configure,生成.config文件

3.3 编译安装

3.4 配置文件snmp.conf的修改

4. 移植到目标板

4.1指令流程:

 

4.2 运行snmpd

4.3  注意事项

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

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

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

5. snmp测试

5.1 SNMP 的网络架构

5.1.1 NMS(网络管理站)

5.1.2 Agent 代理

5.1.3 MIB 管理信息库

5.2 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协议。

更多:

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

https://blog.csdn.net/shmily_cml0603/article/details/12968157

 

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

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

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/hardhat openssl库路径(用于支持加密等)
–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库。)

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

 

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库,如下提示:

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

也可以安装相关库:

sudo apt-get install libperl-dev

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

...

---------------------------------------------------------
            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 编译安装

编译:

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进行瘦身:

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

安装:

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

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

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. 移植到目标板

将make install生成目录下的sbin/snmpd 以及 share/snmp/mibs/ + snmpd.conf(修改过的),打包为arm-net-snmp-5.7.3.tar,拷贝到SD卡中,最后拷贝到ARM板上。

4.1指令流程:

[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命令选项:

注: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

依次可执行:

[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端口访问权限

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测试

明天再写,先下班。

5.1 SNMP 的网络架构

SNMP网络架构由三部分组成:NMS(网络管理站)、Agent(代理)、MIB(管理信息库)

5.1.1 NMS(网络管理站)

NMS是网络中的管理者,是一个利用SNMP协议对网络设备进行管理和监视的系统。可以是一台专门用来进行网络管理的服务器,也可以指某个设备中之中管理功能的一个应用程序。

NMS可以向Agent发出请求,查询或修改一个或多个具体的参数值。同时,NMS可以接收Agent主动发送的Trap信息,以获知被管理设备当前的状态
 

5.1.2 Agent 代理

Agent是网络设备中的一个应用模块,用于维护被管理设备的信息数据,并响应NMS的请求,把管理数据汇报给发送请求的NMS。

Agent接收到NMS的请求信息后,完成查询或修改操作,并把操作结果发送给NMS,完成响应。同时,当设备发生故障或者其他事件的时候,Agent会主动发送Trap信息给NMS,通知设备当前的状态变化。
 

5.1.3 MIB 管理信息库

任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB就是被管理对象的集合。它定义了被管理对象的一系列的属性:对象的名称、对象的访问权限和对象的数据类型等。每个Agent都有自己的MIB。MIB也可以看做是NMS和Agent之间的一个接口,通过这个接口,NMS可以对Agent中的每一个被管理对象进行读/写操作,从而达到管理和监控设备的目的
 

NMS、Agent 和 MIB 之间的关系如图所示:

 

MIB的结构:

MIB是以树状结构进行存储的,树的节点表示被管理对象,它可以用从根开始的一条路径唯一地识别,这条路径就称为OID。

如图所示,管理对象system可以用一串数字{1.3.6.1.2.1.1}唯一标识,这串数字就是system的OID。

5.2 SNMP 的测试

首先,在板端运行snmpd 服务进程,详见4.2;

然后用网线将板端的网口与windows相连,必要时手动修改Windows IP,确保板端与Windows处于同一网域;

最后在windows平台下运行SugarNMSTool 网络管理工具,运行效果如下。

 

如上图所示

IP : 192.168.10.116 是ARM的地址,搜索设备时,可以按这一网段进行搜索。

SNMP5.7.3的源码包 以及 SugarNMSTool 工具的下载链接(其中包含使用说明):

https://download.csdn.net/download/sunny_hu92/12572162

 

以上就是这两天时间来,完成的SNMP在Linux下交叉编译和移植到ARM板,以及利用NMS工具测试的全部流程,期间也遇到很多坑,关键点在于./configure的配置参数,大家一定要注意。以此博文记录,以备后查。

20200703

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunny_hu92/article/details/107087713

智能推荐

【每日一题】Day0012:力扣题库NO.1044. 最长重复子串_vwnexev-程序员宅基地

文章浏览阅读544次。今天的题虽然通过自己的思路应该是能够解出答案,但是提交超时;去学习别人的思路和解法,因为没有算法基础也难懂,不过姑且先将自己的思路述出。题目链接:力扣1044最长重复子串https://leetcode-cn.com/problems/longest-duplicate-substring/思路很简单,都在注释里直接看代码:package cn.daycode.leetcode;public class LongestDupSubstring { public static voi_vwnexev

103-MHA 高可用mysql集群-程序员宅基地

文章浏览阅读83次。一.MHA简介1.1.简介 MHA(Master HA ) 是一款开源的 MySQL高可用程序,它为MYSQL 主从复制架构提供了automating master failover主节点自动迁移功能.MHA在监控到master节点故障时候,会自动提升拥有的数据最近进于主节点的其他从节点为主节点,并且在此期间,会通过其他节点获取额外的信息来避免数据不一致性的问题..._高可用报错,fri may 22 20:13:46 2020 - [warning] sql thread is stopped(no err

解决添加codova plugin 编译出现问题:Execution failed for task ':processDebugManifest'.-程序员宅基地

文章浏览阅读310次。问题背景: ionic3项目上,添加cordova-plugin-cszbar,编译运行在android平台上 ,结果编译不成功。出现以下问题。 Element uses-feature#android.hardware.camera at AndroidManifest.xml:23:5-84 duplicated with element declared at AndroidManif..._cordova-plugin- duplicated w

Python利用abaqus2dyna将Abaqus关键字输入文件优雅地转换为LS-DYNA关键字输入文件的详细解析与实践_abaqus怎么和lsdyna连接-程序员宅基地

文章浏览阅读932次。在开始具体介绍如何使用 abaqus2dyna 之前,我们首先需要了解一些基础知识。1.1 Abaqus 关键字输入文件Abaqus 关键字输入文件(*.inp)是一个文本文件,包含了用于有限元分析的所有信息。它主要由头部、模型定义、加载、输出请求和结束四个部分组成。1.2 LS-DYNA 关键字输入文件LS-DYNA 关键字输入文件(*.k 或 *.key)也是一个文本文件,它包含了用于分析的所有信息。它的结构和 Abaqus 关键字输入文件类似,但关键字定义和参数设置有一定的差异。_abaqus怎么和lsdyna连接

java adsl 拨号_Java实现ADSL拨号上网-程序员宅基地

文章浏览阅读330次。import java.io.BufferedReader;import java.io.InputStreamReader;public class ConnectNetWork {/*** 执行CMD命令,并返回String字符串** @param strCmd* @return* @throws Exception*/public static String exeCmd(String st..._java adsl拨号

VAssistX 快捷键-程序员宅基地

文章浏览阅读303次。本文转自 VAssistX 常用快捷键函数跳转Alt + G - 函数定义和声明的跳转Alt + O - 在.h与.cpp文件中实现相互转换Alt + M - 列出当前文件所有的函数Ctrl + Tab - 切换标签查找Ctrl + F - 查找Ctrl + Shift + F - 在文件中查找F3 - 查找下一个Shift + F3 - 查找上一个Shift + Alt + O - 查找文件 (直接定位,更是对项目了心应手的表现)Shift + Alt + S - 查找符号 .

随便推点

::在C++中的意思_c++ ::代表-程序员宅基地

文章浏览阅读934次。::表示作用域,和所属关系。class Aint A::test() //表示test是属于A类的。关于::的具体解析:::是运算符中等级最高的,它分为三种:1)global scope(全局作用域符),用法(::name)。2)class scope(类作用域符),用法(class::name)。3)namespace scope(命名空间作用域符),用法(namespace::n..._c++ ::代表

如何在Arcgis中对图斑进行自上而下,从左往右地编号_arcgis编号号从上到下,从左到右-程序员宅基地

文章浏览阅读3w次,点赞20次,收藏90次。在实际项目中,需要我们按照自上而下,从左往右的顺序为图斑编号,并且多数时候序号位数是确定的,针对这个问题我总结了一个自认为还算简便的方法。下面是具体的方法步骤:1、计算Xmin与Ymax。利用坐标进行排序,首先要算出坐标值。需要说明的是这里没有直接利用质心坐标而采用Xmin、Ymax进行排序,是因为质心坐标会遇到一种情况,就是当这个图斑很长或者很宽时,本应排在前面的序号,而因为质心靠后不得不被..._arcgis编号号从上到下,从左到右

mysql 数据类型_mysql表格的数据类型-程序员宅基地

文章浏览阅读1k次,点赞28次,收藏14次。选择合适的数据类型是很重要的。如要求存储精度较高时,应选择 DOUBLE类型。如果进行数值比较,最好使用 DECIMAL类型。 如果字符串是固定长度的,使用char,日期类型,就不适合字符串存储。TEXT 存储纯文本文件。BLOB主要存储图片、音频信息等_mysql表格的数据类型

Mac OS X 10.5 Leopard: Direcory Utility, The end of Netinfo-程序员宅基地

文章浏览阅读81次。其实,在OS X Tiger 10.4中,原来有两个应用程序一个叫NetInfo,一个是Directory Access一个主要用于管理本地用户的,另一个用来设置绑定网络Directory服务的,这次的Directory Utility是把这两个的功能合并了。 ...

MybatisPlusException: Error: Method queryTotal execution error._method querytotal execution error. at-程序员宅基地

文章浏览阅读1.2w次。先说明下情况,这是我自己遇到的一种情况。我创建的表存在着关键字:DESC下面贴下异常:(只贴部分,异常信息太多了没必要)org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying d..._method querytotal execution error. at

.Net桌面程序自动更新NAppUpdate-程序员宅基地

文章浏览阅读1k次。自动更新介绍我们做了程序,不免会有版本升级,这就需要程序有自动版本升级的功能。应用程序自动更新是由客户端应用程序自身负责从一个已知服务器下载并安装更新,用户唯一需要进行干预的是决定是否愿意现在或以后安装新的更新。客户端程序要完成自动更新必须要做三件事情:检查是否有更新;当发现有更新时,开始下载更新;当下载完成时,执行更新操作;分别分析一下这三个步骤: 1、检查更新..._nappupdate