OK thanks for all of your help everyone and here it is the work I made all the tmie:
#!/usr/bin/perl -w
use Net::SNMP;
use strict;
use warnings;
use diagnostics;
use XML::Simple;
use Data::Dumper;
#open xml file
my $xmlfile = "e:/topo.xml";
my $ref = eval { XMLin($xmlfile) };
#erase or creat the ipfile
open ERASER, ">ipfile.txt";
close ERASE;
#see if open worked
if ($@)
{
print "XML Read ERROR";
}
else
{
#go to IPAddress tag and read infos into file
foreach my $item (@{$ref->{Layer2Details}->{Device}}){
my @ipliste = $item->{IPAddress};
my @sorted = @ipliste;
open OUTIP, ">>ipfile.txt";
print OUTIP @sorted, "\n";
close OUTIP;
}
}
#open ipfile
open IPFILE, "ipfile.txt" or die "Can't get IPs - $!\n";
#Sets knots und community
my $community = 'public';
my $ifIndex = '1.3.6.1.2.1.47.1.1.1.1.6';
my $ifDescr = '1.3.6.1.2.1.47.1.1.1.1.11';
my $ifDescr2 = '1.3.6.1.2.1.47.1.1.1.1.2';
#erase or create files
open ERASER, ">serlist.txt";
close ERASE;
open ERASER, ">desclist.txt";
close ERASE;
open ERASER, ">finallist.txt";
close ERASE;
while ( my $ip = <IPFILE> )
{
chomp $ip;
print "Got: $ip\n";
+
#open session
my ( $session, $error ) = Net::SNMP->session(
-hostname => $ip,
-community => $community,
-port => 161
);
my $response;
#goto index table and hash index
if ( defined( $response = $session->get_table($ifIndex) ) )
{
#get serialnumbers
foreach my $index ( values %{$response} )
{
my $this_desc = "$ifDescr.$index";
my $description;
if ( defined( $description = $session->get_request($this_d
+esc) ) )
{
#print serialno. to file
my @serial = values %{$description};
open OUTPUT1, ">>serlist.txt";
print OUTPUT1 @serial, "\n";
close OUTPUT1;
}
}
#get description
foreach my $index ( values %{$response} )
{
my $this_desc = "$ifDescr2.$index";
my $description2;
if ( defined( $description2 = $session->get_request($this_
+desc) ) )
{
#print describtion to file
my @desc = values %{$description2};
open OUTPUT2, ">>desclist.txt";
print OUTPUT2 @desc, "\n";
close OUTPUT2;
}
}
#creat final file
open(OUT, "serlist.txt");
open(OUT2, "desclist.txt");
my @outlist;
while (<OUT>)
{
my %hash;
my @temp = split(/;/,$_);
$hash{'file1'} = $temp[0];
$hash{'file2'} = <OUT2>;
#delete Return
foreach (values %hash)
{
$_ =~ s/\n//g;
}
push(@outlist,\%hash);
}
close(OUT);
#print to file
open FINOUT, ">>finallist.txt";
print FINOUT "$ip\n";
foreach my $hashref (@outlist)
{
print FINOUT "$hashref->{'file1'};$hashref->{'file2'}\n";
}
print FINOUT "\n";
close FINOUT;
}
#close session
$session->close();
}
It reads all IPAddress-tagged infos from an xml file andf then uses those to get infos from MIBs via SNMP, saves thjem in different files and then creats another file with the result in a certain order like a csv file so it can be automatically read be progrags like CiscoWorks 2000. Thanks again everybody for the help provided. |