欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-05-14 11:36:21
...
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")
把禁止列表读到内存中然后一个个比较……