#!/usr/bin/perl -w ############################################################# #This program generates a list of informations by parsing an# #xml file and then extrating the informations via SNMP, # #saving the result in a textfile. # #Ver:1.0 written by:ronin # ############################################################# use Net::SNMP; use strict; use warnings; use diagnostics; use XML::Simple; use Data::Dumper; ################################################################################## #This part of the program generates an IP file with one ip address per line. # #It reads the IPAddress tagged information from the xml file it parses. # #The IP addresses are then saved in a txt file. # #The information saved here are later used and referred to as ipfile.txt # #Ver:1.0 written by :ronin # ################################################################################## #open xml file my $xmlfile = $ARGV[0]; 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; } } #################################################################### #The second part of the porgram uses the above saved IP addresses # #reading them from the file and looping for as many times as # #necessary. It gets all informations from manually added MIB knots # #and saves these informations in seperate files. Then it parses all# #files and generates a full unedited listing saving it in another # #file. This unedited file is then reopened and edited so that only # #the wanted usefull informations remains. The final file is then # #saved (in Ver 1.0 as finallist.txt). # #Ver:1.0 written by: ronin # #################################################################### #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, ">alllist.txt"; close ERASE; open ERASER, ">finallist.txt"; close ERASE; #looping as long as there are IP addersses while ( my $ip = ) { 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_desc) ) ) { #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; } } #create final file open(OUT, "serlist.txt"); open(OUT2, "desclist.txt"); my @outlist; while () { my %hash; my @temp = split(/;/,$_); $hash{'file1'} = $temp[0]; $hash{'file2'} = ; #delete Return foreach (values %hash) { $_ =~ s/\n//g; } push(@outlist,\%hash); } close(OUT); #print to file open ALLOUT, ">>alllist.txt"; print ALLOUT "$ip\n"; foreach my $hashref (@outlist) { print ALLOUT "$hashref->{'file1'};$hashref->{'file2'}\n"; } close ALLOUT; #scanning the file for useless lines and deleting them and then #saving the rest in a new file open SCAN, "; open FINOUT, ">>finallist.txt"; print FINOUT @data, "\n"; close SCAN; } #close session $session->close(); }