This commit is contained in:
2024-10-14 00:08:40 +02:00
parent dbfba56f66
commit 1462d52e13
4572 changed files with 2658864 additions and 0 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,194 @@
#! /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;
my $community="con";
while (1) {
my @switches=();
my @routers=();
my @cutoffs=();
##### 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ö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;
##### Auszublendende Switch/Port einlesen
open CUTOFF, "<cutoff.conf";
while (<CUTOFF>) {
chomp;
next unless ($_ =~ /^[0-9]/);
@cutoffs=(@cutoffs, $_);
}
close CUTOFF;
##### 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 $community $router .1.3.6.1.2.1.4.22.1`;
##### Alle ARP Einträge zusammenfassen
my @oneroutermac;
foreach (@onerouter) {
if ($_=~/[0-9a-f]{2} [0-9a-f]{2} [0-9a-f]{2} [0-9a-f]{2} [0-9a-f]{2} [0-9a-f]{2}/i) {
push @oneroutermac, $_;
}
}
@array = (@array, @oneroutermac);
}
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ä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);
last;
}
}
##### 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) {
#print "\n";
savepos();
print "Durchsuche Switch $switch";
my $ergebnis = `snmpwalk -mall -c $community "$switch" "$oid"`; # Suche MAC auf akt Switch
#print "$ergebnis\n";
my $tmp;
my $mac2="";
($tmp,$mac2) = split /: /,$ergebnis;
chomp $mac2;
#print "$gesmac|$mac2|\n";
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 $community "$switch" "$oid2"`;
my ($tmp,$intindex) = split /=/,$intind;
chomp $intindex;
$intindex =~ s/ //,$intindex;
#print "\n";
loadpos;
#print "MAC-Adresse auf Switch $switch gefunden\n";
my $oid3=".1.3.6.1.2.1.2.2.1.2.$intindex";
#print "$oid3";
#print "snmpwalk -mall -c $community $switch $oid3\n";
my $intname=`snmpwalk -mall -c $community "$switch" "$oid3"`;
#print "$intname\n";
my ($tmp,$intnam) = split /=/,$intname;
$intnam =~ s/"//,$intnam;
$intnam =~ s/ //,$intnam;
$intnam =~ s/"//,$intnam;
chomp $intnam;
#print "INTNAME:$intnam;";
unless ($intnam =~ /Trk/ or $intnam =~ /Mesh/ or $intnam =~ /net/ or length($intnam)==0) {
my $cutoffmarker=0;
foreach my $cutoff (@cutoffs) {
if ($cutoff eq "$switch,$intnam") {
$cutoffmarker=1;
}
}
unless ($cutoffmarker == 1) {
print "MAC-Adresse auf Switch $switch gefunden\n";
print "Port gefunden: $intnam\n\n" ;
savepos;
}
}
}
loadpos();
#print "\e[1A";
clline();
}
print "<Enter> für weiter!";
<STDIN>;
}

View 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>;
}

View 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>;
}

View File

@@ -0,0 +1,185 @@
#! /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 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ö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;
##### Auszublendende Switch/Port einlesen
open CUTOFF, "<cutoff.conf";
while (<CUTOFF>) {
chomp;
next unless ($_ =~ /^[0-9]/);
@cutoffs=(@cutoffs, $_);
}
close CUTOFF;
##### 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;
##### Alle ARP Einträ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);
last;
}
}
##### 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) {
#print "\n";
savepos();
print "Durchsuche Switch $switch";
my $ergebnis = `snmpwalk -mall -c public "$switch" "$oid"`; # Suche MAC auf akt Switch
#print "$ergebnis\n";
my $tmp;
my $mac2="";
($tmp,$mac2) = split /: /,$ergebnis;
chomp $mac2;
#print "$gesmac|$mac2|\n";
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;
#print "\n";
loadpos;
#print "MAC-Adresse auf Switch $switch gefunden\n";
my $oid3=".1.3.6.1.2.1.2.2.1.2.$intindex";
#print "$oid3";
#print "snmpwalk -mall -c public $switch $oid3\n";
my $intname=`snmpwalk -mall -c public "$switch" "$oid3"`;
#print "$intname\n";
my ($tmp,$intnam) = split /=/,$intname;
$intnam =~ s/"//,$intnam;
$intnam =~ s/ //,$intnam;
$intnam =~ s/"//,$intnam;
chomp $intnam;
#print "INTNAME:$intnam;";
unless ($intnam =~ /Mesh/ or $intnam =~ /net/ or length($intnam)==0) {
my $cutoffmarker=0;
foreach my $cutoff (@cutoffs) {
if ($cutoff eq "$switch,$intnam") {
$cutoffmarker=1;
}
}
unless ($cutoffmarker == 1) {
print "MAC-Adresse auf Switch $switch gefunden\n";
print "Port gefunden: $intnam\n\n" ;
savepos;
}
}
}
loadpos();
#print "\e[1A";
clline();
}
print "<Enter> für weiter!";
<STDIN>;
}

View File

@@ -0,0 +1,4 @@
170.11.1.16,24
10.10.11.22,H16
10.10.11.32,C15
10.10.11.39,24

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,21 @@
#!/bin/perl
use lib '/MoVA/';
use strict;
use menu;
my %main;
$main{'a'} = ['Punkt 1', '#function1'];
$main{'z'} = ['Ende', '#quit'];
$main{'desc'} = 'TEST';
show(\%main);
sub function1 {
print "HALLO";
<STDIN>;
show(\%main);
}
sub quit {
exit;
}

View File

@@ -0,0 +1,75 @@
#!/bin/perl
# Key: Shortcut im Menü
# Value: Array aus Menüpunkttext und Aktion
# Aktion kann weiterer Menüpunkt sein, oder Funktion die aufgerufen werden soll
# Für Menüpunkt muss ein Hash mit diesem Namen angelegt werden, der ein weiteres
# Menü beschreibt.
# Für Funktion muss das erste Zeichen eine Raute (#) sein. Eine Funktion mit dem
# entspr. Namen muss angelegt sein.
# Bei jedem Menüpunkt kann eine Beschreibung angegeben werden, dazu ist bei dem entspr.
# Menühash ein Key 'desc' mitanzulegen. Der Value ist ein Skalar der den Menünamen enthält.
# Beispielkonfig mit Aufruf
#$haupt{'1'} = ['Adressen', 'adressen'];
#$haupt{'2'} = ['Sagem', 'sagem'];
#$haupt{'3'} = ['Nokia', 'nokia'];
#$haupt{'e'} = ['Ende', '#bye'];
#$haupt{'desc'} = "Hauptmenü";
#$adressen{'1'} = ['Suchen', '#adr_suchen'];
#$adressen{'z'} = ['Zurück', 'haupt'];
#$adressen{'desc'} = "Adressen";
#$sagem{'z'} = ['Zurück', 'haupt'];
#$sagem{'desc'} = "Sagem";
#$nokia{'z'} = ['Zurück', 'haupt'];
#$nokia{'desc'} = "Nokia";
#menue("haupt");
package menu;
use Exporter;
use Win32::Console::ANSI;
use Term::ANSIScreen qw/:color :cursor :screen/;
@ISA = ('Exporter');
@EXPORT = (@EXPORT,'show');
sub show {
no strict;
($me) = @_;
%menu = %$me;
do {
print "\e[2J";
print "----- $menu{'desc'} -----\n\n";
foreach (sort keys %menu) {
if ($_ eq 'desc') { next; }
print " ";
print Term::ANSIScreen::colored(" $_",'black on white');
print " $menu{$_}->[0]\n\n";
}
print "\nAuswahl:";
$auswahl = <STDIN>;
chomp $auswahl;
$ok=0;
foreach (sort keys %menu) {
if ("$_" eq "$auswahl") {
$ok = 1;
}
}
} while (!$ok);
$para = "$menu{$auswahl}->[1]";
if ($para =~ /#/) {
$para =~ s/#//;#,$para;
$fkt="main::$para";
&$fkt;
}
else {
# show(\{%$para});
}
}
1;

View File

@@ -0,0 +1,79 @@
#!/bin/perl
# Key: Shortcut im Menü
# Value: Array aus Menüpunkttext und Aktion
# Aktion kann weiterer Menüpunkt sein, oder Funktion die aufgerufen werden soll
# Für Menüpunkt muss ein Hash mit diesem Namen angelegt werden, der ein weiteres
# Menü beschreibt.
# Für Funktion muss das erste Zeichen eine Raute (#) sein. Eine Funktion mit dem
# entspr. Namen muss angelegt sein.
# Bei jedem Menüpunkt kann eine Beschreibung angegeben werden, dazu ist bei dem entspr.
# Menühash ein Key 'desc' mitanzulegen. Der Value ist ein Skalar der den Menünamen enthält.
# Beispielkonfig mit Aufruf
#$haupt{'1'} = ['Adressen', 'adressen'];
#$haupt{'2'} = ['Sagem', 'sagem'];
#$haupt{'3'} = ['Nokia', 'nokia'];
#$haupt{'e'} = ['Ende', '#bye'];
#$haupt{'desc'} = "Hauptmenü";
#$adressen{'1'} = ['Suchen', '#adr_suchen'];
#$adressen{'z'} = ['Zurück', 'haupt'];
#$adressen{'desc'} = "Adressen";
#$sagem{'z'} = ['Zurück', 'haupt'];
#$sagem{'desc'} = "Sagem";
#$nokia{'z'} = ['Zurück', 'haupt'];
#$nokia{'desc'} = "Nokia";
#menue(\%haupt);
#use Win32::Console::ANSI;
#use Term::ANSIScreen qw/:color :cursor :screen/;
package menue;
sub zeigen {
($me) = @_;
%menu = %$me;
do {
#print "\e[2J";
my @subst = (['ä','ae'],['ö','oe'],['ü','ue'],['ß','ss'],['Ä','Ae'],['Ö','Oe'],['Ü','Ue']);
foreach (@subst) {
$menu{'desc'} =~ s/$_->[0]/$_->[1]/g;
}
print "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n----- $menu{'desc'} -----\n\n";
foreach my $mp (sort keys %menu) {
if ($mp eq 'desc') { next; }
foreach (@subst) {
$menu{$mp}->[0] =~ s/$_->[0]/$_->[1]/g;
}
print " $mp $menu{$mp}->[0]\n\n";
}
print "\nAuswahl:";
$auswahl = <STDIN>;
chomp $auswahl;
$ok=0;
foreach (sort keys %menu) {
if ("$_" eq "$auswahl") {
$ok = 1;
}
}
} while (!$ok);
$para = "$menu{$auswahl}->[1]";
if ($para =~ /#/) {
$para =~ s/#//,$para;
$fkt="main::$para";
&$fkt;
}
else {
menue::zeigen("$para");
}
}
1;

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Komodo Project File - DO NOT EDIT -->
<project id="8D1ED6C9-A2B4-485E-8348-A39DE479B497" name="search" kpf_version="2">
<preference-set id="">
</preference-set>
<file url="menu.pm" id="8E6CD4E3-CA76-4060-A31E-32FE2D27D27E" name="menu.pm">
</file>
<file url="search.pl" id="3F0E9C0D-B326-4455-BCF3-C45D5A588336" name="search.pl">
<preference-set id="">
<string id="lastInvocation">default</string>
<preference-set id="Invocations">
<preference-set id="default">
<string id="postparams"></string>
<string id="userEnvironment"></string>
<string id="warnings">enabled</string>
<boolean id="use-console">0</boolean>
<string id="getparams"></string>
<string id="executable-params"></string>
<boolean id="sim-cgi">0</boolean>
<string id="filename">G:\Dokumentation\Sonstige Perl-Skripte\arpsearch\new\search.pl</string>
<string id="request-method">GET</string>
<long id="debugger.io-port">9011</long>
<string id="params"></string>
<string id="mpostparams"></string>
<string id="posttype">application/x-www-form-urlencoded</string>
<string id="documentRoot"></string>
<string id="cookieparams"></string>
<boolean id="show-dialog">1</boolean>
<string id="cwd"></string>
<string id="userCGIEnvironment"></string>
</preference-set>
</preference-set>
</preference-set>
</file>
</project>

View File

@@ -0,0 +1,161 @@
#!/bin/perl
use menu;
use strict;
my %haupt;
my %konfig;
my %ip_mac_hash;
my %switch_hash;
my $community='con';
$haupt{'1'} = ['IP', '#search_ip'];
$haupt{'2'} = ['MAC', '#search_mac'];
$haupt{'3'} = ['Switch/Port', '#search_switchport'];
$haupt{'a'} = ['ARP Caches lesen','#read_arp'];
$haupt{'m'} = ['MAC Tables lesen','#read_mac'];
$haupt{'x'} = ['Ende', '#bye'];
$haupt{'desc'} = "fucking menu";
show(\%haupt);
sub read_arp {
%ip_mac_hash = ();
create_host_mac_hash('10.1.1.250',\%ip_mac_hash);
create_host_mac_hash('10.3.2.51',\%ip_mac_hash);
create_host_mac_hash('10.3.2.52',\%ip_mac_hash);
create_host_mac_hash('90.200.31.21',\%ip_mac_hash);
create_host_mac_hash('90.200.31.23',\%ip_mac_hash);
show(\%haupt);
}
sub read_mac {
%switch_hash = ();
create_switch_hash("10.1.1.101",\%switch_hash);
create_switch_hash("10.1.1.103",\%switch_hash);
create_switch_hash("10.1.1.104",\%switch_hash);
create_switch_hash("10.1.1.106",\%switch_hash);
create_switch_hash("10.1.1.107",\%switch_hash);
create_switch_hash("10.1.1.112",\%switch_hash);
show(\%haupt);
}
sub search_ip {
my $mac;
my $found=0;
print "IP?";
my $ip = <STDIN>;
chomp $ip;
foreach (keys %ip_mac_hash) {
if ($_ eq $ip) {
$mac = $ip_mac_hash{$ip};
$found=1;
last;
}
}
if ($found==1) {
print "\nGesuchte IP: $ip\nGefundene MAC-Adresse: $mac\n";
foreach my $swip (keys %switch_hash) {
my $count;
foreach my $int (keys %{$switch_hash{$swip}}) {
foreach my $maconsw (@{$switch_hash{$swip}{$int}{'MAC'}}) {
$count++;
print "$count $maconsw $mac\n";
if ($maconsw eq $mac) {
print "Switch: $swip\nPort: $switch_hash{$swip}{$int}{'ifDesc'}\n";
last;
}
}
}
}
}
<STDIN>;
show(\%haupt);
}
sub search_mac {
show(\%haupt);
}
sub search_switchport {
show(\%haupt);
}
sub bye {
exit;
}
sub check_ip {
my ($ip) = @_;
my $ok=0;
my ($i1,$i2,$i3,$i4);
if ( ($i1,$i2,$i3,$i4) = $ip =~ /^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$/ ) {
$ok=1 if ($i1 < 255 and $i2 < 255 and $i3 < 255 and $i4 < 255);
}
return $ok;
}
sub check_mac {
my ($mac) = @_;
my $ok=0;
$ok=1 if ( $mac =~ /^[0-9a-f]{2}\.[0-9a-f]{2}\.[0-9a-f]{2}\.[0-9a-f]{2}\.[0-9a-f]{2}\.[0-9a-f]{2}$/i );
return $ok;
}
sub check_switch_port {
my ($switchport)=@_;
my $ok=0;
my ($ip,$port) = split /\//,$switchport;
$ok=1 if (check_ip($ip) and check_port($port));
return $ok;
}
sub check_port {
my ($port)=@_;
my $ok=0;
$ok=1 if ($port =~ /^[0-9]{1,2}$/ or $port =~ /^[a-z]{1}[0-9]{1}$/i);
return $ok;
}
sub create_host_mac_hash {
my ($switchip,$hashref)=@_;
my @array;
@array = `snmpwalk -mall -c $community $switchip .1.3.6.1.2.1.4.22.1.2`;
foreach (@array) {
chomp;
my ($ip,$mac) = $_ =~ /([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*) = Hex: ([0-9a-f ]*) $/i;
$mac =~ s/ /./g;
$$hashref{"$ip"}="$mac";
}
print "";
}
sub create_switch_hash {
my ($switchip,$hashref)=@_;
my @array;
@array = `snmpwalk -mall -c $community $switchip .1.3.6.1.2.1.17.4.3.1.1`; # MAC-Adr auf Switch ermitteln
foreach (@array) {
chomp;
my ($m1,$m2,$m3,$m4,$m5,$m6) = $_ =~ /= Hex: ([0-9a-f]{2}) ([0-9a-f]{2}) ([0-9a-f]{2}) ([0-9a-f]{2}) ([0-9a-f]{2}) ([0-9a-f]{2})/i;
my $mac="$m1."."$m2."."$m3."."$m4."."$m5."."$m6"; # MACs nach Dezimal umwandeln
my $d1 = hex($m1);
my $d2 = hex($m2);
my $d3 = hex($m3);
my $d4 = hex($m4);
my $d5 = hex($m5);
my $d6 = hex($m6);
my $oid=".1.3.6.1.2.1.17.4.3.1.2.$d1.$d2.$d3.$d4.$d5.$d6";
my $line=`snmpwalk -mall -c $community $switchip $oid`; # Interface auf dem MAC liegt suchen
chomp $line;
my ($interface) = $line =~ / = ([0-9]{2})$/;
# print "$interface\n";
push @{$$hashref{$switchip}{$interface}{'MAC'}},$mac unless ($interface eq "");
}
foreach my $ip (keys %$hashref) {
foreach my $intid (keys %{$$hashref{$ip}}) {
# .1.3.6.1.2.1.2.2.1.2 => ifDescr; dazu noch .$intid anhängen
# .1.3.6.1.2.1.2.2.1.4 => ifMTU; dazu noch .$intid anhängen
# ...
my $oid = ".1.3.6.1.2.1.2.2.1.2." . $intid;
my $line=`snmpwalk -mall -c $community $switchip $oid`;
my ($portname) = $line =~ /"([a-z0-9]{1,2})"/i;
$$hashref{$switchip}{$intid}{'ifDesc'} = $portname;
# print "$$hashref{$switchip}{$intid}{'ifDesc'}\n";
}
}
}
1;

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,12 @@
#!/bin/perl
my %konfig=(v1 => k1, v2 => k2);
my $para = 'konfig';
print %{$para};
print "\n\n";
print %konfig;
print "";

View File

@@ -0,0 +1,5 @@
65
65
65

View File

@@ -0,0 +1,16 @@
#10.130.1.250
#10.1.1.113
#10.1.1.250
#Börse
#XTR1
90.200.31.23
#XTR2
90.200.31.21
#Solaris MISS
10.3.2.51
10.3.2.52
#ASA
10.1.1.250

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,7 @@
#conet mesh
10.1.1.101
10.1.1.103
10.1.1.104
10.1.1.106
10.1.1.107
10.1.1.112