快两年没动代码了,最近自己弄了一个站玩。
有些资料老被火车头拖来拖去的。
求一个完整的防火车头采集的功能模块。
自己弄了半天 思路是这样的比如在某一个时间段ip多次请求 就把该ip禁止掉,没搞好
如有需要我可以贴出我写的整个代码流程。

解决方案 »

  1.   


    <?php
    $ipLog='ipLogFile.txt'; // Your logfiles name here
    $timeout='1'; // How many hours to block IP
    $goHere='Allowed.html'; // Allowed pages name here$register_globals = (bool) ini_get('register_gobals');
    if ($register_globals) $vis_ip = getenv(REMOTE_ADDR);
    else $vis_ip = $_SERVER['REMOTE_ADDR'];
    function recordData($vis_ip,$ipLog,$goHere)

        $log=fopen("$ipLog", "a+"); 
        fputs ($log,$vis_ip."][".time()."\n"); 
        fclose($log); 
     
        // The below header function was causing errors in apache 
        //Header ("Location: $goHere"); exit(0);  
        /*echo "<script>location.replace('$goHere')</script>"; exit(0);*/

    function checkLog($vis_ip,$ipLog,$timeout) 
    {
        global $valid; $ip=$vis_ip;
        $data=file("$ipLog"); $now=time();    foreach ($data as $record) 
        {
            $subdata=explode("][",$record);
            if ($now < ($subdata[1]+3600*$timeout) && $ip == $subdata[0]) 
            {
                $valid=0;
    echo "You have been banned from accessing this page. Try again in $timeout hours.";
    exit;
                break;
            }
        }
    } checkLog($vis_ip,$ipLog,$timeout);
    if ($valid!="0") recordData($vis_ip,$ipLog,$goHere); ?>
      

  2.   


    这个功能很好做, 封一个函数, 每个页面顶部包含一下就行了.这个函数干什么呢?$_SERVER得到IP, 然后memcache原子加法给它计数+1, 如果超过10就header个403.为什么用memcache呢? 因为它自身就是支持了生命期控制, 比如设置一个20秒的生命期,100次访问限制。效率高,还简单,唯一的问题是memcached实现造成的,就是你原子更新一次数值,它的生命期就又满了,这可能造成一个悲剧的现象,就是用户保证每20秒内都有访问,但频率很低,最终就被403了,可以适当的缩短生命期,比如10秒来减小这个问题带来的影响。
      

  3.   

    存文件也行,一个Ip一个文件,按照ipv4的4字节建多级目录,存储的内容是序列化一个数组,数组的元素一个是首次访问时间,另一个是从首次访问以来的计数,这样控制很简单。
      

  4.   

    我这技术很有限  自学的 搞搞输出,简单的调用能做吧!   后来工作也没往这方面发展,纯兴趣流吧!  有段时间没来csdn  
    是否能帖一段代码 供参考下?
      

  5.   

    是吗?局域网中无论多少机器,面向公网的只有一个ip(路由器出口ip)
      

  6.   

    使用 session 或 cookie token (以下简称键)再结合 IP在指定的时间间隔中,自同一 ip 第二次访问起,检查键是否存在
    如不存在则视为非法入侵
    如存在(采集程序也会模拟键机制),记录和检查请求中的内容唯一键是否呈现列表页的排序规则
    如有 3 个以上符合,则视为非法入侵
      

  7.   

    对,反作弊策略必须是综合考虑的,逐渐修正的,一步到位不现实。基于IP的就像唠叨提到的,NAT背后的客户端仅仅使用几个出口IP,尤其是学校与大型企业,很容易误杀。这群用户的特点是这样的:1,IP相同,访问频繁。
    2,COOKIE不同。针对这种正常用户,应该设计白名单,也就是很普遍的思想,黑中有白,白中有黑。坏人用IP限制,好人用SESSION放,就这么简单,其他更多复杂的判定可以自己考虑加进去,比如注册时间久,活跃的老用户,允许他频率稍高一些。登录用户比未登录用户要稍高一些。就说你的,说实话COOKIE这个东西不可信,但可以拿来减少误杀也不错了。IP频率超出限制,则检查SESSION,根据SESSION里记录的访问频率和访问记录放行,但你要知道坏人借助你这个软弱的判定,就会不提交COOKIE,所以我说SESSION里记录“访问记录”也很重要。误杀再所难免,绝大多数时候需要人工封号与解封,需要借助COOKIE和SESSION追踪更多的用户行为,比如用JS在页面里定时AJAX提交访问记录,鼠标轨迹,当然有COOKI UID标记用户唯一身份,单纯依赖服务端判定太难了,一会就把用户赶走了。
      

  8.   

    爬虫能进你的网站理论上都是可以采集的,只是采集的难易程度罢了 ,比如内容在其他地方也能采集到相似的,没必要花很多时间去采集一个很麻烦的网站。我说的情况是相对的!
    我模拟没一个爬虫一个ip  每个ip在一分钟之内访问超过10个页面就封ip  正常情况下爬虫没这么勤快的。我的内容本身的特点相当于一行一个页面 一般采集的人会访问上千个页面。所以用工具还不如人工复制,真人工复制的话,你懂的   我没办法做到完全屏蔽的 ,除非我让我网站打不开 你就是神也没办法 哈哈!
      

  9.   

    你自己要是写一个采集模块,足够多的ip  没采集n个页面就自动切换ip,或者采集比如10个页面 自动停止一分钟如此循环下去 几个小时就行了,也是可行的   我上面也说了 可采集只是难易程度罢了。正常情况下 没人会这么做!