如何写自动灌水脚本

by admin

如何写一个灌水机?

摘要:本文介绍了利用Wget在Linux环境中写灌水机的大致方法。

常在论坛灌水的人都想快速而省力地增加自己的帖数,这就是为什么很多人想要一个灌水机的原因。其实,灌水机的作用远不止与此,你可以稍加修改让它可以进行批量操作(例如版主发米);还可以自动顶帖,让你的帖子常居首页;还可以自动抢沙发……总之,只要是体力活儿,它都可以干。

如果你是Windows的用户,那对不起了,你可以根据本文来研究移植到Windows下的方法,但我通常不会回答任何关于这方面的询问。如果你是Linux用户,那么恭喜你,我们有共同学习研究的机会,我很乐意与你一起研究本文所讲的方法。

下面开始正题:

需要工具:

Firefox

–需要插件: Live HTTP headers, Export Cookies(Firefox 3用户需要), Firebug(非必要)

Wget:一般Linux默认都会安装的

就这么多,先说一下灌水机的原理。灌水机就是不借助浏览器发送一个包含数据的HTTP请求,从而达到自动发帖的目的。很多人喜欢用Perl写灌水机,因为Perl能很容易地发送HTTP请求。但既然有现成的Wget可以实现发送HTTP请求,为什么还要reinvent the wheel呢?

现看看Wget能干什么:运行wget –help命令,你将会看到如下部分内容:

$wget –help
GNU Wget 1.10.2, a non-interactive network retriever.
Usage: wget [OPTION]… [URL]…

Mandatory arguments to long options are mandatory for short options too.

HTTP options:
–http-user=USER        set http user to USER.
–http-password=PASS    set http password to PASS.
–no-cache              disallow server-cached data.
-E,  –html-extension        save HTML documents with `.html’ extension.
–ignore-length         ignore `Content-Length’ header field.
–header=STRING         insert STRING among the headers.
–proxy-user=USER       set USER as proxy username.
–proxy-password=PASS   set PASS as proxy password.
–referer=URL           include `Referer: URL’ header in HTTP request.
–save-headers          save the HTTP headers to file.
-U,  –user-agent=AGENT      identify as AGENT instead of Wget/VERSION.
–no-http-keep-alive    disable HTTP keep-alive (persistent connections).
–no-cookies            don’t use cookies.
–load-cookies=FILE     load cookies from FILE before session.
–save-cookies=FILE     save cookies to FILE after session.
–keep-session-cookies  load and save session (non-permanent) cookies.
–post-data=STRING      use the POST method; send STRING as the data.
–post-file=FILE        use the POST method; send contents of FILE.

是不是第一次发现Wget竟然是这么复杂?别紧张,它一点都不复杂,这么多参数说明它功能极其丰富。用红色标出的就是我们可能要用到的参数。

–load-cookie=FILE就是读cookie文件,因为服务器是通过cookie来保持你的会话,所以我们要读取一个cookie文件来造成已经登录的假像。这里的FILE就是要读取的cookie文件,我们可以现用浏览器登录论坛,这样,我们的登录信息就保存在本地的cookie文件了,这个文件就可以拿来被Wget使用了。Firefox 2用户可以在~/.mozilla/firefox/ 下的一个文件夹中找到cookies.txt文件。把它拷贝到灌水机工作的目录就行了。Firefox 3的用户会发现这个目录下没有cookies.txt文件,这是因为Firefox 3不再用文本保存cookie了,而是用一个数据库来保存。这时,我们需要插件Export Cookies来导出cookie.txt文件。

这样,我们就可以使用参数:

–load-cookie=cookies.txt

–post-data=STRING就是发送HTTP请求了,STRING就是要发送的请求,里面同常包括帖子的数据。我怎么知道该发送什么请求?这就需要Firefox的插件Live HTTP headers了,它可以捕获Firefox发送的请求。所以,我们要打开Live HTTP headers,用Firefox发一个帖子,然后就会看到Live HTTP headers把请求捕获了。找到发帖子时的请求,看到如下内容:

Referer: http://xxxx/xxxx?xxxx=xxxx

以及

Content-Length: xxx

xxx=xxx&xxx=xxx&xxx=xxx&xxx=xxx

以及这条请求的地址:

http://xxxx/xxxx?xxxx=xxxx&xxxx=xxxx

用红色标记的就是请求的内容。这样,我们就可以使用参数:

–post-data=”xxx=xxx&xxx=xxx&xxx=xxx&xxx=xxx

一般来说,这些已经够了。然而有些网站(比如cc98)为了防止用灌水机,采取了一些措施。例如检查请求的来源,如发现来源不是本站的请求一律报错。当然,这也难不倒万能的Wget,这次,我们用上了–referer=URL来假冒请求来源。这个URL也会出现在Live HTTP headers抓来的包中,我用蓝色标明了。

这样,就有这个参数:

–referer=”http://xxxx/xxxx?xxxx=xxxx

最后,我们把这几个参数组合在一起,构成一个命令:

wget  –load-cookie=cookies.txt –referer=”http://xxxx/xxxx?xxxx=xxxx “–post-data=”xxx=xxx&xxx=xxx&xxx=xxx&xxx=xxx” ‘http://xxxx/xxxx?xxxx=xxxx&xxxx=xxxx

注意:这是一条命令,中间没有换行。是不是很长的一条命令?在实际中,–post-data里面的内容会更长。因此这个命令还可能更长。

然后测试一下,用浏览器打开下载的文件,看看是不是发帖成功的页面?在上论坛看看,是不是已经发了一帖?如果是的话,恭喜你,你已经学会了如果写灌水机了。如果没成功也不要灰心,慢慢调试,仔细看看是不是什么地方写错了。

以上就是写灌水机的大致方法,这只是完成了一个核心内容。剩下的事情就变得简单了,你可以写一个Shell脚本来控制这个命令。当然,要写一个成熟的灌水机,还有很多需要作的,比如说提供一个友好的用户接口,可以自定义要发帖的版面、帖子、标题、内容等,而不用再改代码。甚至可以做的更完善,比如选择功能:灌水、编辑、抢沙发、发米等等。所说的这些,都可以用一个Shell脚本很好地实现,而不用写复杂的程序。如果你写好了一个,别忘了发我一份哦。

不用担心可行性,因为Wget是很强大的,它足够模拟一个浏览器的行为。不论论坛的维护者采取了多么复杂的防灌水机的措施(验证码除外,但这也极大的降低了用户体验),都是徒劳的。只要能用浏览器发帖,就能用Wget写出灌水机。提到Wget,当然少不了提到另一个同样强大的Curl。他们两个不分伯仲,所以,你也完全可以用Curl写出一个灌水机。 我对Curl不是很熟悉,就不展开介绍了。有兴趣的话可以试试它。

Linux还有很多强大而好玩的东西,只要用心,是不难发现它们的。在Linux的世界里,事情总是比你想象的简单很多。