首頁 >後端開發 >php教程 >php中实现IP地址的限制访问_PHP

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

WBOY
WBOY原創
2016-06-01 12:29:581147瀏覽

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")
把禁止列表读到内存中然后一个个比较……



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn