linux下net-snmp的源码编译安装与配置

时间:2021-12-23 16:52:28

首先下载源码:http://www.net-snmp.org/ 解压到自己新建的文件夹里面,进入文件夹: 这里需要注意一下,需要安装Ubuntu下的snmp的依赖包,具体如下:
<span style="font-size:14px;">sudo apt-get install libperl-dev</span>

以上的安装方式是先下载,后自动安装 这个可以提前安装,不然的话后面也会提醒你安装的
1../configure:这可以检查你的系统的相关的一些环境是否符合,并生成源码的Makefile文件
<span style="font-size:14px;">./configure --prefix=/usr/local/net-snmp --enable-mfd-rewrites --with-default-snmp-version="2" --with-sys-contact="raining@126.com" --with-sys-location="China" --with-logfile="/var/log/anmpd.log" --with-persistent-directory="/var/net-snmp"</span>

prefix:net-snmp将要安装的路径 enable-mfd-rewrites:允许用新的MFD重写可用的mid模块 with-default-snmp-version:默认的SNMP版本 with-sys-contact:可以配置该设备的联系人 with-sys-location:该设备的位置 with-logfile:日志文件路径 with-persistent-directory:不变数据存储目录 也可以还有其他的选项,比如:--with-mib-modules=ucd-snmp/diskio选项,可以让服务器支持磁盘I/O监控 然后回车,中间可能会碰到询问System Contact Information ():(配置该设备的联系信息):让你填写的,这个地方直接回车就好
2.编译:
sudo make

一般不会出错
3.安装:
sudo make install 

这个也可以和上面合成一步,
sudo make && make install


如果失败需要卸载的话:
sudo make uninstall

记住需要root权限,不然的话没法删除一些目录
以上几步都不能出错,因为一旦出错,将没法进行下一步了,一般情况也也不会出错 以上就算安装好了,接下来是配置snmpd.conf 进入到解压后的目录,就是当前目录,将当前目录下的EXAMPLE.conf文件复制到/usr/local/net-snmp/share/snmp,并重命名为 snmpd.conf
<span style="font-size:14px;">sudo cp EXAMPLE.conf /usr/local/net-snmp/share/snmp
sudo mv EXAMPLE.conf snmpd.conf
sudo vim snmpd.conf</span>


然后对snmpd.conf进行部分修改: 这里有几个不同版本的snmpd.conf内容,我遇到的是网上出现较少的那个版本的,修改如下: 1.找到agentAddress  udp:127.0.0.1:161 将这一行注释掉:前面添加# 在下一行添加新的配置:agentAddress udp:161 2.选择v2c  snmp的版本: 找到 trapsink   localhost  public         tran2sink  localhost  public  将第一行注释掉,将第二行的注释符号删除 3.设置访问权限: ACCESS  CONTROL 找到rocommunity public default -v systemonly  -v systemonly删除,则变成可以能访问全部
这样只是一些简单的配置,如果还需要其他的则自己在进行修改

测试: 在命令行中输入:
snmpd --version

如果出现snmp的版本信息,则表示安装成功
几种启动snmp的方法: 1.
/usr/local/net-snmp/sbin/snmpd -c /usr/local/net-snmp/shaer/snmp/snmpd.conf

注意:net-snmp为你安装的snmp的目录,这是在你安装的目录下进行snmp的启动,你可以设置在任意目录下启动snmp:
echo export LD_LIBRARY_PATH=/usr/local/lib >> .bashrc

即可在任意目录下进行启动:
/usr/local/net-snmp/sbin/snmpd


2.设置系统自启动
cp dist/snmpd-init.d /etc/init.d/snmpd
vi /etc/init.d/snmpd

修改 prog="/usr/local/sbin/snmpd" prog="/usr/local/net-snmp/sbin/snmpd" 修改 [ -x $prog -a -f /usr/local/share/snmp/snmpd.conf ] || exit 0 [ -x $prog -a -f /usr/local/net-snmp/share/snmp/snmpd.conf ] || exit 0
cp dist/snmpd-init.d /etc/init.d/snmpd
vi /etc/init.d/snmpd


3.  
/etc/init.d/snmpd  start

(当然,重新启动是:restart,停止是stop,查看状态是status)

查看snmpd的进程是否启动
 ps -aux | grep snmpd

执行几条命令来验证snmp服务:
snmpget -v 2c -c public localhost sysName.0

如果有输出信息则表示snmp运行正常,但是有时候会报错说无法识别sysName.0,这是查询主机的名字,一般是能识别的,如果不能识别,就换成:
snmpget -v 2c -c public localhost  .1.3.6.1.2.1.1   

这会返回很多信息,这是你的snmpd.conf允许访问的oid信息,如果需要扩充的话,可以去修改 view systemonly include 后面的信息 上面说到的主机的名字对应的是.1.3.6.1.2.1.1.5.0,如果用这个oid去查询的话就会返回主机的名字了,常用的oid的总结可以参考这里:http://www.cnblogs.com/aspx-net/p/3554044.html snmpget -v 2c -c public localhost sysName.0 这条命令的第一个snmpget是你选择的命令,还可以是snmpwalk等,-v是选择的版本,-c是密码,localhost是你访问的ip地址,后面是你需要得到的oid的信息。这里还需要注意几个问题就是,可能会有timeout的问题,所以首先你的保证你所访问的ip的设备上开启了snmp的服务,如果你是访问自己的本机出现问题的话,一般localhost是不会出问题的,因为这个地址不经过网卡,但是127.0.0.1的话可能会出问题,就是你的防火墙阻止了161端口的访问,所以这里你需要设置一下你的防火墙,开启udp 161端口的访问权限

首先使用:
sudo iptables -L -n

 查看当前iptables的规则, 然后:
iptables -I INPUT -p udp --dport 161 -j ACCEPT 

添加UDP 161端口到iptables防火墙中,然后执行
iptables save

命令保存防火墙的更改,在执行
sudo iptables -L -n

可以看到防火墙已经对外开放了UDP 161的访问端口