u013478024 2023-02-19 18:30 采纳率: 60%
浏览 65
已结题

php判断真假蜘蛛该怎么修改?

php 通过AU判定蜘蛛还是有bug,无法解决虚拟AU伪造蜘蛛访问!现在想改成host 和 ip的方式来判定,会的同学帮我看看该怎么修改!付费悬赏哦!

 function getip()
{
if($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]){
$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
}
elseif($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]){
$ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
}
elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"]){
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
}
elseif (getenv("HTTP_X_FORWARDED_FOR")){
$ip = getenv("HTTP_X_FORWARDED_FOR");
}
elseif (getenv("HTTP_CLIENT_IP")){
$ip = getenv("HTTP_CLIENT_IP");
}
elseif (getenv("REMOTE_ADDR")){
$ip = getenv("REMOTE_ADDR");
}
else{
$ip = "Unknown";
}
return $ip;
}
//蜘蛛判定
$ip=getip();

   $tmp = $_SERVER['HTTP_USER_AGENT'];
 $isspider = 0;
if(strpos($tmp, 'pider') !== false){
    $isspider = 1;
}else if(strpos($tmp, 'Baiduspider') !== false || strpos($tmp, 'Baiduspider') !== false);
 else if(strpos($tmp, '360Spider') !== false || strpos($tmp, '360Spider') !== false);
 else if(strpos($tmp, 'Sougou web spider') !== false || strpos($tmp, 'Sougou web spider') !== false){
    $isspider = 1;
}

思路:
1.指定ip 和 ip段来判定蜘蛛。
2.通过nslookup 或其他方式判定是否为蜘蛛。
通过指定IP或ip段判定可能是最快的,若没匹配结果则通过nslookup获取匹配结果即可!

如果有比nslookup更快的方式可以更改,目的只有一个,快速精准判断真假蜘蛛!

注意:搜狗蜘蛛4.0 已经可以通过 nslookup 来判断
如果能实现AU加要改的判断,实现双判断,这样最好!会的同学快来捡钱了!速度哦!在线等待!

  • 写回答

4条回答 默认 最新

  • 提着裤子去拉屎 2023-02-19 18:38
    关注

    看起来您正在尝试修改 PHP 代码以从基于用户代理的蜘蛛检测切换到基于 IP 和主机名的检测。这是修改代码以实现此目的的一种方法:

    function getip()
    {
        if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } elseif ($_SERVER['HTTP_CLIENT_IP']) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return $ip;
    }
    
    // Spider detection based on IP address and hostname
    $ip = getip();
    $hostname = gethostbyaddr($ip);
    
    $isspider = 0;
    
    // List of known spider IP addresses or IP ranges
    $spider_ips = array(
        '66.249.64.0/19', // Google
        '72.14.192.0/18', // Google
        '209.85.128.0/17', // Google
        '66.102.0.0/20', // Google
        '74.125.0.0/16', // Google
        '64.233.160.0/19', // Google
        '216.239.32.0/19', // Google
        '64.68.90.1', // Bing
        '65.55.208.0/20', // Bing
        '65.54.0.0/16', // Microsoft
        '131.253.24.0/21', // Microsoft
        '157.55.0.0/16', // Microsoft
        '157.56.0.0/14', // Microsoft
        '157.60.0.0/16', // Microsoft
        '207.46.0.0/16', // Microsoft
        '157.52.0.0/16', // Microsoft
        '202.108.249.197', // Baidu
    );
    
    // List of known spider hostnames
    $spider_hosts = array(
        'googlebot.com',
        'google.com',
        'bing.com',
        'msn.com',
        'search.live.com',
        'search.yahoo.com',
        'yandex.com',
        'baidu.com',
    );
    
    // Check if the IP address or hostname matches any known spider IP or hostname
    if (in_array($ip, $spider_ips) || in_array($hostname, $spider_hosts)) {
        $isspider = 1;
    }
    
    // Double-check with user-agent-based spider detection
    $tmp = $_SERVER['HTTP_USER_AGENT'];
    
    if (strpos($tmp, 'pider') !== false) {
        $isspider = 1;
    } else if (strpos($tmp, 'Baiduspider') !== false || strpos($tmp, 'Baiduspider') !== false) {
        $isspider = 1;
    } else if (strpos($tmp, '360Spider') !== false || strpos($tmp, '360Spider') !== false) {
        $isspider = 1;
    } else if (strpos($tmp, 'Sougou web spider') !== false || strpos($tmp, 'Sougou web spider') !== false) {
        $isspider = 1;
    }
    
    
    

    修改后的代码使用getip()获取客户端 IP 地址的函数和gethostbyaddr()获取客户端主机名的函数。然后它将 IP 地址和主机名与已知蜘蛛 IP 地址或范围列表以及已知蜘蛛主机名列表进行比较,以确定请求是否来自蜘蛛。
    有用请采纳~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月19日
  • 已采纳回答 2月19日
  • 创建了问题 2月19日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分