#!/usr/bin/perl use Net::SNMP; use strict; use warnings; my $community = "eX0gyN37"; my $inputfilename = "/home/cjones/snmpscripts/hostipaddresses.txt.old"; my $outputfilename = "/home/cjones/snmpscripts/vlan1.csv"; if (!defined $ARGV[0]) { printf "Error: Missing VLAN ID\nUsage: $0 \n"; exit } my $vlanSearch = $ARGV[0]; my $SYSDESCR = "1.3.6.1.2.1.1.1.0"; my $IFTYPE = "1.3.6.1.2.1.2.2.1.3"; my $IFNAME = "1.3.6.1.2.1.31.1.1.1.1"; my $IFALIAS = "1.3.6.1.2.1.31.1.1.1.18"; my $IFOPERSTATUS = "1.3.6.1.2.1.2.2.1.8"; my $VMVLAN = "1.3.6.1.4.1.9.9.68.1.2.2.1.2"; my $HOSTNAME_OID = "1.3.6.1.4.1.9.2.1.3.0"; my $IFINDEXLIST = "1.3.6.1.2.1.31.1.1.1.1"; open my $input, '<', $inputfilename or die "$0: $inputfilename: $!\n"; open my $output, '>', $outputfilename or die "$0: $outputfilename: $!\n"; for my $ip (<$input>) { chomp $ip; print "$ip: "; my ($snmp,$snmperror) = Net::SNMP->session( -hostname => $ip, -community => $community, -version => 'snmpv2c' ) or do { print "FAILED TO CONNECT\n"; next; }; my $response = $snmp->get_table( $IFINDEXLIST ) or do { print "FAILED TO GET IFINDEXLIST\n"; exit; }; my @ifIndexes = sort {$a<=>$b} map { m/$IFINDEXLIST.(.*)$/ } keys %{$response}; $response = $snmp->get_request( $HOSTNAME_OID ) or do { print "FAILED TO GET REQUEST\n"; next; }; my $hostname = $response->{"$HOSTNAME_OID"}; if ($hostname) { print $output "$ip,$hostname,,,\n"; print "$hostname\n"; } else { print $output "ERROR\n"; print "ERROR\n"; next; } foreach my $i (@ifIndexes) { my $response = $snmp->get_request( "$IFTYPE.$i", "$IFNAME.$i", "$IFALIAS.$i", "$IFOPERSTATUS.$i", "$VMVLAN.$i" ) or do { print "FAILED TO GET DETAILS: $!\n"; }; my $ifType = $response->{"$IFTYPE.$i"}; my $ifName = $response->{"$IFNAME.$i"}; my $ifAlias = $response->{"$IFALIAS.$i"}; my $ifOperStatus = $response->{"$IFOPERSTATUS.$i"}; my $vmVlan = $response->{"$VMVLAN.$i"}; if ($ifOperStatus eq 1) { $ifOperStatus = "connected" } else { $ifOperStatus = "notconnect" }; if ($vmVlan eq "noSuchInstance") { $vmVlan = "trunk" }; if (($ifType eq 6) && ($vmVlan eq $vlanSearch)) { print $output "$ifName, $ifAlias, $ifOperStatus, $vmVlan\n"; } } print "DONE.\n"; print $output "\n\n"; } close($inputfilename); close($outputfilename);