利用PHP(rDNS)判别搜索引擎蜘蛛真假

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

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

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

<?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站长平台自己去找。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注

  1. bao说道:
    Google Chrome Windows 7

    是日志分析吗

    1. jlqwer说道:

      是通过ip反查rdns,除360外,其他搜索引擎蜘蛛的服务器ip好像都有固定格式的rdns,如果rdns和ip相符,就是真的蜘蛛,这也是各搜索引擎官方提供的在验证方式。

  2. wu先生说道:
    Google Chrome Windows 7

    来看大佬。

  3. 演员说道:
    Google Chrome Windows 7

    好多广告

  4. 老董说道:
    Google Chrome Windows 8.1

    朋友 交换链接吗

    1. jlqwer说道:
      Firefox Windows 7

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

  5. 援军说道:
    Google Chrome Windows 10

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

    1. jlqwer说道:

      @[滑稽]