interfaces.ifTable.ifEntry.ifDescr interfaces.ifTable.ifEntry.ifAdminStatus interfaces.ifTable.ifEntry.ifOperStatus interfaces.ifTable.ifEntry.ifLastChange interfaces.ifTable.ifEntry.ifSpeed interfaces.ifTable.ifEntry.ifPhysAddress #### ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifAlias or system.sysUpTime or system.sysName or udp.udpTable.udpEntry.udpLocalAddress or icmp.icmpOutDestUnreachs. #### #!/usr/bin/perl use strict; # make sure we can open input and output files open( H, "/opt/home/johnsonr/scripts/nodes" ) or die "/opt/home/johnsonr/scripts/nodes: $!"; open( O, ">output.csv" ) or die "output.csv: $!"; # read host list my @hosts = ; close H; chomp @hosts; # remove "\r\n" from ends of lines my @iplist; for my $host ( @hosts ) { my $ip = `getent hosts $host`; $ip =~ s/.*?(\d+\.\d+\.\d+\.\d+).*/$1/s; # do whatever you do to get $ip for $host (and chomp if needed) push @iplist, $ip; } my %ipdata; my @infolist = qw/ifDescr ifOperStatus ifAdminStatus ifLastChange/; my $cmdarg = "VER143r interfaces.ifTable.ifEntry."; # UPDATED to include final "." for my $ip ( @iplist ) { for my $info ( @infolist ) { my @pdata = `snmpwalk $ip $cmdarg$info`; chomp @pdata; # remove line-terminations s/.* = // for (@pdata); # remove redundant text $ipdata{$ip}{$info} = [ @pdata ]; # create array ref in the hash structure $ipdata{$ip}{lastport} = $#pdata; # keep track of how many ports } } # now print the csv data for my $ip ( @iplist ) { for my $portid ( 0 .. $ipdata{$ip}{lastport} ) { my $outstr = sprintf ( "%s,%s,", $ip, $portid+1 ); for my $info ( @infolist ) { $outstr .= '"' . $ipdata{$ip}{$info}[$portid] . '",'; } $outstr =~ s/,$/\n/; # replace trailing comma print O $outstr; } }