init III
This commit is contained in:
156
Perl arp cache per snmp durchsuchen/arpsearch2.pl
Normal file
156
Perl arp cache per snmp durchsuchen/arpsearch2.pl
Normal file
@@ -0,0 +1,156 @@
|
||||
#! /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=();
|
||||
|
||||
##### Gesuchte IP entgegennehmen
|
||||
print "\e[2JGesuchte IP eingeben, <ENTER> beendet: ";
|
||||
my $ip=<STDIN>;
|
||||
chomp $ip;
|
||||
|
||||
if ($ip eq "") { exit; }
|
||||
|
||||
##### Gesuchte IP anpingen um auf jeden Fall einen ARP Eintrag zu erhalten
|
||||
`ping -n 3 -w 1000 $ip`;
|
||||
|
||||
##### Falls IP keine IP sondern ein Hostname ist wird IP ermittelt
|
||||
unless ($ip =~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {
|
||||
my $a = nslookup(host => "$ip");
|
||||
print "Interpretiere $ip als hostname\n";
|
||||
if ($a eq "") {
|
||||
print "Host $ip nicht gefunden. <Enter> f<>r weiter!\n";
|
||||
<STDIN>;
|
||||
next;
|
||||
}
|
||||
print "$ip zu $a aufgel<65>st\n\n";
|
||||
$ip = $a;
|
||||
}
|
||||
|
||||
|
||||
##### 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<74>ge eines Routers lesen
|
||||
@onerouter = `snmpwalk -mall -c public $router .1.3.6.1.2.1.4.22.1.2`;
|
||||
##### Alle ARP Eintr<74>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;
|
||||
|
||||
##### Alle ARP Eintr<74>ge durchlaufen
|
||||
foreach my $arrayline (@array) {
|
||||
chomp $arrayline;
|
||||
my ($tmp,$mac) = split /: /,$arrayline;
|
||||
#print "$arrayline\n";
|
||||
if ( $arrayline =~ /$ip /) {
|
||||
$gesmac = $mac;
|
||||
# print $arrayline;
|
||||
##### ... und gesuchte MAC Adr. herausfiltern
|
||||
print "Gesuchte MAC-Adresse: $gesmac\n";
|
||||
($m1,$m2,$m3,$m4,$m5,$m6) = split / /,$gesmac;
|
||||
$m1 = hex($m1);
|
||||
$m2 = hex($m2);
|
||||
$m3 = hex($m3);
|
||||
$m4 = hex($m4);
|
||||
$m5 = hex($m5);
|
||||
$m6 = hex($m6);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
##### MAC
|
||||
my $oid=".1.3.6.1.2.1.17.4.3.1.1.$m1.$m2.$m3.$m4.$m5.$m6";
|
||||
#print $oid;
|
||||
|
||||
# HP 4000
|
||||
#.1.3.6.1.2.1.2.iftable(2).ifentry(1).ifphysaddr(6)
|
||||
# .ifdescr(2)
|
||||
#.1.3.6.1.2.1.17.4.3.1.1 MAC-Adressen
|
||||
#.1.3.6.1.2.1.17.4.3.1.2 InterfaceIndex
|
||||
#.1.3.6.1.2.1.2.2.1.2.InterfaceIndex => InterfaceName
|
||||
#
|
||||
|
||||
print "\n";
|
||||
|
||||
foreach my $switch (@switches) {
|
||||
savepos();
|
||||
print "Durchsuche Switch $switch";
|
||||
my $ergebnis = `snmpwalk -mall -c public "$switch" "$oid"`; # Suche MAC auf akt Switch
|
||||
my $tmp;
|
||||
my $mac2="";
|
||||
($tmp,$mac2) = split /: /,$ergebnis;
|
||||
chomp $mac2;
|
||||
if ($gesmac eq $mac2) {
|
||||
my $oid2=".1.3.6.1.2.1.17.4.3.1.2.$m1.$m2.$m3.$m4.$m5.$m6"; # Ermittle InterfaceIndex
|
||||
my $intind=`snmpwalk -mall -c public "$switch" "$oid2"`;
|
||||
my ($tmp,$intindex) = split /=/,$intind;
|
||||
chomp $intindex;
|
||||
$intindex =~ s/ //,$intindex;
|
||||
|
||||
if ($intindex < 200) { # Portnummer ist kleiner 200 heist auf HP4, HP5 kein Trunk!
|
||||
loadpos;
|
||||
|
||||
my $oid3=".1.3.6.1.2.1.2.2.1.2.$intindex";
|
||||
my $intname=`snmpwalk -mall -c public "$switch" "$oid3"`;
|
||||
my ($tmp,$intnam) = split /=/,$intname;
|
||||
$intnam =~ s/"//,$intnam;
|
||||
$intnam =~ s/ //,$intnam;
|
||||
$intnam =~ s/"//,$intnam;
|
||||
if($intname !~ /mesh/i and $intname !~ /net/i and $intname !~ /trk/i) {
|
||||
# ports die mesh, trk und net im Namen enthalten d<>rften keine Downlink Ports sein
|
||||
print "MAC-Adresse auf Switch $switch gefunden\n";
|
||||
print "Port gefunden: $intnam\n";
|
||||
}
|
||||
|
||||
savepos;
|
||||
}
|
||||
|
||||
}
|
||||
loadpos();
|
||||
clline();
|
||||
}
|
||||
print "<Enter> f<>r weiter!";
|
||||
<STDIN>;
|
||||
}
|
||||
Reference in New Issue
Block a user