#! /bin/perl # Läuft nur unter Windows richtig # HP9304 #.1 .3 .6 .1 .2 .1 .4 .22 .1 .1 #iso org dod internet mgmt mib-2 ip ipnettomediatable ipnettomediaentry ipnettomediaifindex # .2 use Win32::Console::ANSI; use Term::ANSIScreen qw/:color :cursor :screen/; use Net::Nslookup; use strict; while (1) { my @switches=(); my @routers=(); my @cutoffs=(); ##### Gesuchte IP entgegennehmen print "\e[2JGesuchte Switch-Port eingeben, beendet: "; my $input=; chomp $input; my $swip; my $swport; ($swip,$swport) = split /-/,$input; if ($input eq "") { exit; } ##### Gesuchte IP anpingen um auf jeden Fall einen ARP Eintrag zu erhalten `ping -n 3 -w 1000 $swip`; ##### Konfig der Switches lesen open SWITCHES, ") { chomp; next unless ($_ =~ /^[0-9]/); @switches=(@switches, $_); } close SWITCHES; ##### Konfig der Router lesen open ROUTERS, ") { chomp; next unless ($_ =~ /^[0-9]/); @routers=(@routers, $_); } close ROUTERS; ##### Router durchsuchen um MAC zu IP zu finden my @array; ##### Router einzeln durchlaufen foreach my $router (@routers) { my @onerouter; ##### ARP Einträge eines Routers lesen @onerouter = `snmpwalk -mall -c public $router .1.3.6.1.2.1.4.22.1.2`; ##### Alle ARP Einträge zusammenfassen @array = (@array, @onerouter); } my $ergebnis=""; my $intind=""; my $intname=""; my $mac=""; my $gesmac=""; my ($m1,$m2,$m3,$m4,$m5,$m6); $m1=$m2=$m3=$m4=$m5=$m6=0; print "\n"; savepos(); print "Durchsuche Switch $swip"; my @ergebnis = `snmpwalk -mall -c public "$swip" ".1.3.6.1.2.1.2.2.1.2"`; # interface namen foreach (@ergebnis) { my $port; my $oid=""; my @ifindex; ($oid,$port) = split / = /,$_; if ($port =~ /"$swport"/) { @ifindex = split /\./,$oid; my $macstring= `snmpwalk -mall -c public "$swip" ".1.3.6.1.2.1.2.2.1.6.$ifindex[-1]"`; # Suche MAC an Port ## falsche oid, gibt mac des switchports zurück # print $ifindex[-1]; # print "$macstring\n"; my $mac; (undef,$mac) = split /:/,$macstring; chomp $mac; print "\nMAC:$mac\n\n"; foreach my $arpipstring (@array) { chomp $arpipstring; my $arpmac; (undef,$arpmac) = split /:/,$arpipstring; #print "'$arpmac' : '$mac'\n"; if ($arpmac eq $mac) { print "\n$arpmac\n$mac\n"; print "$arpipstring\n"; } } } } print " für weiter!"; ; }