PX : code

ip/subnet verification by Brian Rhodes
Download this code


<?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\"> &nbsp &nbsp &nbsp <input
type=\"reset\" value=\"reset\">
</form>
<br><br>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.