#!/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 <vlan id>\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);