All pastes #988409 Raw Edit

Anonymous

public text v1 · immutable
#988409 ·published 2008-04-17 16:00 UTC
rendered paste body
#!/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);