source: branches/stable/cgi-bin/snCalc.cgi@ 333

Last change on this file since 333 was 333, checked in by Kris Deugau, 18 years ago

/branches/stable

snCalc.cgi seems to have been mildly broken at some point. Fixed.

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