告诉僵尸程序与人类游客分开的数据?
我期待推出我自己的简单的网站统计脚本。
就我所知,路上唯一的主要障碍就是让人类的游客远离僵尸。 我想有一个解决scheme,我不需要定期维护(即我不想更新与bot相关的用户代理文本文件)。
有没有这样的开放式服务,就像Akismet的垃圾邮件? 还是有一个PHP项目,致力于识别蜘蛛和机器人,并提供频繁的更新?
澄清:我不想阻止机器人。 我不需要100%水密的结果 。 我只想从我的数据中尽可能地排除。 在知道parsing用户代理是一个选项,但维护模式parsing是很多工作。 我的问题是,是否有任何项目或服务已经这样做。
赏金:我想我会推这个作为这个话题的参考问题。 最好的/最原始的/技术上最可行的贡献将获得赏金金额。
人类和机器人会做类似的事情,但机器人会做人类不会做的事情。 我们试着找出那些东西。 在我们看行为之前,让我们接受RayQuang的评论是有用的。 如果访问者有一个机器人的用户代理string,它可能是一个机器人。 除非他们正在努力打破某些东西,否则我无法想象任何人都会像“UA”一样使用“Google Crawler”(或类似的东西)。 我知道你不想手动更新列表,但是自动拖动这个列表应该是好的,即使在未来的10年里它仍然是陈旧的,这将是有帮助的。
有些人已经提到了Javascript和图片加载,但是Google会做。 我们必须假设现在有几个机器人可以兼得,所以这些不再是人的指标。 但是,机器人仍然会独特地做的是遵循一个“不可见的”链接。 链接到一个非常偷偷摸摸的方式,我不能看到作为一个用户的网页。 如果这样做,我们有一个机器人。
机器人往往会(但并非总是)尊重robots.txt。 用户不关心robots.txt,我们可以假设任何人检索robots.txt是一个机器人。 不过,我们可以更进一步,将一个虚拟CSS页面链接到robots.txt排除的页面。 如果我们正常的CSS被加载,但我们的虚拟CSS不是,它绝对是一个机器人。 你必须build立(可能是一个内存中)的IP加载表,并做一个不包含在匹配,但这应该是一个非常可靠的告诉。
所以,要使用所有这些:通过IP地址维护一个僵尸工具的数据库表,可能有时间戳的限制。 添加隐藏链接后面的任何内容,添加加载“真实”CSS但忽略robots.txt CSS的任何内容。 也许还要添加所有的robots.txt下载程序。 过滤用户代理string作为最后一步,并考虑使用它做一个快速的统计分析,看看这些方法看起来有多强烈,以确定我们所知道的东西是僵尸。
最简单的方法是检查他们的useragent是否包含“bot”或“spider”。
首先,如果你的软件是基于JavaScript的工作,大多数机器人将被自动剥离为机器人,通常,没有Javascript。
尽pipe如此,直接回答你的问题是跟随一个bot列表,并将他们的用户代理添加到过滤列表中。
看看这个bot列表。
这个用户代理列表也相当不错。 只是去掉所有的B,然后你就可以了。
编辑:由eSniff完成的令人惊叹的工作在这里有上面的列表 “ 在一个可以更容易查询和parsing的forms。robotstxt.org/db/all.txt每个新的机器人定义机器人ID:XXX。你应该能够每周下载一次,并将其parsing为脚本可以使用的内容 “就像你可以在他的评论中看到的一样。
希望它有帮助!
考虑一个伪装成CSS背景图像的PHP统计脚本(给出正确的响应头文件 – 至less内容types和caching控制,但写出一个空的图像)。
一些机器人parsingJS,但肯定没有人加载CSS图像。 与JS一样,一个缺陷就是你会用这个排除基于文本的浏览器,但这个数目还不到全球networking人口的1%。 而且,与JS禁用的客户端(手机!)相比,CSS禁用的客户端肯定less了。
为了使它在更高级的机器人(谷歌,雅虎等)未来可能抓取他们的情况下变得更加稳固,禁止在robots.txt
使用CSS图像的path(无论如何,更好的机器人会尊重) 。
我目前使用AWstats和Webalizer来监视Apasce2的日志文件,到目前为止他们一直在做的很好。 如果你希望你可以看看他们的源代码,因为它是一个开源项目。
您可以从http://awstats.sourceforge.net获取源代码,或者查看FAQ http://awstats.sourceforge.net/docs/awstats_faq.html
希望RayQuang帮助
我使用以下为我的统计/计数器应用程序:
<?php function is_bot($user_agent) { return preg_match('/(abot|dbot|ebot|hbot|kbot|lbot|mbot|nbot|obot|pbot|rbot|sbot|tbot|vbot|ybot|zbot|bot\.|bot\/|_bot|\.bot|\/bot|\-bot|\:bot|\(bot|crawl|slurp|spider|seek|accoona|acoon|adressendeutschland|ah\-ha\.com|ahoy|altavista|ananzi|anthill|appie|arachnophilia|arale|araneo|aranha|architext|aretha|arks|asterias|atlocal|atn|atomz|augurfind|backrub|bannana_bot|baypup|bdfetch|big brother|biglotron|bjaaland|blackwidow|blaiz|blog|blo\.|bloodhound|boitho|booch|bradley|butterfly|calif|cassandra|ccubee|cfetch|charlotte|churl|cienciaficcion|cmc|collective|comagent|combine|computingsite|csci|curl|cusco|daumoa|deepindex|delorie|depspid|deweb|die blinde kuh|digger|ditto|dmoz|docomo|download express|dtaagent|dwcp|ebiness|ebingbong|e\-collector|ejupiter|emacs\-w3 search engine|esther|evliya celebi|ezresult|falcon|felix ide|ferret|fetchrover|fido|findlinks|fireball|fish search|fouineur|funnelweb|gazz|gcreep|genieknows|getterroboplus|geturl|glx|goforit|golem|grabber|grapnel|gralon|griffon|gromit|grub|gulliver|hamahakki|harvest|havindex|helix|heritrix|hku www octopus|homerweb|htdig|html index|html_analyzer|htmlgobble|hubater|hyper\-decontextualizer|ia_archiver|ibm_planetwide|ichiro|iconsurf|iltrovatore|image\.kapsi\.net|imagelock|incywincy|indexer|infobee|informant|ingrid|inktomisearch\.com|inspector web|intelliagent|internet shinchakubin|ip3000|iron33|israeli\-search|ivia|jack|jakarta|javabee|jetbot|jumpstation|katipo|kdd\-explorer|kilroy|knowledge|kototoi|kretrieve|labelgrabber|lachesis|larbin|legs|libwww|linkalarm|link validator|linkscan|lockon|lwp|lycos|magpie|mantraagent|mapoftheinternet|marvin\/|mattie|mediafox|mediapartners|mercator|merzscope|microsoft url control|minirank|miva|mj12|mnogosearch|moget|monster|moose|motor|multitext|muncher|muscatferret|mwd\.search|myweb|najdi|nameprotect|nationaldirectory|nazilla|ncsa beta|nec\-meshexplorer|nederland\.zoek|netcarta webmap engine|netmechanic|netresearchserver|netscoop|newscan\-online|nhse|nokia6682\/|nomad|noyona|nutch|nzexplorer|objectssearch|occam|omni|open text|openfind|openintelligencedata|orb search|osis\-project|pack rat|pageboy|pagebull|page_verifier|panscient|parasite|partnersite|patric|pear\.|pegasus|peregrinator|pgp key agent|phantom|phpdig|picosearch|piltdownman|pimptrain|pinpoint|pioneer|piranha|plumtreewebaccessor|pogodak|poirot|pompos|poppelsdorf|poppi|popular iconoclast|psycheclone|publisher|python|rambler|raven search|roach|road runner|roadhouse|robbie|robofox|robozilla|rules|salty|sbider|scooter|scoutjet|scrubby|search\.|searchprocess|semanticdiscovery|senrigan|sg\-scout|shai\'hulud|shark|shopwiki|sidewinder|sift|silk|simmany|site searcher|site valet|sitetech\-rover|skymob\.com|sleek|smartwit|sna\-|snappy|snooper|sohu|speedfind|sphere|sphider|spinner|spyder|steeler\/|suke|suntek|supersnooper|surfnomore|sven|sygol|szukacz|tach black widow|tarantula|templeton|\/teoma|t\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e|theophrastus|titan|titin|tkwww|toutatis|t\-rex|tutorgig|twiceler|twisted|ucsd|udmsearch|url check|updated|vagabondo|valkyrie|verticrawl|victoria|vision\-search|volcano|voyager\/|voyager\-hc|w3c_validator|w3m2|w3mir|walker|wallpaper|wanderer|wauuu|wavefire|web core|web hopper|web wombat|webbandit|webcatcher|webcopy|webfoot|weblayers|weblinker|weblog monitor|webmirror|webmonkey|webquest|webreaper|websitepulse|websnarf|webstolperer|webvac|webwalk|webwatch|webwombat|webzinger|wget|whizbang|whowhere|wild ferret|worldlight|wwwc|wwwster|xenu|xget|xift|xirq|yandex|yanga|yeti|yodao|zao\/|zippp|zyborg|\.\.\.\.)/i', $user_agent); } //example usage if (! is_bot($_SERVER["HTTP_USER_AGENT"])) echo "it's a human hit!"; ?>
我从这里得到了bot列表,然后基本上最小化了function。
检查用户代理将提醒你诚实的机器人,但不是垃圾邮件发送者。
要告诉哪些请求是由不诚实的机器人做出的,您最好的select( 根据这个人的有趣的研究 )是抓住一个Javascript焦点事件 。
如果焦点事件发生,那么这个页面几乎肯定是由一个人装载的。
- 编辑:这是真的,JavaScriptclosures的人不会显示为人类,但这不是一个很大比例的networking用户 。
- Edit2:现在的机器人也可以执行Javascript,至lessGoogle可以 。
而不是试图保持一个不可思议的蜘蛛用户代理列表,我们寻找的东西,表明人类的行为。 原则是我们将会话计数分成两个数字:单页会话的数量和多页会话的数量。 我们删除会话cookie,并使用它来确定多页会话。 我们还删除了一个持续的“机器ID”cookie; 返回的用户(find机器ID cookie)即使只查看该会话中的一个页面,也会被视为多页面会话。 你可能有其他的特征,暗示一个“人”的访问者 – 引用者是谷歌,例如(虽然我相信MSsearch机器人mascarades作为一个标准的UserAgent引用一个现实的关键字来检查该网站不显示不同的内容[到给他们的机器人],这种行为看起来很像一个人!)
当然这是不可信的,特别是如果你有很多人到达并“点击”它不会是一个很好的统计数据,也不是你的cookiesclosures的人(在我们的情况下,他们的优势如果没有启用会话cookie,将无法使用我们的[购物车]网站)。
从我们的一个客户那里得到的数据,我们发现每天的单次计数都是在这个地方 – 每天都有一个数量级的差别, 然而,如果我们每天从多页会话中减去1,000,那么每个订单的每个订单将有4个多页面会话/每个会话的两个会话。 我真的不知道每天有多less个1000多页的会话!
使用javascriptlogging鼠标移动和滚动。 你可以从logging的数据中知道它是人还是机器人。 除非机器人真的非常复杂,模仿人类的鼠标移动。
先决条件 – 推荐人已设置
阿帕奇级别:
LogFormat "%U %{Referer}i %{%Y-%m-%d %H:%M:%S}t" human_log RewriteRule ^/human/(.*) /b.gif [L] SetEnv human_session 0 # using referrer SetEnvIf Referer "^http://yoursite.com/" human_log_session=1 SetEnvIf Request_URI "^/human/(.*).gif$" human_dolog=1 SetEnvIf human_log_session 0 !human_dolog CustomLog logs/human-access_log human_log env=human_dolog
在网页中,embedded一个/human/$hashkey_of_current_url.gif
。
如果是一个机器人,不太可能有引用者设置(这是一个灰色地带)。
如果直接使用浏览器地址栏,它将不包括在内。
在每天结束时, /human-access_log
应该包含实际上是人类页面视图的所有引用。
为了安全起见,来自apache日志的引用者的哈希值应该与图片名称相符
在你的网页上有一个1×1的gif,你跟踪。 如果加载,那么它可能是一个浏览器。 如果没有加载它可能是一个脚本。
=? 对不起,误会了。 您可以尝试我在我的网站上设置的其他选项:创build一个硬/奇怪名称的非链接网页,并login访问此页面。 大多数(如果不是所有的)这个页面的访问者都是机器人,这样你就可以dynamic地创build你的机器人列表。
原来的答案如下(获得负面评价!)
[CAPTCHAS] [1]是唯一可靠的告诉人类机器人的方法。 如果适合你,你可以使用[reCAPTCHA] [2]。
[1]: http : //en.wikipedia.org/wiki/Captcha
[2]: http : //recaptcha.net/
我很惊讶没有人build议实施图灵testing 。 只需要在人的另一端有一个聊天框。
一个程序化的解决scheme不会这样做:看看当PARRY遇到DOCTOR时会发生什么
这两个“人物”都是70年代人工智能研究过程中所写的“喋喋不休”的机器人:看看他们能欺骗一个真实的人,认为自己也是一个人多久。 巴里人性格被模仿为偏执型精神分裂症和医生作为一个刻板的心理治疗师。
这里有更多的背景
您可以排除来自也请求robots.txt
的用户代理的所有请求。 所有行为良好的机器人都会提出这样的要求,但坏机器人将逃脱检测。
你也会有误报的问题 – 作为一个人,在我的浏览器中阅读robots.txt并不是很常见,但我当然可以。 为了避免这些错误地显示为机器人,您可以将一些常见的浏览器用户代理列入白名单,并将其视为永远是人为的。 但是,这只会变成维护浏览器的用户代理列表,而不是一个机器人的列表。
所以,这样做,他们请求,robots.txt方法肯定不会给100%水密的结果,但它可能提供一些启发式,以饲料到一个完整的解决scheme。