头像

jlqwer

这让人揪心的代码

  3月前  •    WEB, 代码, 笔记  •    , ,   •    375  •    6

仅仅通过UA来判断来访者是不是蜘蛛肯定是不行的,那只是请求中的一个字段而已,想填写什么都行,从国内的几个搜索引擎来说,只有360把自家蜘蛛服务器的ip地址段公布了出来,其他并不提供自家服务器的IP,不过都提供了另一个方法,那就是用rDNS来验证。

PHP有个函数,可以通过IP来反查域名,gethostbyaddr($ip) ,如果没有查到对应的域名就会返回输入的参数,也就是我们提供的IP;

并且,蜘蛛IP的rDNS都是有规则的,所以可以有以下代码:

PHP<?php
$ua="Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)";
$ip="220.181.108.103";
function getrdns($ip)
{
        return gethostbyaddr($ip);
}
function reip($ip)
{
        return str_replace(".","-",$ip);
}
function chekrdns($ua,$ip)
{
        if(stripos($ua,"Baiduspider")!==false)
        {
                return getrdns($ip)==("baiduspider-".reip($ip).".crawl.baidu.com");
        }
        else if(stripos($ua,"Sogou web spider")!==false)
        {
                return getrdns($ip)==("sogouspider-".reip($ip).".crawl.sogou.com");
        }
        else if(stripos($ua,"Googlebot")!==false)
        {
                return getrdns($ip)==("crawl-".reip($ip).".googlebot.com");
        }
        else if(stripos($ua,"bingbot")!==false)
        {
                return getrdns($ip)==("msnbot-".reip($ip).".search.msn.com");
        }
        else if(stripos($ua,"Mediapartners")!==false)
        {
                return getrdns($ip)==("rate-limited-proxy-".reip($ip).".google.com");
        }
        else
        {
                return false;
        }
}
echo chekrdns($ua,$ip);
?> 

我这里写了百度,搜狗,必应,谷歌和谷歌ads的判别(IP和UA自行获取),360并没有特定的rDNS(查了一下都是什么什么宽带),不过可以直接通过IP段判定,可以到360站长平台自己去找。

上一篇:
下一篇:

 评论


 已有6条评论

  1. wu先生 潜水 Windows 7 | 谷歌浏览器 70.0.3538.77 4周前

    来看大佬。

  2. 演员 潜水 Windows 7 | 谷歌浏览器 63.0.3239.132 2月前

    好多广告

  3. 老董 潜水 Windows 8.1 | 谷歌浏览器 63.0.3239.132 2月前

    朋友 交换链接吗

    • jlqwer 活跃 Windows 7 | 火狐浏览器 52.0 2月前

      老董可以看下这里https://www.imlhx.com/friends.html

  4. 援军 冒泡 Windows 10 | 谷歌浏览器 70.0.3538.110 2月前

    确认了,是拍黄片大佬! 话说竟然还有反查函数真的惊了_(:3」∠)_

    • jlqwer 活跃 Linux | MIUI浏览器 10.4.0 2月前