dtlab08822 2013-09-11 05:27
浏览 111
已采纳

给定IP地址和子网,如何使用php计算IP范围

I have the following code snippet and im trying to detect if an IP address falls into a certain range. Most of the time I have the IP address and the subnet but sometimes I just have the IP address only.

<?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>";
}

?>

My question is how do I calculate MaxIP for the IP and Subnet combo?

  • 写回答

2条回答 默认 最新

  • dtnat7146 2013-09-16 10:30
    关注

    The below worked perfectly

    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;
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?