Ok I decided that I just have to work with Var_bind_list.
#!/usr/bin/perl -w
use Net::SNMP qw(oid_lex_sort oid_base_match SNMP_VERSION_1 DEBUG_ALL)
+;
use strict;
use Getopt::Std;
use warnings;
use diagnostics;
use XML::Simple;
use Data::Dumper;
use vars qw($ip $name @serials @parts $response $response2 @final1 @fi
+nal2);
#open xml file
my $xmlfile = $ARGV[0];
my $ref = eval { XMLin($xmlfile) };
#erase or creat the ipfile and the namefile
open ERASER, ">ipfile.txt";
close ERASER;
open ERASER, ">namefile.txt";
close ERASER;
#see if open worked
if ($@)
{
print "XML Read ERROR";
}
else
{
#go to IPAddress tag and read infos into file
foreach my $itemip (@{$ref->{Layer2Details}->{Device}})
{
my @ipliste = $itemip->{IPAddress};
my @sorted = @ipliste;
open OUTIP, ">>ipfile.txt";
print OUTIP @sorted, "\n";
close OUTIP;
}
#go to DeviceName tag and read infos into file
foreach my $itemname (@{$ref->{Layer2Details}->{Device}})
{
my @nameliste = $itemname->{DeviceName};
my @sortedname = @nameliste;
open OUTNAME, ">>namefile.txt";
print OUTNAME @sortedname, "\n";
close OUTNAME;
}
}
#open ipfile
open IPFILE, "ipfile2.txt" or die "Can't get IPs - $!\n";
open NAMES, "namefile2.txt" or die "Can't get IPs - $!\n";
open ERASER, ">finallist.txt";
close ERASER;
+
#Sets knots und community
my $community = 'public';
my $ifSer = '.1.3.6.1.2.1.47.1.1.1.1.11';
my $ifPart = '.1.3.6.1.2.1.47.1.1.1.1.13';
while ( $ip = <IPFILE>, $name = <NAMES> )
{
chomp $ip;
chomp $name;
$name =~ s/\.bc\.de\.bic$//;
print "Got: $ip\n";
+
#open session
my ( $s, $e ) = Net::SNMP->session(
-hostname => $ip,
-community => $community,
-port => 161
);
if (!defined($s)) {
print ("Falsch nix is!");
my @args = (
-varbindlist => [$ifSer]
);
my @args2 = (
-varbindlist => [$ifPart]
);
if ($s->version == SNMP_VERSION_1)
{
while (defined($s->get_next_request(@args)))
{
$_ = (keys(%{$s->var_bind_list}))[0];
if (!oid_base_match($ifSer, $_)) { last; }
$response=($s->var_bind_list->{$_});
@final1 = $response;
@args = (-varbindlist => [$_]);
#print @final1;
}
while (defined($s->get_next_request(@args2)))
{
$_ = (keys(%{$s->var_bind_list}))[0];
if (!oid_base_match($ifPart, $_)) { last; }
$response2 = ($s->var_bind_list->{$_});
@final2 = $response2;
@args2 = (-varbindlist => [$_]);
}
} else
{
push(@args, -maxrepetitions => 25);
outer: while (defined($s->get_bulk_request(@args)))
{
my @oids = oid_lex_sort(keys(%{$s->var_bind_list}));
foreach (@oids)
{
if (!oid_base_match($ifSer, $_)) { last outer; }
#print("%s => %s\n", $_, $s->var_bind_list->{$_});
# Make sure we have not hit the end of the MIB
if ($s->var_bind_list->{$_} eq 'endOfMibView') { l
+ast outer; }
}
# Get the last OBJECT IDENTIFIER in the returned list
@args = (-maxrepetitions => 25, -varbindlist => [pop(@oid
+s)]);
}
}
#@final2 = grep { $_ ne "" } $response2;
open OUTPUT, ">>finallist.txt";
for my $i (0 .. $#final1) { print "$ip;$name;$final1[$i];$final2[
+$i]\n" }
close OUTPUT;
# Let the user know about any errors
#if ($s->error() ne '') {
# _exit($s->error());
#}
# Close the session
$s->close();
}
exit 0;
Problem:
Why doesn't the print at the end work?
@final1 and @final2 only print when i print them in their block (in the source commented out
#print final1).
any idea????