#! /usr/bin/perl ### ### IP Manager (c)09/02 - Kirk Waingrow ### ### Just create the DATA file and it will do the rest... ### DATA FILE SYNTAX: (Seperate by tabs) ### VLAN Description IPaddress /Size ### $VER="1.0 - Kirk Waingrow - 09/02"; # VERSION NUMBER $DPATH="/httpd/data/ipm"; $DATA="$DPATH/ipm.txt"; $PROG="/cgi-bin/ipm"; if ( ! -d "$DPATH" ) { `mkdir -p $DPATH`; } if ( ! -f "$DATA" ) { `touch $DATA`; } print "Content-type: text/html\n\n"; print qq~ MySpace Operations IP Manager ~; $buffer = "$QUERY_STRING"; $buffer = $ENV{'QUERY_STRING'}; # Split the Variables by the & # @pairs = split (/&/, $buffer); # Create the array foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $form{$name} = $value; #print "$form{$name}

"; } if ($form{subnet}) { $subnet="$form{subnet}"; } else { $subnet=""; } ### ### TITLE BAR ### # $TOTALUID=`cat $DATA | wc -l | awk '{ print $1}'`; print qq~

Unix Operations IP Manager ~; if ( $form{subnet} ) { open (IN, "$DATA"); while () { ($sub, $desc, $vlan, $ssize) = split(/\t/, $_); if ( "$sub" eq "$form{subnet}" ) { print " - "; print "$desc"; } } close(IN); } print qq~
Myspace
Search a System (showall):
~; ### ### DISPLAY Subnets ### $fade=""; if ( -s "$DATA" && ! "$subnet" && ! "$form{search}") { print qq~ ~; open (IN, "$DATA"); while () { ($sub, $desc, $vlan, $ssize) = split(/\t/, $_); if ( $fade ) { $bgc="bgcolor=e8e8e8"; $fade=""; } else { $bgc="bgcolor=fffffff"; $fade="1"; } print qq~ ~; } close(IN); print "
VLAN

Network Name

Subnet

/Size

$sub $desc $vlan $ssize
"; } if ( "$subnet" && ! "$form{search}" ) { if ( "$form{ip}" ) { if ( $form{action} eq "edit" ) { open(IN, "$DPATH/$subnet.txt"); while () { chomp; #if ( "$IP" eq "$form{ip}" ) if ( /^$form{ip}\t/ ) { ($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_); } } close(IN); print qq~
IP Address $form{ip}
Host Name
User Name/Location
Hardware (MAC) Address
Comment

~; } # # WRITE OUT CHANGES # if ( $form{action} eq "write" ) { open(OUT, "> $DPATH/$subnet.tmp"); open(IN, "$DPATH/$subnet.txt"); while () { chomp; ($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_); if ( "$IP" eq "$form{ip}" ) { print OUT "$form{ip} $form{hst} $form{mac} $form{usr} $form{com}\n"; } else { print OUT "$_\n"; } } close(IN); close(OUT); `mv $DPATH/$subnet.tmp $DPATH/$subnet.txt`; } # # CLEAR AN ENTRY # if ( $form{action} eq "clear" ) { open(IN, "$DPATH/$subnet.txt"); while () { chomp; ($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_); if ( "$IP" eq "$form{ip}" ) { print qq~
IP Address $IP
Host Name$HST
User Name/Location$USR
Hardware (MAC) Address$MAC
Comment$COM

~; } } close(IN); } # # CONFIRM CLEAR AN ENTRY # if ( $form{action} eq "clearall" ) { open(OUT, "> $DPATH/$subnet.tmp"); open(IN, "$DPATH/$subnet.txt"); while () { chomp; ($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_); if ( "$IP" eq "$form{ip}" ) { print OUT "$form{ip} OPEN \n"; } else { print OUT "$_\n"; } } close(IN); close(OUT); `mv $DPATH/$subnet.tmp $DPATH/$subnet.txt`; } } if ( "$form{action}" ne "edit" && "$form{action}" ne "clear" ) { &header_info; # # Create file and all the nodes if the subnet file doesnt exist # if ( ! -f "$DPATH/$subnet.txt" ) { $x=0; open (OUT, "> $DPATH/$subnet.txt"); while ( $x < 254 ) { $x++; print OUT "$x OPEN \n"; } close(OUT); } $FNO=""; $FNC=""; $fade=""; if ( -f "$DPATH/$subnet.txt" ) { open(IN, "$DPATH/$subnet.txt"); while () { ($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_); if ( $fade ) { $bgc="bgcolor=e8e8e8"; $fade=""; } else { $bgc="bgcolor=fffffff"; $fade="1"; } if ( "$HST" eq "OPEN" ) { $bgc="bgcolor=#a0c8c8"; } if ( /unknown/i ) { $bgc="bgcolor=ff9999"; } if ( /reserved/i ) { $bgc="bgcolor=ffff99"; } if ( /dhcp/i ) { $bgc="bgcolor=99ff99"; } print qq~ $FNO edit..clear $FNO $FNO $IP $FNC $FNO $HST $FNC $FNO $MAC $FNC $FNO $USR $FNC $FNO $COM $FNC ~; } close(IN); } } } # # SEARCH # sub display_search { ($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_); ($n1,$n2,$n3,$n4) = split (/\./, $IP); $subnet="$n1.$n2.$n3"; if ( $fade ) { $bgc="bgcolor=e8e8e8"; $fade=""; } else { $bgc="bgcolor=fffffff"; $fade="1"; } if ( "$HST" eq "OPEN" ) { $bgc="bgcolor=#a0c8c8"; } if ( /unknown/i ) { $bgc="bgcolor=ff9999"; } if ( /reserved/i ) { $bgc="bgcolor=ffff99"; } if ( /dhcp/i ) { $bgc="bgcolor=99ff99"; } print qq~ $FNOedit ... clear$FNO $FNO $IP $FNC $FNO $HST $FNC $FNO $MAC $FNC $FNO $USR $FNC $FNO $COM $FNC ~; } if ( $form{search}) { &header_info; $FNO=""; $FNC=""; $fade=""; if ( $subnet ) { open(IN, "$DPATH/$subnet.txt"); } else { open(IN, "cat $DPATH/[0123456789MN]*.txt|"); } while () { if ( $form{search} eq "showall" ) { if ( ! /OPEN/ && ! /RESERVED/ && ! /DHCP/ ) { &display_search; } } else { if ( /$form{search}/i ) { &display_search; } } } close(IN); } sub header_info { print qq~
Legend: Open Unknown Reserved DHCP Allocated

~; }
Action

IP Address

Host

MAC Address

User/Location

Comment