#!/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 and a name file with one ip +address per line. # #It reads the IPAddress ansd the DeviceName tagged information from th +e xml file it parses.# #The IP addresses and device names are then saved in a txt file. + # #The information saved here are later used and referred to as ipfile.t +xt and namefile.txt # #Ver:1.0 written by :Ronin # ###################################################################### +###################### #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; } } ##################################################################### #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 including the name file 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 ERASER; open ERASER, ">desclist.txt"; close ERASER; open ERASER, ">finallist.txt"; close ERASER; #looping as long as there are IP addersses my %record; #my $count; 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; } } #create final file open(OUT, "serlist.txt"); open(OUT2, "desclist.txt"); open(OUT3, "namefile.txt"); my @outlist; while (<OUT>) { my %hash; my @temp = split(/;/,$_); $hash{'file1'} = $temp[0]; $hash{'file2'} = <OUT2>; $hash{'file3'} = <OUT3>; #delete Return foreach (values %hash) { $_ =~ s/\n//gi; } push(@outlist,\%hash); $record{$hash{file1}} = \%hash if $hash{file1}; } #print to file open ALLOUT, ">finallist.txt"; foreach my $hashref (values %record) { print ALLOUT "$hashref->{'file3'};$hashref->{'file1'};$has +href->{'file2'}}\n"; } close ALLOUT; #\@outlist, \%record; close(OUT); #open the file # open SCAN, "<alllist.txt"; #Search for pattern ;; and if found ignore that line # my @data = grep { !/\S+;;/ } <SCAN>; #write the rest to a file # open FINOUT, ">>finallist.txt"; # print FINOUT @data, "\n"; #$/ = "$data"; #while (<$data>) #{ # my %seen; # my @output= grep !$seen{$_}++, split (/^/m, $_); # #print FINOUT @output; # } # close SCAN; } #close session $session->close(); #last if ++$count > 20; }
In reply to Extracting xml data and using them for SNMP by theroninwins
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |