php编程实现ip地址管理,php中实现IP地址的限制访问_PHP

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")

把禁止列表读到内存中然后一个个比较……

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值