曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6154|回复: 0
打印 上一主题 下一主题

用 curl 模拟在 phpwind7.3.2 里发帖回贴

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-6-8 11:45:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这篇文章仅作为一个流水帐来记录这次试验的艰苦过程。在这个实验过程中,从知识的空白到试验的成功,耗费了不少心血。其实有些东西,你懂了就真的感觉简单了,如果一开始不懂而独自摸索试验时,那这个历程将是很痛苦的,因为你需要去掌握一些你原先没学习过的知识,你需要不断的去做实验,也许你还会走许多的弯路,甚至你中途会一度想放弃。但是,事实上只要坚持一下,成功也许就在眼前了;而当你真正实现了你想要实现的功能时,你就会品尝到成功的喜悦。本文没有什么技术含量,下面正文开始:

由于最近喜欢上在一个论坛里灌水,这个论坛有个板块是允许随便灌水赚论坛币然后拿到别的版块去消费的。其中论坛用的是像我们现在用的 phpwind7.3.2。如果老老实实的手工发帖回贴那将是件很痛苦的事,于是我想弄个自动化的工具解决这件事。



查了一下,像这种灌水机用一些像 perl ,php 之类的脚本语言写会很好,但我并没有什么正正经经的学习过这些脚本语言。后来再查了一下,发现在 C 语言下有个开源的 CURL 库是很有用的,这个库的许多函数可以用在像FTP,HTTP一类的网络应用上。一开始,我想用 C 语言来写这么一个工具,于是开始正儿八经的去研究这些库函数起来,但后来发现其实当安装完 curl 库后会带有个 curl 这个命令行的工具--事实上使用这个工具已经不需要在完整的编写程序了。

由于知识的相关联性,在研究这些函数的同时,会遇到像 http 里,html 应用中的相关内容 -- 比如 html 文件的 header 啊,referer啊,cookie啊,表单的属性及其应用等等的相关知识 -- 原来这些知识我以前都从没认真学习过。没办法,暂时又转移到了 html 的复习中去了。在掌握了相关的知识点后,就可以开工了。

工欲善其事必先利其器。这里,有两种工具会帮助你更快的玩成任务。一个是 WskExpert ,一个是 httpwatch ,推荐后者(当然你也自己也可以查看页面源代码得到这些参数),它像插件一样结合在 IE 里,可以截获许多有用的记录,如 POST 和 GET 的等等内容。这个东西是 widnows 里的工具。我喜欢 linux ,但我也不会盲目的去排斥 windows ,操作系统也只是方便人工作的一个程序工具而已,所以我在 linux 里面还虚拟了个 XP 。

首先,想在论坛里灌水,登录是必须的,除非论坛设置游客也可以回复,但是这种回复不会有什么论坛币,呵呵。这里,我们使用 curl 来模拟论坛的登录,命令如下
curl -A "Mozilla/4.0" -d "foward=&jumpurl=http://bbs.xxx.com/index.php&step=2&lgt=0&pwuser=x-beyes&pwpwd=888888&question=0&customquest=&answer=&hideid=1&cktime=31536000" -D bbscookie.txt -o temp.htm http://bbs.xxx.com/login.php

在上面的命令中,参数 -A 是让程序模拟浏览器,我这里模拟 IE ,其实不模拟也不要紧。-d 参数引号里的长传内容是要 POST 出去的数据,里面就是相应登录页面的表单内容。这里就不一一详细阐述,因为都是登录页面表单中一一相对的东西。-D 参数是 dump 出相关的 cookies 信息,因为像论坛这种网站是时刻需要 cookies 验证的,这在后面的命令中会用到。-o temp.htm ,这个可以不要,这里使用上是因为你可以通过它观察到你命令的执行结果(直接打开 temp.html 网页查看即可)。

没什么问题的话,接下来就要进行回贴了
curl -d "atc_usesign=1&atc_convert=1&atc_money=0&atc_credittype=money&atc_rvrc=0&atc_enhidetype=money&atc_title=Re%3A%E4%B8%87%E4%B8%88%E6%B0%B4%E6%A5%BC%E5%B9%B3%E5%9C%B0%E8%B5%B7&atc_autourl=1&atc_content=888889999999999999&step=2&action=reply&fid=141&tid=8139&verify=1054bc2d&atc_desc1=&attachment_1=&att_special1=0&att_ctype1=money&atc_needrvrc1=0" -b bbscookie.txt -o temp.htm http://bbs.xxx.com/post.php

在上面的命令中,一样的,-d 参数后面的引号里的内容其实就是必须 POST 这些数据到服务器里的(这些数据同样通过 httpwatch 这个工具查看出来,当然是可以查看网页源码得到)。在这里,我们使用到了前面 dump 下来的 cookie 信息文件 bbscookie.txt ,而 -b 参数就是用来使用这个文件,意思就是,我在回贴时需要用到此 cookie 。注意一点,在双引号的内容里,verify=1054bc2d 这个属性是每个回贴页面所带有的随机 hash 值,如果你没有指定这个值或者写错了(这里,我当时是用查看源码的方式,由于粗心弄错了这里,一度造成了很大的苦恼)系统就会提示非法请求,请返回。

很简单吧,就这俩行命令便可以实现回贴了。但正是这么一个简单的过程,由于没有相关知识的准备以及摸索试验耗费了我1天多将近2天的时间。

如果要实现自动发帖回贴功能,就简单的写个脚本来实现,下面是脚本的源码:
#!/bin/bash

COUNT=1

while [ "$COUNT" -le 88888 ]
do
     curl -d "atc_usesign=1&atc_convert=1&atc_money=0&atc_credittype=money&atc_rvrc=0&atc_enhidetype=money&atc_title=Re%3A%E4%B8%87%E4%B8%88%E6%B0%B4%E6%A5%BC%E5%B9%B3%E5%9C%B0%E8%B5%B7&atc_autourl=1&atc_content=888889999999999999&step=2&action=reply&fid=141&tid=8139&verify=1054bc2d&atc_desc1=&attachment_1=&att_special1=0&att_ctype1=money&atc_needrvrc1=0" -b bbscookie.txt -o temp.htm http://bbs.xxx.com/post.php

    sleep 10

 curl -d "atc_usesign=1&atc_convert=1&atc_money=0&atc_credittype=money&atc_rvrc=0&atc_enhidetype=money&atc_title=Re%3A%E4%B8%87%E4%B8%88%E6%B0%B4%E6%A5%BC%E5%B9%B3%E5%9C%B0%E8%B5%B7&atc_autourl=1&atc_content=8888888888888&step=2&action=reply&fid=141&tid=8139&verify=1054bc2d&atc_desc1=&attachment_1=&att_special1=0&att_ctype1=money&atc_needrvrc1=0" -b bbscookie.txt -o temp.htm http://bbs.xxx.com/post.php

    COUNT=$((COUNT+1))

    sleep 10
done

    exit 0
由于那个论坛的限制,每次不能发同样内容的帖子,而且有灌水时间的限制,我这里就把时间设置为每隔 10 秒发一帖。脚本运行截图:



这个脚本并不完整,没有设置登录。

最后,当你看完此文,请不要拿我的论坛做试验,谢谢了,呵呵。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 07:50 , Processed in 0.067526 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表