大神帮忙看看,PHP禁止某地区的IP访问网站且过滤搜索引擎的蜘蛛

「已注销」 2017-09-17 12:56:37
以下代码是在网上看到的,我想实现的是禁止一个地区的访问,但不阻止搜索引擎蜘蛛,测试了一下没用,大家帮忙看看是哪里出问题了,好像不能获取真实ip

function get_ip_data(){
$ip=file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".get_client_ip());
$ip = json_decode($ip);
if($ip->code){
return false;
}
$data = (array) $ip->data;
if($data['region']=='湖北省' && !isCrawler()){
exit('http://www.lvtao.net');
}
}

function isCrawler() {
$spiderSite= array(
"TencentTraveler",
"Baiduspider+",
"BaiduGame",
"Googlebot",
"msnbot",
"Sosospider+",
"Sogou web spider",
"ia_archiver",
"Yahoo! Slurp",
"YoudaoBot",
"Yahoo Slurp",
"MSNBot",
"Java (Often spam bot)",
"BaiDuSpider",
"Voila",
"Yandex bot",
"BSpider",
"twiceler",
"Sogou Spider",
"Speedy Spider",
"Google AdSense",
"Heritrix",
"Python-urllib",
"Alexa (IA Archiver)",
"Ask",
"Exabot",
"Custo",
"OutfoxBot/YodaoBot",
"yacy",
"SurveyBot",
"legs",
"lwp-trivial",
"Nutch",
"StackRambler",
"The web archive (IA Archiver)",
"Perl tool",
"MJ12bot",
"Netcraft",
"MSIECrawler",
"WGet tools",
"larbin",
"Fish search",
);
if(in_array(strtolower($_SERVER['HTTP_USER_AGENT']),$spiderSite)){
return true;
}else{
return false;
}
}

//取客户端 ip
function get_client_ip()
{
if (isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")){
$realip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}
...全文
432 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-09-17
  • 打赏
  • 举报
回复
好像不行,http://www.wode021.com/beian1.php我放到这里,设置的阻止的地址不管是我现在的省份还是别的省份,都是空白 本地测试127.0.0.1也不行,是不是这个代码的问题,
傲雪星枫 2017-09-17
  • 打赏
  • 举报
回复
你访问的时候不要用localhost,要用ip,或你宽带的ip ipconfig /all
傲雪星枫 2017-09-17
  • 打赏
  • 举报
回复
试试

<?php
function get_ip_data(){    
            $ip=file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".get_client_ip()); 
            $ip = json_decode($ip); 
            if($ip->code){ 
                return false; 
            } 
            $data = (array) $ip->data; 
            print_r($data);
            if($data['region']=='湖北省' && !isCrawler()){ 
                exit('http://www.lvtao.net'); 
            } 
        } 
         
        function isCrawler() { 
                $spiderSite= array( 
                                "TencentTraveler", 
                                "Baiduspider+", 
                                "BaiduGame", 
                                "Googlebot", 
                                "msnbot", 
                                "Sosospider+", 
                                "Sogou web spider", 
                                "ia_archiver", 
                                "Yahoo! Slurp", 
                                "YoudaoBot", 
                                "Yahoo Slurp", 
                                "MSNBot", 
                                "Java (Often spam bot)", 
                                "BaiDuSpider", 
                                "Voila", 
                                "Yandex bot", 
                                "BSpider", 
                                "twiceler", 
                                "Sogou Spider", 
                                "Speedy Spider", 
                                "Google AdSense", 
                                "Heritrix", 
                                "Python-urllib", 
                                "Alexa (IA Archiver)", 
                                "Ask", 
                                "Exabot", 
                                "Custo", 
                                "OutfoxBot/YodaoBot", 
                                "yacy", 
                                "SurveyBot", 
                                "legs", 
                                "lwp-trivial", 
                                "Nutch", 
                                "StackRambler", 
                                "The web archive (IA Archiver)", 
                                "Perl tool", 
                                "MJ12bot", 
                                "Netcraft", 
                                "MSIECrawler", 
                                "WGet tools", 
                                "larbin", 
                                "Fish search", 
                        ); 
                $spiderSite = array_map('strtolower', $spiderSite);
                if(in_array(strtolower($_SERVER['HTTP_USER_AGENT']),$spiderSite)){ 
                    return true; 
                }else{ 
                    return false; 
                } 
        } 
         
        //取客户端 ip 
        function get_client_ip() 
        { 
            if (isset($_SERVER)){ 
                    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ 
                        $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
                    } else if (isset($_SERVER["HTTP_CLIENT_IP"])) { 
                        $realip = $_SERVER["HTTP_CLIENT_IP"]; 
                    } else { 
                        $realip = $_SERVER["REMOTE_ADDR"]; 
                    } 
            } else { 
                    if (getenv("HTTP_X_FORWARDED_FOR")){ 
                        $realip = getenv("HTTP_X_FORWARDED_FOR"); 
                    } else if (getenv("HTTP_CLIENT_IP")) { 
                        $realip = getenv("HTTP_CLIENT_IP"); 
                    } else { 
                        $realip = getenv("REMOTE_ADDR"); 
                    } 
                } 
            return $realip; 
        } 
「已注销」 2017-09-17
  • 打赏
  • 举报
回复
并按1楼修改蜘蛛判断方法,按http://m80.cn/thread-12449-1-1.html这里的应该怎么修改啊,php不懂, 兄弟帮忙测试下谢谢了,为这个问题弄了几天了,没头绪
hongmei85 2017-09-17
  • 打赏
  • 举报
回复
用localhost:8080/ip_test.php这样的地址,会取不到ip 改用202.123.123.123:8080/ip_test.php来浏览, 并按1楼修改蜘蛛判断方法
「已注销」 2017-09-17
  • 打赏
  • 举报
回复
兄弟好像还是不行啊,我放到网站上没反映, 我又看到另一个代码,但也用不了,地址http://m80.cn/thread-12449-1-1.html 帮忙看看是哪里的问题
    <?php
/**
*
* test.php(屏蔽地方IP)
*
* @package          .....
* @author          ....
* @copyright         Copyright (c) 2008-2013  (http://www..com)
* @license         .....
* @version            ICP 4444$
*/
header("Content-type: text/html; charset=utf-8");
$verification = '广东省';//需要屏蔽省份的IP
$ip = $_SERVER['REMOTE_ADDR'];//获取访客IP
$antecedents = $_SERVER['HTTP_REFERER'];//访客来路地址
$result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP数据库来自淘宝。
$address = json_decode($result,true);
//判断访客是否属于广东省,是否来自百度,是否来自谷歌
if($address['data']['region'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){
        sleep(86400);//设置一个999999秒。看他们有没有这么好耐心。
        Header("HTTP/1.1 204 No Content");
        exit;
}
hongmei85 2017-09-17
  • 打赏
  • 举报
回复
$spiderSite都改为小写

if(in_array(strtolower($_SERVER['HTTP_USER_AGENT']),$spiderSite)){ 
                    return true; 
                }else{ 
                    return false; 
                } 
改为

str_replace($spiderSite,'',strtolower($_SERVER['HTTP_USER_AGENT']),$count);
if($count>0){
  return true;
}
else{
  return false;
}

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧