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 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决