当前位置:Gxlcms > PHP教程 > php中实现IP地址的限制访问_PHP

php中实现IP地址的限制访问_PHP

时间:2021-07-01 10:21:17 帮助过:5人阅读

IP地址

先将你的允许访问ip范围写出来。如果不知道,就要到网上找一个ip表看看

单个 IP:

if ( $REMOTE_ADDR == '12.34.56.78' )
{
//允许访问
}


如果是一组 IP,就要看这些 IP 的范围及是否连续了
连续的 IP 好办一些,不连续的 IP 就得挨个比较,影响速度 。


限制ip的一段源程序:

<%
if($GLOBALS["CanMaskIp"]==1) //封杀IP地址
{
$strSQL="SELECT count(*) FROM MaskIp WHERE '".$GLOBALS["strVisitedIp"]."' BETWEEN SrcIpAddr AND DesIpAddr";
$tmpMaskIp=mysql_fetch_row(mysql_query($strSQL,$GLOBALS["hDatabase"]));
if($tmpMaskIp[0]>0)
{
echo "\n";
echo "\n";
echo "".$GLOBALS["WindowTitle"]."\n";
echo "\n";
echo "\n";
echo "

  

\n";
echo "

  

\n";
echo "

  

\n";
echo "

  

\n";
echo "

嘿嘿,你的IP地址被管理员禁止了哦!!
\n";
echo "
\n";
echo "想想你自已是不是干了什么哈?!\n";
echo "

\n";
echo "\n";
echo "";
mysql_close($GLOBALS["hDatabase"]);
exit();
}
unset($tmpMaskIp);
}
%>

要求建立如下表:

CREATE TABLE MaskIp (
SrcIpAddr varchar(16) NOT NULL default '',
DesIpAddr varchar(16) NOT NULL default '',
PRIMARY KEY (SrcIpAddr)
) TYPE=MyISAM COMMENT='记录封杀IP地址';




function chkip($client_ip,$network_number,$ip_mask)
{
preg_match("/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/",$client_ip,$ipsplit);
preg_match("/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/",$ip_mask,$ipsplit1);
preg_match("/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/",$network_number,$ipsplit2);
if (((integer)$ipsplit[1]&$ipsplit1[1])==$ipsplit2[1])
if (((integer)$ipsplit[2]&$ipsplit1[2])==$ipsplit2[2])
if (((integer)$ipsplit[3]&$ipsplit1[3])==$ipsplit2[3])
if (((integer)$ipsplit[4]&$ipsplit1[4])==$ipsplit2[4])
return true;
return false;
}
?>

函数参数一个是客户端ip,后面是使用网段比较的方式,
将ip地址与掩码做与运算,结果与网段值相同,则在该网段内,返回true。
对于楼主使用的例子,其调用如下
chkip($REMOTE_ADDR,"202.112.96.0","255.255.255.0")
把禁止列表读到内存中然后一个个比较……

人气教程排行