init III
This commit is contained in:
112
Perl arp cache per snmp durchsuchen/arpsearch_back.pl
Normal file
112
Perl arp cache per snmp durchsuchen/arpsearch_back.pl
Normal file
@@ -0,0 +1,112 @@
|
||||
#! /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>;
|
||||
}
|
||||
Reference in New Issue
Block a user