satanklawz has asked for the wisdom of the Perl Monks concerning the following question:

Greeings fellow monks, I've been picking my brain on a particuliar problem, and was wondering if someone out there might help me find the answer. I'm writing a script that will do an OID walk on a small tree. When I use the commandline snmpwalk, it immediately returns a response from the device, but when I run the perl script, I get the error of "No response from remote host."
#!/usr/bin/perl use Net::SNMP; my @a1=snmp_query_ap("10.20.1.2", "my-uber-secret-snmp-pass", ".1.3.6. +1.4.1.161.19.3.3.4.1.1"); my $size=(scalar @a1); my $i=1; while ($i < $size) { print uc(substr($a1[$i],2,2) . ":" . substr($a1[$i],4,2) . ":" . sub +str($a1[$i],6,2) . ":" . substr($a1[$i],8,2) . ":" . substr($a1[$i],1 +0,2) . ":" . substr($a1[$i],12,2)) . "\n"; $i=$i+2; } sub snmp_query_ap() { my $ip = shift; my $com = shift; my $oid = shift; my ($s,$error) = Net::SNMP->session(Hostname => "$ip", Community => +"$com", Version => 2) || die printf("ERROR: %s.\n", $session->error); my $result = $s->get_table( -baseoid => "$oid" ) || die printf("ERRO +R: %s.\n", $s->error); $s->close; my @crap = %$result; return @crap; }
The place where it dies is on line 18,
my $result = $s->get_table( -baseoid => "$oid" ) || die printf("ERROR: + %s.\n", $s->error);
Thanks again!

Replies are listed 'Best First'.
Re: SNMP Walk
by traveler (Parson) on Mar 31, 2004 at 17:33 UTC
    I do not have an SNMP device here to test with, but the examples in the POD do not have the leading "." on the OID. Try it without the dot.

    HTH, --traveler

      Thanks.... I just ran it and it errored with the same response. It's strange that the script will walk another OID, but not this one; however snmpwalk gets it just fine.
        Then all I can suggest is that 1)you check the OID to ensure that it is correct and 2) that you ensure that the OID refers to a genuine table.
Re: SNMP Walk
by Anonymous Monk on Apr 01, 2004 at 00:31 UTC

    try using Version => 1

    the snmpwalk command may be failing back to version 1 without telling you. the get_table will use a get-bulk type of request with v2 instead of the get-next type of request needed by v1.