Hello!

 

There is a need to return the value of the ip address when requesting a
specific OID. 

It is necessary to emulate the snmp device.

Implemented via perl, which I am new to.

 

Perl extension NetSNMP::ASN does not return values in the request, where
Exportable constants - ASN_IPADDRESS, but return values other any types is
very good!

Why?

 

1.       If in the file -  my $string_ASN = ASN_OCTET_STR;

# snmpget -c public -v 1 192.168.3.102 1.3.6.1.4.1.318.2.1.2.1.2.1

Iso.1.3.6.1.4.1.318.2.1.2.1.2.1 = STRING: "192.168.3.7"

 

2.  If in the file -  my $string_ASN = ASN_IPADDRESS;

#snmpget -c public -v 1 192.168.3.102 1.3.6.1.4.1.318.2.1.2.1.2.1

Reason: (noSuchName) There is no such variable name in this MIB.

Failed object: iso.1.3.6.1.4.1.318.2.1.2.1.2.1

 

But

 

#systemctl status snmpd (p.#2)

snmpd.service - Simple Network Management Protocol (SNMP) Daemon.

     Loaded: loaded (/lib/systemd/system/snmpd.service; enabled; vendor
preset: enabled)

     Active: active (running) since Fri 2020-09-11 14:24:24 MSK; 5min ago

    Process: 30895 ExecStartPre=/bin/mkdir -p /var/run/agentx (code=exited,
status=0/SUCCESS)

   Main PID: 30905 (snmpd)

      Tasks: 1 (limit: 1075)

     Memory: 19.6M

     CGroup: /system.slice/snmpd.service

             L-30905 /usr/sbin/snmpd -LOw -u Debian-snmp -g Debian-snmp -I
-smux mteTrigger mteTriggerConf -f -p /run/snmpd.pid

 

Sep 11 14:24:24 snmpd systemd[1]: Starting Simple Network Management
Protocol (SNMP) Daemon....

Sep 11 14:24:24 snmpd systemd[1]: Started Simple Network Management Protocol
(SNMP) Daemon..

Sep 11 14:24:26 snmpd snmpd[30905]: IP address of 11 bytes passed to
setValue with ASN_IPADDRESS

 

 

 

Why isn't the ip address returned? How to correctly assign ip address in
perl for ASN_IPADDRESS?

Where is my mistake? Please tell me.

Thanks.

 

--- code ---

Enable the file in snmpd.conf:

perl do "/usr/share/snmp/2.1.2.1.pl";

 

Example my 2.1.2.1.pl.pl file :

#!/usr/bin/perl

use NetSNMP::agent (':all');

use NetSNMP::ASN qw(ASN_IPADDRESS ASN_OCTET_STR);

 

sub hello_handler {

  my ($handler, $registration_info, $request_info, $requests) = @_;

  my $request;

  my $string_value = "192.168.3.7";

 

  my $string_ASN = ASN_OCTET_STR;

  #my $string_ASN = ASN_IPADDRESS;

 

  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.318.2.1.2.1.2.1")) {

        $request->setValue($string_ASN, ($string_value));

      }

      elsif ($oid == new NetSNMP::OID(".1.3.6.1.4.1.318.2.1.2.1.2.1")) {

        $request->setValue($string_ASN, ($string_value));

      }

    } elsif ($request_info->getMode() == MODE_GETNEXT) {

      if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.318.2.1.2.1.2.1")) {

        $request->setOID(".1.3.6.1.4.1.318.2.1.2.1.2.2");

        $request->setValue($string_ASN, ($string_value));

      }

      elsif ($oid < new NetSNMP::OID(".1.3.6.1.4.1.318.2.1.2.1.2.1")) {

        $request->setOID(".1.3.6.1.4.1.318.2.1.2.1.2.1");

        $request->setValue($string_ASN, ($string_value));

      }

    }

  }

}

my $agent = new NetSNMP::agent();

$agent->register(".1.3.6.1.4.1.318.2.1.2.1.2.1",
".1.3.6.1.4.1.318.2.1.2.1.2.1",

                 \&hello_handler);

 

P.S. My task is to return the address of the computer that makes the request
for this OID. But at least just returned an arbitrary address!

 

 

 

_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to