45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:怎么样限制IP访问的思路和PHP代码?

怎么样限制IP访问的思路和PHP代码?

2016-08-31 05:58:09 来源:www.45fan.com 【

怎么样限制IP访问的思路和PHP代码?

那天写自己的网站,想到要有关于限制IP的功能,至少要包括能够在后台设置要限制的IP,还有,能够对IP段进行限制,比如 192.168.0.* 一样的就能够限制整个段,左思右想,用了好几个if判断才解决,把简单的代码如下:(程序中使用了phplib中的db类)

<?php

/*********************************************

*文件:limitip.php

*用途:IP限制程序

*版本:v1.0

*日期:2005-1-7 12:34

*作者:heiyeluren (heiyeluren@163.com)

*版权:http://www.unixsky.net

*********************************************/

error_reporting(7);

session_start();

// 发送字符头信息

if ($headercharset)

header("Content-Type:text/html; charset=gb2312");

// 加载公共文件

require_once("config.php");

require_once("global.php");

require_once("db_mysql.php");

/***************** 进行客户端能否访问本网站校验 ************/

// 获取客户端IP

if(getenv('HTTP_CLIENT_IP')) {

$client_ip = getenv('HTTP_CLIENT_IP');

} elseif(getenv('HTTP_X_FORWARDED_FOR')) {

$client_ip = getenv('HTTP_X_FORWARDED_FOR');

} elseif(getenv('REMOTE_ADDR')) {

$client_ip = getenv('REMOTE_ADDR');

} else {

$client_ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];

}

// 分解客户端IP

$cip = explode(".", $client_ip);

// 连接数据库

$db = new DB_Sql();

$err = $db->connect();

/* 限制远程IP访问, PS: 这段代码真晕,呵呵,用了8个if, -_-# */

// 从数据库中提取存储的要限制的IP地址

$query_str = "SELECT limit_ip FROM us_limitip";

$db->query($query_str);

// 把结果循环提取,一个个进行校验

while ($db->next_record())

{

$limit_ip = $db->f("limit_ip");

$lip = explode(".", $limit_ip);

// 如果限制IP的第一个是*或者是0的话就跳到错误页

if (($lip[0]=='*') || ($lip[0]=='0'))

header("Location:../error.php?errid=300");

// 如果刚好客户端IP等于我们限制IP就跳到错误页

if ($client_ip==$limit_ip)

header("Location:../error.php?errid=300");

// 如果第一组IP一致进行第二组IP的匹配

if ($cip[0] == $lip[0])

{

// 如果第二组限制IP是*就跳到错误页

if ($lip[1]=='*')

header("Location:../error.php?errid=300");

// 第二组IP匹配就进行第三组IP匹配

if ($cip[1]==$lip[1])

{

// 如果第三组限制字符是*就跳到错误页

if ($lip[2]=='*')

header("Location:../error.php?errid=300");

// 如果第三组IP匹配就跳到第三组校验

if ($cip[2]==$lip[2])

{

// 如果第四组限制IP是*或0就跳到错误页

if (($lip[3]=='*') || ($lip[3]=='0'))

header("Location:../error.php?errid=300");

}

}

}

}

// 释放数据库查询结果

$db->free();

/****************** IP校验结束 ******************/

?>

代码只是我初步的一个想法,肯定有不足,如果高手有更好建议请不吝赐教!

 

本文地址:http://www.45fan.com/a/question/70023.html
Tags: 访问 限制 思路
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部