113 lines
2.6 KiB
Perl
113 lines
2.6 KiB
Perl
#! /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, <ENTER> beendet: ";
|
|
my $input=<STDIN>;
|
|
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, "<switches.conf";
|
|
while (<SWITCHES>) {
|
|
chomp;
|
|
next unless ($_ =~ /^[0-9]/);
|
|
@switches=(@switches, $_);
|
|
}
|
|
close SWITCHES;
|
|
|
|
|
|
##### Konfig der Router lesen
|
|
open ROUTERS, "<routers.conf";
|
|
while (<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 "<Enter> für weiter!";
|
|
<STDIN>;
|
|
}
|