我有一个 Centos 6.4,我正在通过命令 snmpwalk -v 2c -c public localhost OID 检查守护程序的功能。
现在,如果我使用此文档中的脚本,一切正常,并且我的自定义(我制作)MIB 很干净,结果还可以。
但我想要更多,所以我这样做了:
#!/usr/bin/perl
use NetSNMP::agent (':all');
use NetSNMP::ASN qw(ASN_OCTET_STR ASN_INTEGER);
#$string_value = qx{/tmp/readabilityChk};
#print $string_value;
#&hello_handler();
sub hello_handler {
my ($handler, $registration_info, $request_info, $requests) = @_;
my $request;
#my $string_value = "cipolline";
my $integer_value = "8675309";
my $string_value = `/tmp/readabilityChk`;
for($request = $requests; $request; $request = $request->next()) {
my $oid = $request->getOID();
if ($request_info->getMode() == MODE_GET) {
if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.2021.150.1.1.3")) {
$request->setValue(ASN_OCTET_STR, $string_value);
}
elsif ($oid == new NetSNMP::OID(".1.3.6.1.4.1.2021.150.1.1.100")) {
$request->setValue(ASN_INTEGER, $integer_value);
}
} elsif ($request_info->getMode() == MODE_GETNEXT) {
if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.150.2021.1.1.3")) {
$request->setOID(".1.3.6.1.4.1.2021.150.1.1.100");
$request->setValue(ASN_INTEGER, $integer_value);
}
elsif ($oid < new NetSNMP::OID(".1.3.6.1.4.1.2021.150.1.1.3")) {
$request->setOID(".1.3.6.1.4.1.2021.150.1.1.3");
$request->setValue(ASN_OCTET_STR, $string_value);
}
elsif ($oid < new NetSNMP::OID(".1.3.6.1.4.1.2021.150.1.1.100")) {
$request->setOID(".1.3.6.1.4.1.2021.150.1.1.100");
$request->setValue(ASN_INTEGER, $integer_value);
}
}
}
}
my $agent = new NetSNMP::agent();
$agent->register("hello_world", ".1.3.6.1.4.1.2021.150",
\&hello_handler);`
问题是 snmpwalk 给出: UCD-CUSTOM-MIB::custom = STRING: 或现在 UCD-CUSTOM-MIB::custom = 此 MIB 视图中没有更多变量(它超过了 MIB 树的末尾)
在日志中我有这个: 使用 ASN_OCTET_STR/ASN_BIT_STR 传递给 setValue 的非字符串值:类型为 0
我认为问题在于 var 的类型(神秘地)不是字符串。但我真的不知道如何解决它。
请帮帮我T_T