SNMP实践

本文介绍了如何创建SNMPv3用户并利用其获取设备信息。详细讲解了使用命令行工具创建用户的方法,以及如何通过PHP脚本调用SNMP函数获取本机设备数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建用户

SNMPv3增加了加密的内容,比较之前两个版本,有了更高的安全性。

在安装完SNMP扩展和NET-SNMP服务后,需要创建一个用户,用于获取或设置相关设备的数据

sudo net-snmp-config --create-snmpv3-user -ro -a 12345678 -x 12345678 -X AES -A MD5 rouser

这里创建了一个名为 rouser 的用户,使用的密码是 12345678 ,加密方式为 MD5注意:这里需要使用管理员权限,否则权限不足的话,无法将用户写入配置文件

命令运行成功,将会在屏幕上显示如下输出:

adding the following line to /var/db/net-snmp/snmpd.conf:
   createUser rouser MD5 "12345678" DES 12345678
adding the following line to /usr/share/snmp/snmpd.conf:
   rouser rouser

补充一点,在创建用户的时候,需要停用snmp服务,指令如下:

sudo launchctl unload -w /System/Library/LaunchDeamons/org.net-snmp.snmpd.plist

相应的,启动snmp服务的指令,如下:

sudo launchctl load -w /System/Library/LaunchDeamons/org.net-snmp-snmpd.plist

创建完成后,将会在配置文件中,增加该用户。

使用snmp

使用刚刚创建的用户,获取本机所有设备信息,并写入到指定文件中,方便查看。

snmpwalk -v 3 -u rouser -l authPriv -a MD5 -A 12345678 -x DES -X 12345678 localhost > /usr/local/var/www/snmp/snmp3_walk.log

获取到的部分数据如下:

...
IF-MIB::ifNumber.0 = INTEGER: 13
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifIndex.3 = INTEGER: 3
IF-MIB::ifIndex.4 = INTEGER: 4
IF-MIB::ifIndex.5 = INTEGER: 5
IF-MIB::ifIndex.6 = INTEGER: 6
IF-MIB::ifIndex.7 = INTEGER: 7
IF-MIB::ifIndex.8 = INTEGER: 8
IF-MIB::ifIndex.9 = INTEGER: 9
IF-MIB::ifIndex.10 = INTEGER: 10
IF-MIB::ifIndex.11 = INTEGER: 11
...

实践

安装php的snmp扩展,具体步骤略了。

由于之前使用snmpwalk可以获取到本机的信息,所以使用snmp3_walk函数进行数据获取

code

<?php
$snmp_walk = snmp3_walk('localhost', , 'rouser', 'authPriv', 'MD5', '12345678', 'DES', '12345678', '.1');
foreach ($snmp_walk as $info) {
    var_dump($info);
}

然而,问题就来了。运行该脚本,会提示错误,如下:

PHP Warning:  snmp3_walk(): Fatal error: Timeout in /usr/local/var/www/snmp/test.php on line 11

Warning: snmp3_walk(): Fatal error: Timeout in /usr/local/var/www/snmp/test.php on line 11
bool(false)

嗯,超时了。。。

为什么会超时呢?不解。这个函数还有两个可选变量,一个是超时时间 $timeout 默认为 1000000 ,单位为微秒;一个是重试次数 $retries 默认为 5。但是对这两个参数进行修改,依旧拿不到参数。

不知道问题出在哪。。。之后把传入的localhost参数修改为127.0.0.1,问题就解决了。可能是因为无法解析 localhost 吧。

问题记录

在使用 snmpget() 函数的时候,如果 hostname 写成 localhost,代码如下:

<?php
var_dump(snmpget('localhost', 'public', 'IF-MIB::ifIndex.13'));

那么将会有如下的问题:

PHP Warning:  snmpget(): No response from udp6:[::1] in /usr/local/var/www/snmp/test.php on line 5

Warning: snmpget(): No response from udp6:[::1] in /usr/local/var/www/snmp/test.php on line 5
bool(false)

这个问题也是由于 houstname 引起的。修改为设备IP地址,就可以解决。


使用 snmpget() 的函数的时候,无法拿到指定的参数数据。但是改为 snmp3_get() 就能正常获取。不知道是不是因为我本地添加了v3版本的用户造成的。再找找相关资料看看有没有解释吧。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值