代码改变世界

搜索引擎广告计费系统如何防恶意点击

2010-04-21 09:49  java ee spring  阅读(347)  评论(0编辑  收藏  举报

  你在一些搜索引擎上搜索“传智播客”和“java培训”,就会看到一些广告链接,只要你随手点击一下这些广告链接,就会消耗广告发布商的费用,广告发布商必须为这次点击付出相应的广告费。一些人想通过点击竞争对手在搜索引擎上的广告链接,来达到消耗竞争对手的广告经费和打击竞争对手之目的,这种点击真的能够给竞争对手带来很大的经济损失吗?其实,这样的随手点击对广告发布商根本就造成不了很大的影响,这就好比一个商家在大街上派发宣传单,肯定有很多传单是浪费了,只要不是派单人员把整包宣传单直接扔到垃圾桶,这就在商家接受范围之中,商家最终的广告宣传效果还是能达到其预期目标的。
  有人也许会想到反复点击竞争对手的广告来消耗掉竞争对手的很多广告费用,让竞争对手的广告计划落空!这种想法显然过于简单了,因为这种想法不仅你有,很多人都有过,搜索引擎厂商当然也会考虑到,并采取了一些技术手段予以防范。即使你采用动态拨号方式上网、不断重新拨号改变IP地址,一台计算机在一天之内对同一个广告链接无论点击多少次,好的搜索引擎后台对此都只收取1或2次的点击费用。
  对Web网站开发技术比较了解的人都应该清楚,搜索引擎后台计费系统之所以能够识别出是否是来自同一台计算机的访问,这依赖的技术必然是Cookie,所以,我们只要清除掉浏览器的Cookie,再加上动态拨号改变IP的方式重复搜索某个关键字和点击搜索结果页面中的广告链接,搜索引擎后台计费系统就会把这些广告点击当作是来自多台计算机,就会对每次点击进行计费。如果采用人工方式来重复这些动作,只要坚持不懈,一定能给竞争对手带来较大的广告经济损失,但是,你给竞争对手造成这些损失时,自己也要花费大量的精力,仔细算一笔帐,你就会发现这完全是一种“杀敌三千,自损一万”的玩法,最后的赢家只有搜索引擎厂商。但是,如果有人编写所谓的“搜索引擎广告点击机器人”来重复这些手工操作,将有可能消耗掉商家大量广告费,让商家不敢在搜索引擎上投放广告了,最终对搜索引擎厂商的广告业务带来很大损失,所以,好的搜索引擎的广告计费系统必须能够有效地阻止恶意点击,以便商家可以放心大胆地在其搜索引擎平台上投放广告。
   为了了解各个搜索引擎广告计费系统如何防恶意点击以及评测其防恶意点击的有效性,我对一些搜索引擎的广告计费系统进行了编码分析和测试。通过编写一个“搜索引擎广告点击机器人”和经过大量的测试验证,终于了解了一些知名的搜索引擎的广告计费系统防恶意点击的原理,其中很多时间都花费在了测试和等待结果上,因为搜索引擎后台计费系统并不是在点击发生时立即计费,而是每次查询某个关键字的点击费用时,它只统计1个小时前发生的点击量。为了看到搜索引擎后台计费系统是否对“搜索引擎广告点击机器人”触发的点击进行了计费,我们需要在搜索引擎广告平台上专门购买一些研究用的推广关键字,每次修改广告点击机器人程序和运行后都必须等待1个小时以上才能去验证结果,只有搜索引擎后台计费系统确实扣除了我们这些关键字的广告费后,我们才能确定“搜索引擎广告自动点击机器人”程序确实成功了,并且还必须进行高强度的测试,才能确认这样的“搜索引擎广告点击机器人”是否具有实际的危害性,前前后后的实验测试可能需要花掉好几百元的广告费哟!
  通过“搜索引擎广告点击机器人”的反复测试,我发现一些搜索引擎后台计费系统在防止恶意点击上做得还是非常牛x的,即使使用“搜索引擎广告点击机器人”这样的自动化工具,也无法真正有效的消耗掉足以让商家心痛的广告费,因为大多数搜索引擎后台计费系统并不是实时计费的,它对某个关键字在单位时间内发生的点击总量有限制,它会统计某个关键字在上一个时间段内发生的点击总量,如果这个点击总量很大,远远超出以往的同比时间段的统计数,好的搜索引擎后台计费系统就会按照某种算法将超出的点击量扣除掉。你最终只能调低“搜索引擎广告点击机器人”的点击频率,但是,点击频率调得太低,这个“搜索引擎广告自动点击工具”就没有什么实用价值了,如果点击频率调得太高,就会被搜索引擎后台计费系统认为是恶意点击而作废,白白辛苦了半天!这个点击频率到多少才合适,显然要花费大量时间和拿自己的广告费做试验才能得到。那些好的搜索引擎后台计费系统做得实在太智能了,即使你能同时号召一千个人去点击一些搜索引擎上的某个广告链接,那也是徒劳,因为好的搜索引擎后台计费系统会将此作废!你花再大的精力也不可能写出具有实际意义的“搜索引擎广告点击机器人”。
  对于那些好的搜索引擎后台计费系统,你不再担心在其上投放广告会招致大量恶意点击,而是可以放心大胆地实施你公司的广告推广计划。虽然搜索引擎广告自动点击工具的实用性不是很强,但是研究和编写“搜索引擎广告点击机器人”程序,非常有挑战和趣味性,其中涉及了大量的技术细节和技巧,下面我将与大家共享这些技术细节和技巧:
   (1)使用HttpClient开源工具包访问某个关键字在某个搜索引擎上的搜索URL,例如,http://www.itcastsoso.com/s?wd=%B4%AB%D6%C7%B2%A5%BF%CD
   (2)使用HttpParser开源工具包分析搜索引擎返回的搜索结果页面,从中分别提取出左侧和中间的广告链接。
   (3)使用HttpClient开源工具包访问提取出的广告链接,并将访问到的各个链接的结果内容保存为html文件,以便确认确实得到了广告链接的网页。这里要共享第(1)步的Cookie信息和第一步的url地址作为referer,通常才能被搜索引擎后台计费系统认为是同一个浏览器的访问。
   (4)重复1、2、3步骤,而不能直接重复访问第3步的地址,因为好的搜索引擎每次都会改变某个关键字的广告链接的url地址,也就是说某个广告链接的地址是一次性的,访问过后就必须重新搜索关键字和在新结果页面中获取新的广告链接地址。
   (5)上面的程序写完了,运行效果从表面上看来非常完美,但是,搜索引擎后台计费系统是否真的为这种模拟点击访问进行了计费呢?你需要在某个搜索引擎上为你的网站购买一些偏门的关键字广告,可以肯定这些偏门的关键字几乎没有人点击,然后运行刚编写的“搜索引擎广告点击机器人”程序,让其点击几次我们的广告链接,过两个小时后去看搜索引擎后台计费系统是否进行了计费。结果发现我们虽然从搜索结果页面中得到了广告链接地址,也访问到了广告链接地址对应的广告页面,但搜索引擎后台计费系统并没有为此计费!如果计费了,这个搜索引擎后台计费系统做得也太烂了,商家绝不能在这样的搜索引擎上投放推广广告。
   (6)接着搬出Http协议监听工具HttpWatch,看访问广告链接地址时,浏览器倒底向服务器传递了什么样的信息,由于这些超链接使用了target="_blank"属性,单击这些超链接总是会打开新窗口,开启的HttpWatch无法监测新窗口的HTTP消息。换用FireFox及FireBug插件进行监测,依然无果!最后只能搬出更专业、更强大的网络监听工具了,找到一个叫EffeTech HTTPSniffer的工具,总算监听到了广告链接地址的HTTP消息,原来浏览器最终访问的广告链接地址并不是在搜索结果页面中的<a href=""/>标签的href属性指定的原始地址,而是在这个地址后面附加了一个特殊信息,例如,网页中的超链接标签的代码为href="http://www.itcastsoso.com/souso.php?url=xxxxxxxxxx" ,而浏览器实际发出去的请求路径为“http://www.itcastsoso.com/souso.php?url=xxxxxxxxx&ck=645.0.125.295.105.383.115.2563”,多了一个ck的参数!这个ck参数是怎么附加上去的呢?
   (7)这一定是我们在浏览器中点击广告链接地址时,触发了javascript函数,javascript函数修改了超链接地址而附加上去的!我们自己的“搜索引擎广告自动点击机器人”程序在访问广告链接地址时,也必须附加上ck=645.0.125.295.105.383.115.2563这个参数,才能模拟出用户点击超链接的效果。ck参数后面的值并不是固定的,而是通过某种算法计算出来的,我们也必须用java程序写出这么一个算法的工具方法吗?还是先去看看这个javascript函数是怎么写的吧!查看搜索引擎搜索结果页面中的javascript源码,这些javascript代码通常都会全部排在一行,太难读了,搜索引擎厂商当然是成心不想让我们读懂啊!没关系,把这些代码拷贝到myeclipse下的js文件中,使用ctl+shift+f进行格式化处理,代码排得整整齐齐了,这种使用工具软件的雕虫小技在关键时刻也能帮上大忙啊!
   (8)大概读懂了其中所有javascript函数的作用和主要代码,对函数内部的细节算法则暂时忽略不计,读人家的代码,一定要分清楚那些是必须了解的,哪些是可以忽略不计的。是将这些javascript函数移植成对应的java代码,还是用java代码来直接调用这些现有的javascript函数呢?后者显然要方便和容易得多。java代码能够调用javascript代码吗?模模糊糊记得java6好像提供了这么一个新功能,赶紧在网上搜索和确认一下,果然可以,打开java6的帮助文档,现学现用java如何调用javascript。然后对关键字搜索结果网页中的javascript代码略作修改,改变成适合java代码调用,主要是原来的javascript中使用了一些变量来记录鼠标按下,鼠标弹起,鼠标点击的坐标和时间,对这些变量设置一些差不多的模拟值即可。
   (9)再次运行修改后的“搜索引擎广告点击机器人”,让其点击几次我们的广告链接,过两个小时后去看搜索引擎后台计费系统是否进行了计费。结果发现我们的程序确实修改了广告链接地址,也访问到了广告链接地址对应的广告页面,但搜索引擎后台计费系统可能还是没有为此计费,郁闷了吧!想放弃,毕竟忙乎了好几天,就这样无果而终吗?不甘心啊,鼓足勇气,继续研究和实验下去,对自己说加油,就当着玩吧!
   (10)再次搬出sniffer,使用搜索引擎搜索我们的推广关键字,并点击其中一个广告超链接,使用sniffer监听整个过程,看浏览器倒底向服务器发出了哪些请求信息,以及每个请求消息的组成格式,发现在搜索引擎上搜索某个关键字时,结果页面中还通过javascript代码隐藏了一个不知道做什么用的<img/>标签,这些标签并不显示真正的图片,而只是引用了搜索引擎服务器端的一个程序而已,这就是搜索引擎在搜索结果页面留下的水印或暗号,必须先有这个<img/>水印访问,后面的点击访问才能有效?不管三七二十一,试试再说!修改“搜索引擎广告点击机器人”程序,让它在发出搜索关键字的访问请求和获得结果页面后,再生成这个<img/>标签的链接地址和发出访问请求。启动修改好的“搜索引擎广告点击机器人”程序,让其点击几次我们的广告链接,过两个小时后再去看搜索引擎后台计费系统是否进行了计费。通常就能看到计费效果了!终于成功了!
 你也许会问,看到的这些计费效果是不是一种巧合,正好外面有些网友通过搜索引擎搜索了这些关键字和点击了广告链接呢?看到的计费效果真的是我们的“搜索引擎广告点击机器人”程序点击出来的吗?这个问题问得好,我们只要通过我们自己站点首页上的站点访问统计工具进行比对,就可以知道结果,如果是正常的浏览器搜索关键字点击过来的,浏览器在解析推广站点首页时还会访问页面上嵌入的站点访问统计工具用的<img>标签,网站首页嵌入的站点访问统计工具就会将访问过程记录下来,而我们的“搜索引擎广告点击机器人”程序并不解析推广站点首页的内容,网站首页的站点访问统计工具就不会对它进行记录。所以,如果搜索引擎后台计费系统进行了计费,而网站首页的站点访问统计工具没有进行记录,这就肯定是“搜索引擎广告点击机器人”点击的结果。为了严谨起见,再使用“搜索引擎广告点击机器人”程序测试几下,发现确实每次都计费了。
   (11) 使用“搜索引擎广告点击机器人”完成几次点击,这仅仅只能说明程序逻辑是通过了,但并不能确认其是否具有实用价值和对竞争对手是否有震慑力,必须让“搜索引擎广告点击机器人”程序在一小时内完成至少50次左右的点击量,才能给竞争对手的广告推广计划造成重创。为了确认这一计划是否可行,首先必须拿自己做试验,豁出去几百元的广告费,让“搜索引擎广告点击机器人”程序以每小时50次的强度进行点击,看几个小时候到底能消耗我们多少广告费用。结果几个小时忙乎下来,搜索引擎后台计费系统后台也就扣除了我们十几次的点击费用。看来即使我们的“搜索引擎广告点击机器人”每一次发出的请求对搜索引擎后台计费系统来说都是有效率,但是这样的请求太有规律或太频繁了,好的搜索引擎后台计费系统后台会在计费统计时将它们作废!
   (12)程序逻辑都写完了,但不能带来很大的实用价值,怎能甘心?再抱着侥幸的心理作点最后的努力吧!首先改造“搜索引擎广告点击机器人”程序的固定点击频率,让“搜索引擎广告点击机器人”程序每次重新拨号和更改IP地址后,只发出一次模拟搜索和点击访问,暂停一个随机的时间段以后,再重新拨号和更改IP地址后,再发出下一次的模拟搜索和点击访问,并且如果一个关键字上有多个推广链接,要让上一次点击的广告链接和下一次点击的广告链接不是同一个链接,而是在多个广告链接之间依次轮循。当这样的过程重复3到7次后,3到7次也是随机计算出来的,再暂停一个很长的随机时间,这样就让“搜索引擎广告点击机器人”程序的每次模拟搜索和点击完全没有什么规律可循了。另外,程序也不能一直只访问某个关键字的广告链接,而是要在几个关键字的搜索页面上的广告链接之间进行交替访问,例如,先访问“传智播客”关键字的所有广告链接中的第一个链接,再访问“java培训”关键字的所有广告链接中的第一个链接,再回来访问“传智播客”关键字的所有广告链接中的第二个链接,再访问“java培训”关键字的所有广告链接中的第二个链接,依此递推......,采用互斥的多线程技术可以很好解决这个问题。
   (13)程序在反复运行过程中会出现各种异常问题,特别是程序出了死锁之类的问题,非常难以找出bug所在。为了方便跟踪错误和排查问题,使用Log4j开源工具包进行日志记录。

     最后的声明:
       本文章及随后发布的源码和视频讲解课程仅用于技术研究与交流,希望广大学习者不要将其用于商业目的,尤其不得用于打击竞争对手和消耗竞争对手的广告经费,否则,由此引发的法律纠纷,本人概不负责!
       另外,本文和随后的视频课程的最终目的是向大家教授网络编程技术和分析解决问题的技巧,只要搜索引擎后台计费系统调整一下广告算法,我们教授的程序就不再起作用了。但是,只要你按照本文介绍的技巧手法和思路步骤进行研究,就一定能写出对应的“搜索引擎广告点击机器人”程序。这好比你学会编写了针对某种病毒的杀毒程序,这个程序对新病毒不会起作用,但只要你研究新病毒后,再按照原来写杀毒程序的方式就一定能写出针对新病毒的杀毒程序。