| px | top | add code | search | signup | login | help |
<?php
if (!$ip && !$subnet) {
$ip = "128.101.43.101\";
$subnet = \"128.101.43.0/24\";
}
$SUBNETS = array(
1 => \"128 A\",
2 => \"64 A\",
3 => \"32 A\",
4 => \"16 A\",
5 => \"8 A\",
6 => \"4 A\",
7 => \"2 A\",
8 => \"1 A\",
9 => \"128 B\",
10 => \"64 B\",
11 => \"32 B\",
12 => \"16 B\",
13 => \"8 B\",
14 => \"4 B\",
15 => \"2 B\",
16 => \"1 B\",
17 => \"128 C\",
18 => \"64 C\",
19 => \"32 C\",
20 => \"16 C\",
21 => \"8 C\",
22 => \"4 C\",
23 => \"2 C\",
24 => \"1 C\",
25 => \"128 I\",
26 => \"64 I\",
27 => \"32 I\",
28 => \"16 I\",
29 => \"8 I\",
30 => \"4 I\",
31 => \"2 I\",
32 => \"1 I\"
);
function is_match($one,$two) {
if (!strcmp($one,$two)) return true;
return false;
}
function is_valid_ip($ip) {
while(list(,$val) = each($ip)) {
if (!ereg(\"([0-9]+)\",$val) || $val > 255) return false;
}
return true;
}
function is_valid_boundary($ip,$type,$count) {
// classes are obsolete but we can still use it to know where to start.
if (!strcmp($type,\"I\") || $count == 1) return true;
if (!strcmp($type,\"A\") && ($ip[1] != \"0\" || $ip[2] != \"0\" || $ip[3] != \"0\"))
return false;
if (!strcmp($type,\"B\") && ($ip[2] != \"0\" || $ip[3] != \"0\")) return false;
if (!strcmp($type,\"C\") && ($ip[3] != \"0\")) return false;
$A = 0;
$B = 1;
$C = 2;
$good = array(0);
$diff = (256 / $count);
$count = $diff;
$diff = (256 / $diff);
for ($i=$diff;$i<256;$i+=$diff)
$good[] = $i;
//for ($i=0;$i<$count;$i++) echo $good[$i].\"<br>\";
for ($i=0;$i<$count;$i++)
if ($ip[$$type] == $good[$i]) return true;
return false;
}
$CIDR_IP = explode(\".\",$ip);
$CIDR_NET = explode(\".\",$subnet);
$MASK = explode(\"/\",$CIDR_NET[3]);
$CIDR_NET[3] = $MASK[0];
$MASK = $MASK[1];
$FEEDBACK = \"SORRY. IP ($ip) DOES NOT EXIST IN SUBNET ($subnet).\";
while (list($mask,$val) = each($SUBNETS))
if ($mask == $MASK)
break;
$val = explode(\" \",$val);
$TYPE = $val[1];
$COUNT = $val[0];
if (is_valid_ip($CIDR_IP) && is_valid_ip($CIDR_NET) &&
is_valid_boundary($CIDR_NET,$TYPE,$COUNT)) {
if ($TYPE == \"A\") {
for ($i=$CIDR_NET[0];$i<($CIDR_NET[0]+$COUNT);$i++)
if (is_match($CIDR_IP[0],$i)) {
$FEEDBACK = \"IP ($ip) EXISTS IN SUBNET ($subnet).\";
break;
}
} else if ($TYPE == \"B\") {
if (is_match($CIDR_IP[0],$CIDR_NET[0]))
for ($i=$CIDR_NET[1];$i<($CIDR_NET[1]+$COUNT);$i++)
if (is_match($CIDR_IP[1],$i)) {
$FEEDBACK = \"IP ($ip) EXISTS IN SUBNET ($subnet).\";
break;
}
} else if ($TYPE == \"C\") {
if (is_match($CIDR_IP[0],$CIDR_NET[0]))
if (is_match($CIDR_IP[1],$CIDR_NET[1]))
for ($i=$CIDR_NET[2];$i<($CIDR_NET[2]+$COUNT);$i++)
if (is_match($CIDR_IP[2],$i)) {
$FEEDBACK = \"IP ($ip) EXISTS IN SUBNET ($subnet).\";
break;
}
} else if ($TYPE == \"I\") {
if (is_match($CIDR_IP[0],$CIDR_NET[0]))
if (is_match($CIDR_IP[1],$CIDR_NET[1]))
if (is_match($CIDR_IP[2],$CIDR_NET[2]))
for ($i=$CIDR_NET[3];$i<($CIDR_NET[3]+$COUNT);$i++)
if (is_match($CIDR_IP[3],$i)) {
$FEEDBACK = \"IP ($ip) EXISTS IN SUBNET ($subnet).\";
break;
}
}
} else
$FEEDBACK .= \"<BR><BR>INVALID IP OR SUBNET.\";
?>
<?echo $FEEDBACK;?>
<br><br>
<form enctype=\"multipart/form-data\" method=\"post\" action=\"<?echo $PHP_SELF;?>\">
<b>IP Address</b><br>
<input type=\"text\" name=\"ip\" maxlength=\"15\" size=\"20\" value=\"<?if ($ip) echo
$ip;?>\">
<br><br>
<b>Network Address</b><br>
<input type=\"hidden\" name=\"page\" value=\"<?echo $page;?>\">
<input type=\"hidden\" name=\"item\" value=\"<?echo $item;?>\">
<input type=\"text\" name=\"subnet\" maxlength=\"18\" size=\"20\" value=\"<?if ($subnet)
echo $subnet;?>\">
<br><br>
<input type=\"submit\" name=\"action\" value=\"check\">       <input
type=\"reset\" value=\"reset\">
</form>
<br><br>
Comments or questions?
PX is running PHP 5.2.11
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.