【问题标题】:Extending snmpd with perl and an inside command使用 perl 和内部命令扩展 snmpd
【发布时间】:2013-10-03 13:36:25
【问题描述】:

我有一个 Centos 6.4,我正在通过命令 snmpwalk -v 2c -c public localhost OID 检查守护程序的功能。

现在,如果我使用 this doc 中的脚本,一切正常,我的自定义(我制作)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

【问题讨论】:

    标签: perl command asn.1 oid snmpd


    【解决方案1】:

    问题在于 /tmp/ 目录不是 SELinux 的可执行位置,因此无法从那里运行任何脚本。实用的解决方案是关闭 SELinux 或将 .sh 移动到适当的目录(如 libexec)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 2020-09-27
      • 2016-09-07
      • 2015-12-19
      • 1970-01-01
      相关资源
      最近更新 更多