#!/usr/bin/perl -w use strict; # # Petr Simandl, www.simandl.cz my $snmpwalk = "/usr/bin/snmpwalk"; my %map = do("/etc/switches_definitions.conf"); my @ports = (); my @sw = (); my %sw_d = (); my $portlist = ""; my $p = 0; my $d = ""; my ($fnc,$mac,$if,$bin,$geom,$desc); print "Content-type: text/html\n\n"; print "\n\n\n"; print "\n"; print "\n"; print "\n"; #nocache! #print "here"; open(CONF,"< /etc/switches.conf") || die("can't open datafile: $!"); while () { chomp; next if (/^#/); next if (/^$/); if (/^draw_/) { push @sw, $_; next; } if (/^([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:)|(([0-9]{1,3}\.){3}[0-9]{1,3})/) { ($mac, $portlist) = split(/\|/, $_, 2); @ports = (); foreach ( split(/\|/, $portlist) ) { ($p, $d) = split /;/; $ports[$p] = $d; } $sw_d{$mac} = [ @ports ]; } } close CONF; foreach (@sw) { ($fnc, $mac, $if, $bin, $geom, $desc) = split /\|/; SWITCH: { if ($fnc eq "draw_rrcp_switch") { draw_rrcp_switch($mac,$if,$bin,$desc,$map{$geom},\%sw_d); last SWITCH; } if ($fnc eq "draw_snmp_switch") { draw_snmp_switch($mac,$if,$bin,$desc,$map{$geom},\%sw_d); last SWITCH; } } print "
\n"; } my $date = `date`; print "
$date\n
"; print ""; ################################################################################ sub print_port_graph { my $ip = shift(@_); my $page = shift(@_); my $graph = shift(@_); my $caption = shift(@_); my $text = shift(@_); print "$text"; } # end print_port_graph sub draw_rrcp_switch { my $mac = shift(@_); my $if = shift(@_); my $bin = shift(@_); my $desc = shift(@_); my @map = @{shift(@_)}; my $sw_d = shift(@_); my $w = scalar( @{$map[0]} ); my $h = scalar @map; my $hmac = ""; my $x = 0; my $y = 0; my $e = ""; my $f = ""; my $sirka = 70; my $label = ""; my $bg = ""; my $enab = ""; my $mod = ""; my $stat = ""; my $link = ""; my $flow = ""; my $port = ""; my $portlink = ""; my @row = (); my @pole = (); my $porty=`sudo $bin $mac\@$if show int | grep ^$if | sed 's/://g' | sed 's/$if\\///g'`; print "$desc $mac"; # print "
$porty\n
"; foreach (split("\n",$porty)) { s/auto1000M-/auto 1000M-/; @row = split ; @pole[$row[0]] = [ @row[1..5] ]; } print "\n"; for ($y = 0; $y < $h; $y++) { print "\n"; for ($x = 0; $x < $w; $x++) { $bg = "\"#FFFFFF\""; print " \n"; } else { print " \n"; } } print "\n"; } print "
"; if ($port) { $e = substr($enab,0,1); if (defined($sw_d->{$mac}[$port])) {$label = $sw_d->{$mac}[$port];} else { $label = ""; } if ($flow eq "flowctl") { $f = "Y"; } else { $f = "N"; } $hmac = $mac; $hmac =~ s/:/_/g; print_port_graph("10.33.0.23","${hmac}_${port}.html","${hmac}_${port}-day.png","$mac port $port $label","$port $label"); print "
$e $mod $stat $f
"; } sub draw_snmp_switch { my $myip = shift(@_); my $com = shift(@_); my $dhcp = shift(@_); my $desc = shift(@_); my @map = @{shift(@_)}; my $sw_d = shift(@_); my @pole_operstatus = (); my @pole_adminstatus = (); my @pole_speed = (); my %pole_dhcpdhosts = (); my %hash_mac = (); my %mactab = (); my $macind = 0; my $port = 0; my $w = scalar( @{$map[0]} ); my $h = scalar @map; my $x = 0; my $y = 0; my $sirka = 70; my $label = ""; my $bg = ""; my $enab = ""; my $e = ""; my $mod = ""; my $stat = ""; my $link = ""; my $flow = ""; my $barva = ""; my $title = ""; my $popis = ""; my $macinfo = ""; my $macip = ""; my $hip = ""; my @row = (); print "$desc $myip"; my $names = `$snmpwalk -Os -c $com -v 2c $myip .1.3.6.1.2.1.2.2.1.2 | sed 's/gabitEthernet//g' | sed 's/nGi//g'`; my $speedall = `$snmpwalk -Os -c $com -v 2c $myip .1.3.6.1.2.1.2.2.1.5`; my $adminstatusall = `$snmpwalk -Os -c $com -v 2c $myip .1.3.6.1.2.1.2.2.1.7`; my $operstatusall = `$snmpwalk -Os -c $com -v 2c $myip .1.3.6.1.2.1.2.2.1.8`; my $mactable = `$snmpwalk -Os -c $com -v 2c $myip atPhysAddress2`; my $mactableport = `$snmpwalk -Os -c $com -v 2c $myip ipNetToMediaIfIndex2`; my $dhcpdconf = `wget -t 1 -T 1 http://$dhcp/cgi-bin/dhcp.cgi -q -O -`; # $arpn = `wget -t 1 -T 1 http://$dhcp/cgi-bin/arpn.cgi -q -O -`; foreach (split("\n",$operstatusall)) { s/^ifOperStatus\.([0-9]+) = INTEGER: (.*)$/$1 $2/; @row = split ; $pole_operstatus[$row[0]] = $row[1]; } foreach (split("\n",$adminstatusall)) { s/^ifAdminStatus\.([0-9]+) = INTEGER: (.*)$/$1 $2/; @row = split ; $pole_adminstatus[$row[0]] = $row[1]; } foreach (split("\n",$speedall)) { s/^ifSpeed\.([0-9]+) = Gauge32: (.*)$/$1 $2/; @row = split ; $row[1] =~ s/000000$/M/; $pole_speed[$row[0]] = $row[1]; } foreach (split("\n",$mactable)) { s/ = Hex-STRING://; ($macind, my $tmpmac) = split(" ", $_, 2); $tmpmac =~ s/ $//g; $tmpmac =~ s/ /:/g; $macind =~ s/\.1\./\./g; $hash_mac{$macind} = $tmpmac; # print "$tmpmac $macind\n"; } foreach (split("\n",$mactableport)) { s/ = INTEGER://; ($macind, $port) = split ; $macind =~ s/^ipNetToMediaIfIndex/atPhysAddress/; # print "$port $macind\n"; if (exists $mactab{$port} ) { push @{ $mactab{$port} }, $hash_mac{$macind}; # pridam do pole k portu } else { $mactab{$port} = [ $hash_mac{$macind} ]; # zalozim nove pole pro port } } #@pole_arpn = split("\n",$arpn); $dhcpdconf =~ s/\n/ /g; $dhcpdconf =~ s/\s+/ /g; $dhcpdconf =~ s/host /\nhost /g; $dhcpdconf =~ s/}/}\n/g; $dhcpdconf =~ s/\^host //g; my @pole_dhcpdconf = split("\n",$dhcpdconf); for (@pole_dhcpdconf) { if (/^host/) { s/^host ([^\s]+) {\s*hardware\s+ethernet\s+(([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})\s*;\s*fixed-address\s+(([0-9]{1,3}\.){3}[0-9]{1,3})\s*;\s*}/$2 $1 $4/; (my $mac, my $host, my $ip) = split; $mac =~ tr/a-f/A-F/; $pole_dhcpdhosts{$mac} = "$host $ip"; } } print "\n"; for ($y = 0; $y < $h; $y++) { print "\n"; for ($x = 0; $x < $w; $x++) { $bg = "\"#FFFFFF\""; print " "; } else { print " \n"; } } print "\n"; } print "
"; if ($port) { if ($enab =~ /^up/) {$e = "E";} else {$e = "D";} if (defined($sw_d->{$myip}[$port])) {$label = $sw_d->{$myip}[$port];} else { $label = ""; } $hip = $myip; $hip =~ s/\./_/g; my $portln = $port; $portln =~ s/\//-/g; print_port_graph("10.33.0.23","${hip}_${portln}.html","${hip}_${portln}-day.png","$myip port $port $label","$port $label"); print "
$e $stat
\n"; print "
";
 foreach $mac (@{ $mactab{$port} }) {
 if (exists $pole_dhcpdhosts{$mac}) {
 $barva = "black";
 $title = "$mac " . $pole_dhcpdhosts{$mac};
 $popis = $pole_dhcpdhosts{$mac};
 } else {
 $barva = "red";
 $popis = $mac;
 $macinfo = `wget -t 1 -T 1 http://$dhcp/cgi-bin/macinfo.cgi?$mac -q -O -`;
 if ($macinfo) { ($macip) = split(" ", $macinfo, 1) } else { $macip = "none" };
 $title = "$mac je neznama MAC adresa! Nalezena IP : $macip";
 }
 print "$popis
" }; print "
"; }; #!/usr/bin/perl -w use strict; # # Petr Simandl, www.simandl.cz my $snmpwalk = "/usr/bin/snmpwalk"; my %map = ( "edimax_es-3116p" => [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], ], "repotec_g3224x" => [[1,2,3,4,5,6,7,8,9,10,11,12,0,0], [13,14,15,16,17,18,19,20,21,22,23,24,25,26], ], "repotec_RP-6326I" => [[1,2,3,4,5,6,7,8,9,10,11,12,0,0], [13,14,15,16,17,18,19,20,21,22,23,24,25,26], ], "repotec_RP-G2402I"=> [[1,2,3,4,5,6,7,8,9,10,11,12], [13,14,15,16,17,18,19,20,21,22,23,24], ], "repotec_GEL2-SW8" => [[1,2,3,4,5,6,7,8], ], "repotec_10G" => [[1,2,3,4,5,6,7,8,9,10], ], "linksys_SRW224G4" => [[1,2,3,4,5,6,7,8,9,10,11,12,25,27], [13,14,15,16,17,18,19,20,21,22,23,24,26,28], ], "SMCGS24C" => [[1,2,3,4,5,6,7,8,9,10,11,12], [13,14,15,16,17,18,19,20,21,22,23,24,21,22,23,24], ], "tplink_SG5426" => [[1,3,5,7,9,11,13,15,17,19,21,23,25,26,0,0], [2,4,6,8,10,12,14,16,18,20,22,24,21,22,23,24], ], "TL-SL3452" => [[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,0,0], [2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,51,52], ], "TL-SL3428" => [[1,3,5,7,9,11,13,15,17,19,21,23,25,0,0], [2,4,6,8,10,12,14,16,18,20,22,24,26,27,28], ], "TL-SG3424" => [[2,4,6,8,10,12,14,16,18,20,22,24], [1,3,5,7,9,11,13,15,17,19,21,23], ], "NetGear" => [[1,2,3,4,5,6,7,8,9,10,11,12], ], "HuaS5624P" => [[4227625,4227641,4227657,4227673,4227689,4227705,4227721,4227737,4227753,4227769,4227785,4227801,0,0,0,0], [4227633,4227649,4227665,4227681,4227697,4227713,4227729,4227745,4227761,4227777,4227793,4227809,4227817,4227825,4227833,4227841], ], "C4900MNFX1" => [[63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,54,90,121,0], [132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,55,56,57,58,59,60,61,62], ], "C4900MNFX2" => [[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,51,87,123,0], [133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,52,53,54,55,56,57,58,59], ], ); my @ports = (); my @sw = (); my %sw_d = (); my $portlist = ""; my $p = 0; my $d = ""; my ($fnc,$mac,$if,$bin,$geom,$desc); print "Content-type: text/html\n\n"; print "\n\n\n"; print "\n"; print "\n"; print "\n"; #nocache! #print "here"; open(CONF,"< /etc/switches.conf") || die("can't open datafile: $!"); while () { chomp; next if (/^#/); next if (/^$/); if (/^draw_/) { push @sw, $_; next; } if (/^([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:)|(([0-9]{1,3}\.){3}[0-9]{1,3})/) { ($mac, $portlist) = split(/\|/, $_, 2); @ports = (); foreach ( split(/\|/, $portlist) ) { ($p, $d) = split /;/; $ports[$p] = $d; } $sw_d{$mac} = [ @ports ]; } } close CONF; foreach (@sw) { ($fnc, $mac, $if, $bin, $geom, $desc) = split /\|/; SWITCH: { if ($fnc eq "draw_rrcp_switch") { draw_rrcp_switch($mac,$if,$bin,$desc,$map{$geom},\%sw_d); last SWITCH; } if ($fnc eq "draw_snmp_switch") { draw_snmp_switch($mac,$if,$bin,$desc,$map{$geom},\%sw_d); last SWITCH; } } print "
\n"; } my $date = `date`; print "
$date\n
"; print ""; ################################################################################ sub print_port_graph { my $ip = shift(@_); my $page = shift(@_); my $graph = shift(@_); my $caption = shift(@_); my $text = shift(@_); print "$text"; } # end print_port_graph sub draw_rrcp_switch { my $mac = shift(@_); my $if = shift(@_); my $bin = shift(@_); my $desc = shift(@_); my @map = @{shift(@_)}; my $sw_d = shift(@_); my $w = scalar( @{$map[0]} ); my $h = scalar @map; my $hmac = ""; my $x = 0; my $y = 0; my $e = ""; my $f = ""; my $sirka = 70; my $label = ""; my $bg = ""; my $enab = ""; my $mod = ""; my $stat = ""; my $link = ""; my $flow = ""; my $port = 0; my @row = (); my @pole = (); my $porty=`sudo $bin $mac\@$if show int | grep ^$if | sed 's/://g' | sed 's/$if\\///g'`; print "$desc $mac"; # print "
$porty\n
"; foreach (split("\n",$porty)) { s/auto1000M-/auto 1000M-/; @row = split ; @pole[$row[0]] = [ @row[1..5] ]; } print "\n"; for ($y = 0; $y < $h; $y++) { print "\n"; for ($x = 0; $x < $w; $x++) { $bg = "\"#FFFFFF\""; print " \n"; } else { print " \n"; } } print "\n"; } print "
"; if ($port) { $e = substr($enab,0,1); if (defined($sw_d->{$mac}[$port])) {$label = $sw_d->{$mac}[$port];} else { $label = ""; } if ($flow eq "flowctl") { $f = "Y"; } else { $f = "N"; } $hmac = $mac; $hmac =~ s/:/_/g; print_port_graph("10.33.0.23","${hmac}_${port}.html","${hmac}_${port}-day.png","$mac port $port $label","$port $label"); print "
$e $mod $stat $f
"; } sub draw_snmp_switch { my $myip = shift(@_); my $com = shift(@_); my $dhcp = shift(@_); my $desc = shift(@_); my @map = @{shift(@_)}; my $sw_d = shift(@_); my @pole_operstatus = (); my @pole_adminstatus = (); my @pole_speed = (); my %pole_dhcpdhosts = (); my %hash_mac = (); my %mactab = (); my $macind = 0; my $port = 0; my $w = scalar( @{$map[0]} ); my $h = scalar @map; my $x = 0; my $y = 0; my $sirka = 70; my $label = ""; my $bg = ""; my $enab = ""; my $e = ""; my $mod = ""; my $stat = ""; my $link = ""; my $flow = ""; my $barva = ""; my $title = ""; my $popis = ""; my $macinfo = ""; my $macip = ""; my $hip = ""; my @row = (); print "$desc $myip"; my $names = `$snmpwalk -Os -c $com -v 2c $myip .1.3.6.1.2.1.2.2.1.2 | sed 's/gabitEthernet//g' | sed 's/nGi//g'`; my $speedall = `$snmpwalk -Os -c $com -v 2c $myip .1.3.6.1.2.1.2.2.1.5`; my $adminstatusall = `$snmpwalk -Os -c $com -v 2c $myip .1.3.6.1.2.1.2.2.1.7`; my $operstatusall = `$snmpwalk -Os -c $com -v 2c $myip .1.3.6.1.2.1.2.2.1.8`; my $mactable = `$snmpwalk -Os -c $com -v 2c $myip atPhysAddress2`; my $mactableport = `$snmpwalk -Os -c $com -v 2c $myip ipNetToMediaIfIndex2`; my $dhcpdconf = `wget -t 1 -T 1 http://$dhcp/cgi-bin/dhcp.cgi -q -O -`; # $arpn = `wget -t 1 -T 1 http://$dhcp/cgi-bin/arpn.cgi -q -O -`; foreach (split("\n",$operstatusall)) { s/^ifOperStatus\.([0-9]+) = INTEGER: (.*)$/$1 $2/; @row = split ; $pole_operstatus[$row[0]] = $row[1]; } foreach (split("\n",$adminstatusall)) { s/^ifAdminStatus\.([0-9]+) = INTEGER: (.*)$/$1 $2/; @row = split ; $pole_adminstatus[$row[0]] = $row[1]; } foreach (split("\n",$speedall)) { s/^ifSpeed\.([0-9]+) = Gauge32: (.*)$/$1 $2/; @row = split ; $row[1] =~ s/000000$/M/; $pole_speed[$row[0]] = $row[1]; } foreach (split("\n",$mactable)) { s/ = Hex-STRING://; ($macind, my $tmpmac) = split(" ", $_, 2); $tmpmac =~ s/ $//g; $tmpmac =~ s/ /:/g; $macind =~ s/\.1\./\./g; $hash_mac{$macind} = $tmpmac; # print "$tmpmac $macind\n"; } foreach (split("\n",$mactableport)) { s/ = INTEGER://; ($macind, $port) = split ; $macind =~ s/^ipNetToMediaIfIndex/atPhysAddress/; # print "$port $macind\n"; if (exists $mactab{$port} ) { push @{ $mactab{$port} }, $hash_mac{$macind}; # pridam do pole k portu } else { $mactab{$port} = [ $hash_mac{$macind} ]; # zalozim nove pole pro port } } #@pole_arpn = split("\n",$arpn); $dhcpdconf =~ s/\n/ /g; $dhcpdconf =~ s/\s+/ /g; $dhcpdconf =~ s/host /\nhost /g; $dhcpdconf =~ s/}/}\n/g; $dhcpdconf =~ s/\^host //g; my @pole_dhcpdconf = split("\n",$dhcpdconf); for (@pole_dhcpdconf) { if (/^host/) { s/^host ([^\s]+) {\s*hardware\s+ethernet\s+(([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})\s*;\s*fixed-address\s+(([0-9]{1,3}\.){3}[0-9]{1,3})\s*;\s*}/$2 $1 $4/; (my $mac, my $host, my $ip) = split; $mac =~ tr/a-f/A-F/; $pole_dhcpdhosts{$mac} = "$host $ip"; } } print "\n"; for ($y = 0; $y < $h; $y++) { print "\n"; for ($x = 0; $x < $w; $x++) { $bg = "\"#FFFFFF\""; print " "; } else { print " \n"; } } print "\n"; } print "
"; if ($port) { if ($enab =~ /^up/) {$e = "E";} else {$e = "D";} if (defined($sw_d->{$myip}[$port])) {$label = $sw_d->{$myip}[$port];} else { $label = ""; } $hip = $myip; $hip =~ s/\./_/g; print_port_graph("10.33.0.23","${hip}_${port}.html","${hip}_${port}-day.png","$myip port $port $label","$port $label"); print "
$e $stat
\n"; print "
";
 foreach $mac (@{ $mactab{$port} }) {
 if (exists $pole_dhcpdhosts{$mac}) {
 $barva = "black";
 $title = "$mac " . $pole_dhcpdhosts{$mac};
 $popis = $pole_dhcpdhosts{$mac};
 } else {
 $barva = "red";
 $popis = $mac;
 $macinfo = `wget -t 1 -T 1 http://$dhcp/cgi-bin/macinfo.cgi?$mac -q -O -`;
 if ($macinfo) { ($macip) = split(" ", $macinfo, 1) } else { $macip = "none" };
 $title = "$mac je neznama MAC adresa! Nalezena IP : $macip";
 }
 print "$popis
" }; print "
"; }; WebSVN - switches - Diff - Rev 9 and 7 - /switchesol.cgi
  jablonka.czprosek.czf

switches

Subversion Repositories:
[/] [switchesol.cgi] - Diff between revs 7 and 9

Show entire file Ignore whitespace

Rev 7 Rev 9

Powered by WebSVN 2.2.1