0

次のコード スニペットがあり、IP アドレスが特定の範囲に該当するかどうかを検出しようとしています。ほとんどの場合、IP アドレスとサブネットを持っていますが、IP アドレスだけしか持っていないこともあります。

<?php

function CalculateRange($IP,$Subnet=""){

    //Calculate subnetmax
    if ($Subnet==""){

    }        

    //Calculate max IP

    return $MaxIP;
}

//--- IP range
$IPRange = array (
    array("address"=>"196.201.26.0","subnet"=>"255.255.252.0"),
    array("address"=>"196.202.43.0","subnet"=>"255.255.0.0"),
    array("address"=>"196.203.44.0","subnet"=>"255.255.128.0"),
);

//Display MaxIP for each IP and Subnet
foreach ($IPRange as $pair) {
    echo "<p>";
    echo "For IP:{$pair['address']} with Subnet:{$pair['subnet']}.";
    echo "MaxIP is ";
    echo CalculateRange($pair['address'],$pair['subnet']);  
    echo "</p>";
}

?>

私の質問は、IP とサブネットの組み合わせの MaxIP をどのように計算するのですか?

4

2 に答える 2

0

以下は完全に機能しました

function isInRange() {

    //--- IP range
    $IPRange = array (
        array("address"=>"197.207.35.238","subnet"=>"255.255.0.0"),
        array("address"=>"41.207.44.232","subnet"=>"255.255.10.0"),
        array("address"=>"40.207.44.250","subnet"=>"255.255.0.0")
    );

    foreach ($IPRange as $pair) {

        //Check if we have subnet mask
        if ($pair['subnet']!='') {
            // simple example
            $bcast = ip2long($_SERVER['REMOTE_ADDR']);
            $smask = ip2long($pair['subnet']);
            $nmask = $bcast & $smask;
            $SourceStartIP = long2ip($nmask);

            if($SourceStartIP==$pair['address']) {
                //This is in range
                return true;
            }

        } else {

            //--- The header matches something in the fixed list
            if ($pair['address'] == $_SERVER['REMOTE_ADDR']) {

                return true;

            }

        }
    }

    return false;

}
于 2013-09-16T10:30:04.610 に答える