这是我在net:snmp使用perl时用于遍历表的代码:
#! /usr/local/bin/perl
use strict;
use warnings;
use Net::SNMP qw(:snmp);
my $OID_hrSystem = '1.3.6.1.2.1.25.1';
my $OID_ifPhysAddress = '1.3.6.1.2.1.2.2.1.6';
my ($session, $error) = Net::SNMP->session(
-hostname => shift || 'localhost',
-community => shift || 'public',
-nonblocking => 1,
-translate => [-octetstring => 0],
-version => 'snmpv2c',
);
if (!defined $session) {
printf "ERROR: %s.\n", $error;
exit 1;
}
my %table; # Hash to store the results
my $result = $session->get_bulk_request(
-varbindlist => [ $OID_hrSystem ],
-callback => [ \&table_callback, \%table …Run Code Online (Sandbox Code Playgroud) 我已经在我的系统上安装了 net-snmp5.7.2,我已经为我的应用程序编写了我的 app_agent.conf 并且
agentXSocket udp:X.X.X.X:1610
Run Code Online (Sandbox Code Playgroud)
并导出 SNMPCONFIGPATH=path_to_app_agent.conf
我还在 /usr/etc/snmp/snmp.conf 中写了 snmpd.conf
trap2sink X.X.X.Y
agentXSocket udp:X.X.X.X:1610
Run Code Online (Sandbox Code Playgroud)
我的 /etc/snmp/ 和 /var/net-snmp/ 中还有两个 snmpd.conf
来自 /etc/snmp 的配置:
com2sec notConfigUser default public
com2sec notConfigUser v1 notConfigUser
com2sec notConfigUser v1 notConfigUser
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
access notConfigGroup "" any noauth exact systemview none none
pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat
Run Code Online (Sandbox Code Playgroud)
来自 /var/net-snmp 的配置:
setserialno 1322276014
ifXTable .1 14:0 18:0x $
ifXTable .2 14:0 18:0x $
ifXTable .3 14:0 18:0x $
engineBoots 14
oldEngineID …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过snmptrap发送陷阱时指定端口.只是为了测试我的SNMP接收器,我想向它发送陷阱,但我无法访问端口162.如何将陷阱发送到另一个端口?
在我看来,man-page没有描述这个选项.
(我不完全理解snmptrap消息的部分是什么,所以如果有人想解释它会很好)
与 Snmpv2 和 Snmpv1 相比,Snmpv3 是一种安全协议。但我不明白上下文名称的用途是什么。我们已经有了一个用户名以及提供安全级别的身份验证和隐私密码。使用wireshark 的人无法识别它,因为它是通过加密形式发送的。那么在Snmpv3中context name有什么用呢?
我想通过使用 python pysnmp 模块获取 snmp 数据。我曾经使用命令行来获取 SNMP 数据,但现在我想使用 pysnmp 模块来读取它。
SNMP命令-
snmpwalk -v 1 -c public <ip address>:<port> xyz::pqr
Run Code Online (Sandbox Code Playgroud)
我正在使用像上面这样的命令。现在我尝试了类似下面的东西 -
import netsnmp
def getmac():
oid = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.2.2.1.2'))
res = netsnmp.snmpgetbulk(oid, Version = 1, DestHost='ip',
Community='pub')
return res
print getmac()
Run Code Online (Sandbox Code Playgroud)
我遇到错误 -导入 netsnmp。没有模块 netsnmp
任何人都可以给我建议如何使用 python 从 snmp 服务器获取 snmp 数据?
我可以快速通过snmp安装,它工作正常.
在我正在研究的一个代理模块中,并尝试修改源代码.我遇到了一个需要通过代理删除用户的问题.
坚持完成这个:
就像net-snmp-create-v3-user在服务器端创建用户的方式一样,我想知道是否有类似的东西可以删除用户.
我正在编写一个脚本,用于监控来自nagios的特定主机上的流量.我已经研究了一些已经制作的脚本并且已经收集了我需要做的几乎所有信息,但是我在识别流量所需的OID时遇到了问题.我想使用IF-MIB::ifOutOctets.1和IF-MIB::ifInOctets.1获取传入和传出流量但是当我使用以下行测试时:
snmpwalk -v 1 -c public myComputer OID
Run Code Online (Sandbox Code Playgroud)
对于OID而言,我得到了相同的结果,这似乎并不正确.如果我可以尝试其他变量而不是我现在使用的那些变量,那我就会徘徊.
它会很有用,即使你可以指出我可以在哪里找到一些信息IF-MIB,因为我可以得到所有的价值,snmpwalk但我不知道如何解释它们
我在Linux下的c ++程序中使用net-snmp库(版本5.7.1).我有一个Web-Frontend,用户可以选择SNMP版本并进行配置.SNMPv1和SNMPv2工作得很好,但是我遇到了SNMPv3的一些问题.
这是前端的图片:Webinterface的屏幕截图(很抱歉没有在这里直接上传,但我需要至少10个声誉才能这样做)
当我启动c ++后端并正确输入所有需要的SNMPv3凭据时,一切正常,设备可以访问.如果我将Auth协议从MD5更改为SHA,但保留其余凭据相同,我预计设备将无法再访问.实际上它仍然可以访问.重新启动后端后,设备(正如预期)不再可以使用相同的设置访问.
在发现这个问题后,我进行了一些测试.对于测试,我使用了不同的用户和不同的设置.他们使用不同供应商的三种不同设备运行,每次都得到相同的结果.所以它不能是设备相关的问题.结果可以在这里看到:测试结果
我在测试后的结论是,net-snmp似乎为一个用户名缓存了所选的auth和priv协议.在Test 2中可以看出这一点非常好.第一次使用具有特定协议的用户名时,我得到了预期的结果.更改协议后,预计会有不同的结果,但我仍然得到与以前相同的结果.
最后,一些信息是如何进行SNMP调用的:
SNMPWrapper,它涉及整个SNMP通信init_snmp()init net-snmpget(),set()而且walk().每次调用其中一个方法时,都会创建一个新的SNMP会话(首先我创建一个新的Session snmp_sess_init(),而不是设置所需的东西,最后我打开会话snmp_sess_open()snmp_sess_close()问题:在更改协议之前是否必须进行任何其他清理才能使其正常工作?
编辑:我添加了一些代码,显示了所描述的行为
int main(int argc, char** argv) {
struct snmp_session session, session1, *ss, *ss1;
struct snmp_pdu *pdu, *pdu1;
struct snmp_pdu *response, *response1;
oid anOID[MAX_OID_LEN];
size_t anOID_len = MAX_OID_LEN;
struct variable_list *vars;
int status, status1;
init_snmp("snmpapp");
const char* user = "md5";
string authpw = "123123123";
string privpw …Run Code Online (Sandbox Code Playgroud) 首先,我使用的是带有 Angstrom 发行版的 Beaglebone Black。
我的用于 net-snmp 的 mib2c 程序将无法工作并出现以下错误:
ERROR: You don't have the SNMP perl module installed. Please obtain
this by getting the latest source release of the net-snmp toolkit from
http://www.net-snmp.org/download/ . Once you download the source and
unpack it, the perl module is contained in the perl/SNMP directory.
See the README file there for instructions.
Run Code Online (Sandbox Code Playgroud)
所以我去 /net-snmp/perl/SNMP 并运行
perl Makefile.PL
make
Run Code Online (Sandbox Code Playgroud)
现在它给了我这个错误:
make: *** No rule to make target `/usr/lib/perl/5.14.2/ExtUtils/typemap', needed by `SNMP.c'. Stop.
Run Code Online (Sandbox Code Playgroud)
好的,所以我知道必须安装 ExtUtils …
出于测试目的,我试图使用snmptrap命令生成.1.3.6.1.2.1.43.18.2.0.1陷阱(打印机警报陷阱)。
我对snmptrap命令的语法不满意,所以有人可以向我解释如何正确使用此命令,如果可能的话,专门针对此陷阱?