我试图在linux上使用SNMPget来获取有关我网络上设备的信息。我能够在linux终端上成功使用snmpget,但现在想在perl / python中编写一个脚本并让它为我工作。
SNMPget示例
snmpgetnext -v 3 -n "" -u USER -a MD5 -A PASSWORD -l authNoPriv 192.168.1.1 sysDescr
我试图在perl中做同样的事情,但我似乎无法找到有关如何做到这一点的任何好文档。 我在互联网上找到了什么(但这不是SNMP v3):
$ cat snmp
#!/usr/bin/perl
use Net::SNMP;
my $desc = 'sysDescr';
( $session, $error ) = Net::SNMP->session(
-hostname => "192.168.1.1",
-community => "public",
-timeout => "30",
-port => "161"
);
if ( !defined($session) ) {
printf( "ERROR: %s.\n", $error );
exit 1;
}
my $response = $session->get_request($desc);
my %pdesc = %{$response};
my $err = $session->error;
if ($err) {
return 1;
}
print %pdesc;
exit 0;
我尝试将其修改为snmp v3但无法修改。有人熟悉这个吗?
答案 0 :(得分:1)
SNMPv3比v1和v2c复杂得多,它至少需要用户名(就像v1和v2c一样),在实际情况下,你必须添加身份验证和隐私协议和密码。
您可以使用官方NET::SNMP文档来了解如何使用此模块,我正在为其添加Set(not Get)用法示例:
#! /usr/local/bin/perl
use strict;
use warnings;
use Net::SNMP;
my $OID_sysContact = '1.3.6.1.2.1.1.4.0';
my ($session, $error) = Net::SNMP->session(
-hostname => 'myv3host.example.com',
-version => 'snmpv3',
-username => 'myv3Username',
-authprotocol => 'sha1',
-authkey => '0x6695febc9288e36282235fc7151f128497b38f3f',
-privprotocol => 'des',
-privkey => '0x6695febc9288e36282235fc7151f1284',
);
if (!defined $session) {
printf "ERROR: %s.\n", $error;
exit 1;
}
my $result = $session->set_request(
-varbindlist => [ $OID_sysContact, OCTET_STRING, 'Help Desk x911' ],
);
if (!defined $result) {
printf "ERROR: %s.\n", $session->error();
$session->close();
exit 1;
}
printf "The sysContact for host '%s' was set to '%s'.\n",
$session->hostname(), $result->{$OID_sysContact};
$session->close();
exit 0;
会话创建($ session)部分是主要问题,之后您可以使用常规命令,如v1 / v2c。
另一个问题是,除非导入MIB模块进行翻译,否则需要请求OID(例如.1.3)格式而不是字符串名称。
祝你好运......