php中禁止ip段访问的方法函数

风清扬斈 14年前 (2007-03-21) 信息科技 7860 0
php中禁止ip段访问的方法函数

  
<? 
function check_ip($range,$ip=’’) {
    if($ip == ’’) $ip = getenv("REMOTE_ADDR");
    if ($ip == "127.0.0.1") return 1;
    $result = 1;
    if (ereg("([0-9]+).([0-9]+).([0-9]+).([0-9]+)/([0-9]+)",$range,$regs)) {
        $ipl = ip2long($ip);
        $rangel = ip2long($regs[1] . "." . $regs[2] . "." . $regs[3] . "." . $regs[4]);

        $maskl = 0;

        for ($i = 0; $i< 31; $i++) {
            if ($i < $regs[5]-1) {
                $maskl = $maskl + pow(2,(30-$i));
            }
        }

        if (($maskl & $rangel) == ($maskl & $ipl)) {
            return 1;
        } else {
            return 0;
        }
    } else {

        $maskocts = split(".",$range);
        $ipocts = split(".",$ip);
        for ($i=0; $i<4; $i++) {
            if (ereg("[([0-9]+)-([0-9]+)]",$maskocts[$i],$regs)) {
                if ( ($ipocts[$i] > $regs[2]) || ($ipocts[$i] < $regs[1])) {
                    $result = 0;
                }
            }
            else
            {
                if ($maskocts[$i] <> $ipocts[$i]) {
                    $result = 0;
                }
            }
        }
    }
    return $result;
}

function auth_ip(){
    $result = 0;
    $null_check = 1;

    $path = "ip.cf"; //ip限制配置文件,每行的格式为
    /*
    xxx.xxx.xxx.xxx 比如 127.0.0.2
    xxx.xxx.xxx.[yyy-zzz] 比如 1270.0.0.[2-23]
    xxx.xxx.xxx.xxx/nn 比如 127.0.0.0/24
    */
    $fg=@fopen($path,"r");

    while($line=@fgets($fg,1024)){
        $line = trim($line);
        $line=ereg_replace("#.*",",$line);
        if ($line != "){
            $null_check = 0;
            if (check_ip($line)) {
                fclose($fg);
                return 1;
            }
        }
    }
    @fclose($fg);
    if ($null_check == 1) return 1;
    return $result;
}
?> 
  

  php中限制ip段访问 
在应用中用到写下的,如果大家有更好的写法,放出来一同分享!谢谢!! 
<?php 
$ userip = $ REMOTE_ADDR; //获得用户ip 
$ userips = explode(".", $ userip);把获得的ip切开成数组 

$ dataip = $ arr[ipt];//数据库中已定起始ip 
$ dataips = explode(".", $ dataip);//把数据库中的限定的起始ip切开成数组 

$ dataipw = $ arr[ipw];数据库中已定结速ip 
$ dataipws = explode(".", $ dataipw);////把数据库中的限定的结束ip切开成数组 


//比较ip的每一段 
if ($ userips[0] == $ dataips[0] and $ userips[1] == $ dataips[1] and $ userips[2] == $ dataips[2] and $ userips[3] >= $ dataips[3] and $ userips[3] <= $ dataipws[3]) 
{echo "继续干想干的事!"; 

else 
{echo "您的ip不符合,你不能**想干的事!"; 
exit; 

?> 


在蓝色经典找到的解答 也很不错: 
代码如下: 
---------------------------- 
<?php 
class IP{ //获取客户IP地址 
function getIpAdr(&$ ip){ 
$ ip1=getenv("HTTP_X_FORWARDED_FOR"); 
$ ip2=getenv("HTTP_CLIENT_IP"); 
$ ip3=getenv("REMOTE_ADDR"); 
if($ ip1&&$ ip1!=’unknow’) 
$ ip=$ ip1; 
else if($ ip2&&$ ip2!=’unknow’) 
$ ip=$ ip2; 
else if($ ip3&&$ ip3!=’unknow’) 
$ ip=$ ip3; 
else 
$ ip=’127.0.0.1’; 


function get_netip($ myip){ //只留客户IP地址的前三位 
$ temp=explode(".",$ myip); 
$ netip.=$ temp[0]; 
$ netip.="."; 
$ netip.=$ temp[1]; 
$ netip.="."; 
$ netip.=$ temp[2]; 
return $ netip; 

$ filename="test.ini"; //定义操作文件 
$ ip_lib=file($ filename); //读取文件数据到数组中 
$ allow=0; 
$ IP=new IP; 
$ thisip="; 
$ IP->getIpAdr(&$ thisip); 
$ thenetip=get_netip($ thisip); 

for($ i=0;$ i<count($ ip_lib);$ i++){ 
if(ereg($ thenetip,$ ip_lib[$ i])){ 
$ allow=1; 
break; 



if ($ allow==1) 

echo "验证通过"; 

else { 
echo "<script>location.href=’Error.php’;</script>"; 



?> 

-------------------------- 
代码结束! 

说明: 
待自己建立test.ini文件 
在这个文件里输入允许访问的IP段 
如: 

110.110.110 
111.111.111 
112.112.112 
192.168.1 
192.168.0 
... ... 
等等  
只需要输入前三位就行了 

地址:http://www.blueidea.com/bbs/NewsDetail.asp?id=2364567 


ASP的: 
原地址:http://www.emagister.cn/cursos-asp%E9%99%90%E5%88%B6ip%E8%AE%BF%E9%97%AE-simcour-2194415.htm 



<% 
’’获取访问者的地址 
ip=Request.ServerVariables("REMOTE_ADDR") 
’’允许的IP地址段为10.0.0.0~10.68.63.255 
allowip1="10.0.0.0" 
allowip2="10.68.10.71" 
response.write checkip(ip,allowip1,allowip2) 
function checkip(ip,allowip1,allowip2) 
dim check(4) 
checkip=false 
ipstr=split(ip,".") 
allow1=split(allowip1,".") 
allow2=split(allowip2,".") 
if cint(allow1(0))>cint(allow2(0)) then ’’判断IP地址段是否合法 
response.write "禁止访问" 
exit function 
end if 
for i=0 to ubound(ipstr) 
if cint(allow1(i))<cint(allow2(i)) then 
if cint(allow1(i))=cint(ipstr(i)) then 
check(i)=true 
checkip=true 
exit for 
else 
if cint(ipstr(i))<cint(allow2(i)) then 
check(i)=true 
checkip=true 
exit for 
else 
if cint(ipstr(i))>cint(allow2(i)) then 
check(i)=false 
checkip=false 
exit for 
else 
check(i)=true 
checkip=true 
end if 
end if 
end if 
else 
if cint(allow1(i))>cint(ipstr(i)) or cint(allow1(i))<cint(ipstr(i)) then 
check(i)=false 
checkip=false 
if i<>ubound(ipstr) then 
exit for 
end if 
else 
check(i)=true 
end if 
end if 
next 
if (check(0)=true and check(1)=true and check(2)=true and check(3)=false) and (cint(allow2(2))>cint(ipstr(2))) then 
checkip=true 
end if 
end function 
%> 


"

相关推荐

  • 网友评论

    • (*)

    最新评论