[4] | 1 | #!/usr/bin/perl
|
---|
| 2 |
|
---|
| 3 | use strict;
|
---|
| 4 | use warnings;
|
---|
| 5 |
|
---|
| 6 | #file snCalc.cgi little subnet calculator app
|
---|
| 7 |
|
---|
| 8 | my %webvar = parse_post();
|
---|
| 9 | my $input;
|
---|
| 10 |
|
---|
| 11 | print "Content-Type: text/html\n\n";
|
---|
| 12 |
|
---|
| 13 | open(HTML, "../startsn.html")|| die "Could not open starsn.html :$!";
|
---|
| 14 | my $start = join('', <HTML>);
|
---|
| 15 | close(HTML);
|
---|
| 16 | print $start;
|
---|
| 17 |
|
---|
| 18 | if($webvar{input} =~ m/(\/\d\d)/)
|
---|
| 19 | {
|
---|
| 20 | $input = $1;
|
---|
| 21 | }
|
---|
| 22 | else
|
---|
| 23 | {
|
---|
| 24 | $input = '/29';
|
---|
| 25 | }
|
---|
| 26 |
|
---|
| 27 | if(substr($input, 1, 2) > 32 || substr($input, 1, 2) < 24)
|
---|
| 28 | {
|
---|
| 29 | printAndExit("'$input' is an invalid netmask.");
|
---|
| 30 | }
|
---|
| 31 | else
|
---|
| 32 | { $input = substr($input, 1, 2);
|
---|
| 33 | my $ltinput = $input -1;
|
---|
| 34 | my $gtinput = $input +1;
|
---|
| 35 |
|
---|
| 36 | print qq( <div class="center">
|
---|
| 37 | <table align="center" cellspacing="3" cellpadding="3"><tr>
|
---|
| 38 | <td class="heading" align="center"> Results for /$ltinput</td><td class="heading" align="center"> Results for /$input</td><td class="heading" align="center"> Results for /$gtinput</td></tr>
|
---|
| 39 | );
|
---|
| 40 |
|
---|
| 41 | if( $input =~ m|.*24.*|){
|
---|
| 42 | $input = 256;
|
---|
| 43 | $ltinput =128;
|
---|
| 44 | undef($gtinput);
|
---|
| 45 | }
|
---|
| 46 | elsif( $input =~ m|.*25.*|){
|
---|
| 47 | $input = 128;
|
---|
| 48 | $ltinput = 64;
|
---|
| 49 | $gtinput = 256;
|
---|
| 50 | }
|
---|
| 51 | elsif( $input =~ m|.*26.*|){
|
---|
| 52 | $input = 64;
|
---|
| 53 | $ltinput = 32;
|
---|
| 54 | $gtinput = 128;
|
---|
| 55 | }
|
---|
| 56 | elsif( $input =~ m|.*27.*|){
|
---|
| 57 | $input = 32;
|
---|
| 58 | $ltinput = 16;
|
---|
| 59 | $gtinput = 64;
|
---|
| 60 | }
|
---|
| 61 | elsif( $input =~ m|.*28.*|){
|
---|
| 62 | $input = 16;
|
---|
| 63 | $ltinput = 8;
|
---|
| 64 | $gtinput = 32;
|
---|
| 65 | }
|
---|
| 66 | elsif( $input =~ m|.*29.*|){
|
---|
| 67 | $input = 8;
|
---|
| 68 | $ltinput = 4;
|
---|
| 69 | $gtinput = 16;
|
---|
| 70 | }
|
---|
| 71 | elsif( $input =~ m|.*30.*|){
|
---|
| 72 | $input = 4;
|
---|
| 73 | $ltinput = 2;
|
---|
| 74 | $gtinput = 8;
|
---|
| 75 | }
|
---|
| 76 | elsif( $input =~ m|.*31.*|){
|
---|
| 77 | $input = 2;
|
---|
| 78 | $ltinput = 1;
|
---|
| 79 | $gtinput = 4;
|
---|
| 80 | }
|
---|
| 81 | elsif( $input =~ m|.*32.*|){
|
---|
| 82 | $input = 1;
|
---|
| 83 | $gtinput = 2;
|
---|
| 84 | undef($ltinput);
|
---|
| 85 | }
|
---|
| 86 |
|
---|
| 87 | my ($center, $left, $right) = ('','','');
|
---|
| 88 | my $subnet;
|
---|
| 89 |
|
---|
| 90 | #add the subnet masks
|
---|
| 91 |
|
---|
| 92 | if($input)
|
---|
| 93 | {
|
---|
| 94 | $subnet = 256 - $input;
|
---|
| 95 | $center = qq(<div style="background-color: #00ff00">255.255.255.$subnet </div>);
|
---|
| 96 | }
|
---|
| 97 |
|
---|
| 98 | if($ltinput)
|
---|
| 99 | {
|
---|
| 100 | $subnet = 256 - $ltinput;
|
---|
| 101 | $right = qq(<div style="background-color: #00ff00">255.255.255.$subnet</div>);
|
---|
| 102 | }
|
---|
| 103 | if($gtinput)
|
---|
| 104 | {
|
---|
| 105 | $subnet = 256 - $gtinput;
|
---|
| 106 | $left = qq(<div style="background-color: #00ff00">255.255.255.$subnet</div>);
|
---|
| 107 | }
|
---|
| 108 |
|
---|
| 109 |
|
---|
| 110 | for(my $i = 0; $i < 256; $i++)
|
---|
| 111 | {
|
---|
| 112 | #left display -- one less than requested
|
---|
| 113 | if(defined($gtinput) && $i % $gtinput == 0)
|
---|
| 114 | {
|
---|
| 115 | my $upper = $i + $gtinput -1;
|
---|
| 116 | $left .= "x.x.x.$i - x.x.x.$upper</br>\n";
|
---|
| 117 | }
|
---|
| 118 |
|
---|
| 119 | #center display -- the one requested
|
---|
| 120 | if($i % $input == 0 )
|
---|
| 121 | {
|
---|
| 122 | my $upper = $i + $input - 1;
|
---|
| 123 | $center .= "x.x.x.$i - x.x.x.$upper </br>\n";
|
---|
| 124 | }
|
---|
| 125 |
|
---|
| 126 | #right display -- one more than requested
|
---|
| 127 | if(defined($ltinput) && $i % $ltinput == 0)
|
---|
| 128 | {
|
---|
| 129 | my $upper = $i + $ltinput -1;
|
---|
| 130 | $right .= "x.x.x.$i - x.x.x.$upper </br>\n";
|
---|
| 131 | }
|
---|
| 132 | }
|
---|
| 133 |
|
---|
| 134 | print qq(<tr><td valign="top" >$left</td>
|
---|
| 135 | <td valign="top" bgcolor="#d0e0e0">$center</td>
|
---|
| 136 | <td valign="top" >$right</td></tr>
|
---|
| 137 | );
|
---|
| 138 | print "</table>\n";
|
---|
| 139 |
|
---|
| 140 | print '<input type="button" value="Back" onclick="history.go(-1)" class="heading"></div></body></html>';
|
---|
| 141 |
|
---|
| 142 | }
|
---|
| 143 |
|
---|
| 144 |
|
---|
| 145 | sub parse_post {
|
---|
| 146 | my $buffer;
|
---|
| 147 | if ($ENV{'REQUEST_METHOD'} eq "GET") {
|
---|
| 148 | $buffer=$ENV{'QUERY_STRING'}
|
---|
| 149 | } elsif ($ENV{'REQUEST_METHOD'} eq 'POST' && $ENV{'CONTENT_TYPE'} eq "application/x-www-form-urlencoded") {
|
---|
| 150 | read(STDIN, $buffer, $ENV{CONTENT_LENGTH});
|
---|
| 151 | } else {
|
---|
| 152 | $buffer = $ENV{'QUERY_STRING'};
|
---|
| 153 | $buffer || read(STDIN, $buffer, $ENV{CONTENT_LENGTH});
|
---|
| 154 | }
|
---|
| 155 | my @pairs = split(/&/, $buffer);
|
---|
| 156 | my %webvarLocal;
|
---|
| 157 | foreach my $pair (@pairs) {
|
---|
| 158 | my ($name, $value) = split(/=/, $pair);
|
---|
| 159 | $name =~ tr/+/ /;
|
---|
| 160 | $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
---|
| 161 | $value =~ tr/+/ /;
|
---|
| 162 | $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
---|
| 163 | $value =~ s/\'/\\\'/g;
|
---|
| 164 | $webvarLocal{$name} = $value;
|
---|
| 165 | }
|
---|
| 166 | return %webvarLocal;
|
---|
| 167 | }
|
---|
| 168 | sub printAndExit
|
---|
| 169 | {
|
---|
| 170 | my $errStr = $_[0];
|
---|
| 171 | print qq(
|
---|
| 172 | <center><p class="regular"> $errStr </p>
|
---|
| 173 | <input type="button" value="Back" onclick="history.go(-1)" class="heading">
|
---|
| 174 | </center>
|
---|
| 175 | );
|
---|
| 176 | exit(0);
|
---|
| 177 | }
|
---|