火车采集器/Discuz论坛模块
安装了一个Discuz论坛,假设论坛地址为http://www.discuz4.com
在登陆前使用Winsock监视到登陆页面
登陆后返回Winsock获取截取的数据
第四行 浏览齐send发送的数据包如下:
POST /logging.php?action=login HTTP/1.1 (登陆action地址) Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */* Referer: http://www.discuz4.com/logging.php?action=login (登陆来源页面) Accept-Language: zh-cn Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322) Host: www.discuz4.com Content-Length: 215 Connection: Keep-Alive Cache-Control: no-cache Cookie: cdb_sid=eQanty; cdb_cookietime=2592000 formhash=81e752cb&referer=http%3A%2F%2Fwww.discuz4.com%2Findex.php&loginmode= &styleid=&cookietime=2592000&loginfield=username&username=locoy&password=haha&questionid=0&answer=&loginsubmit=%CC%E1+%26nbsp%3B+%BD%BB
前面内容可参考DedeCMS文章模块。
POST /logging.php?action=login 这个是登陆地址后缀
Referer: http://www.discuz4.com/logging.php?action=login 去掉前面的cms/论坛根地址便是来源页面 ,由于没开启验证码,这里留空。
好,来看POST的数据
formhash=81e752cb&referer=http%3A%2F%2Fwww.discuz4.com%2Findex.php&loginmode=&styleid= &cookietime=2592000&loginfield=username&username=locoy&password=haha&questionid=0&answer= &loginsubmit=%CC%E1+%26nbsp%3B+%BD%BB
- formhash=81e752cb //这个便是登陆时产生的随机值,每次都不一样,在登陆前必须获取到它才能通过验证登陆,可以在页面里去找
- referer=http%3A%2F%2Fwww.discuz4.com%2Findex.php 也就是http://www.discuz4.com/index.php 这里进行了urlencode
- loginmode=&styleid= 没选择登陆方式和风格(默认)
- cookietime=2592000 默认是一个月吧。。。
- oginfield=username 使用用户名登陆的而不是用户id号
注意
- username=locoy&password=haha 这就是用户名密码
- &questionid=0&answer=&loginsubmit=%CC%E1+%26nbsp%3B+%BD%BB 问题,答案都没选 loginsubmit表示进行了登陆操作。。
现在退出登陆返回登陆页面http://www.discuz4.com/logging.php?action=login再来看它的源代码。在form 表单里有这么一行
<form method="post" name="login" action="logging.php?action=login"> <input type="hidden" name="formhash" value="81e752cb"> Formhash=81e752cb 这就是要获取的值。。
于是在随机值及ubb Tab页里增加一个标签 [登陆随机值1]
- 页面:当然是登陆时的页面 /logging.php?action=login
- 开始字符串 :type="hidden" name="formhash" value="
- 结束字符串:"> 通过这个限制便能获取到81e752cb 这个随机值
于是登陆POST数据替换掉动态变化的内容便是:
formhash=[登陆随机值1]&referer=[网站地址]%2Findex.php&loginmode=&styleid=&cookietime=2592000 &loginfield=username&username=[用户名]&password=[密码]&questionid=0&answer= &loginsubmit=%CC%E1+%26nbsp%3B+%BD%BB
登陆成功的源代码里找一个成功标志码:欢迎您回来
出现的常见得几种错误标志码:
- 用户名无效,密码错误或安全问题回答错误
- 累计 5 次错误尝试
- 错误:登陆太频繁,服务器认为在暴力破解密码
测试一下,登陆成功。
接下来是刷新列表设置了,找一个有列表的页面。Dz论坛的列表版块一般就在首页。所以刷新列表页面填:/index.php
来源这个哪都能刷,可以不填了,页面区域就在全页面匹配,若只在某一定范围内获取列表,请选取其开始结束字符串 下面到index源代码中找一个版块。这有一个默认论坛,其链接如下:
<a href="forumdisplay.php?fid=1"><span class="bold">默认论坛</span></a>
填到分类列表名称及ID格式里 替换变化的fid值和版块名称即为
<a href="forumdisplay.php?fid=[分类ID]"><span class="bold">[分类名称]</span></a>
以前这里使用正则刷新列表,现在取消了
如果有了论坛,列表形式可能有一点变化,也就可能出现刷不出列表的情况,其实这里只是为了大家选取时更加直观,直接填版块ID的效果是一样的。
UBB选项,这里直接选择系统内置的discuz UBB形式,这里是软件的以后版本可能会考虑独立出来由用户编辑,适应更多的论坛系统及UBB形式的更新。
文章POST数据,打开一个版本,在发表文章前使用Winsock监视窗口 发表后的winsock:
鼠标选中的那一行
POST /post.php?action=newthread&fid=1&extra=page%3D1&topicsubmit=yes HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */* Referer: http://www.discuz4.com/post.php?action=newthread&fid=1&extra=page%3D1 Accept-Language: zh-cn Content-Type: multipart/form-data; boundary=---------------------------7d61c51340152 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322) Host: www.discuz4.com Content-Length: 4548 Connection: Keep-Alive Cache-Control: no-cache Cookie: cdb_sid=eQanty; cdb_cookietime=2592000; cdb_auth=BFsLBgAPV1UEAAdTV1heUwUHAVMNUgZUCQJcB1FWAQNrMQM; cdb_visitedfid=1
鼠标的下一行数据
-----------------------------7d61c51340152 Content-Disposition: form-data; name="formhash" cc06cb25 -----------------------------7d61c51340152 Content-Disposition: form-data; name="isblog" -----------------------------7d61c51340152 Content-Disposition: form-data; name="readperm" 0 -----------------------------7d61c51340152 Content-Disposition: form-data; name="subject" title -----------------------------7d61c51340152 Content-Disposition: form-data; name="iconid" 0
参数太多太长略去一部分
- 发表地址后缀即POST地址:/post.php?action=newthread&fid=[分类ID]&extra=page%3D1&topicsubmit=yes这里替换掉了fid=1的默认分类为[分类ID]变量
- 来源页面后缀:http://www.discuz4.com/post.php?action=newthread&fid=1&extra=page%3D1去掉网址替换fid即为:/post.php?action=newthread&fid=[分类ID]&extra=page%3D1
发表POST数据,因为论坛发表时可能上传文件,使用的Content-Type是 multipart/form-data;
于是发表POST数据要将第二页的所有参数全部连接起来,文件上传部分可以不管(2.0的一个功能是自动上传文本及附件到论坛,可以实现),即:
formhash=cc06cb25&isblog=&readperm=0&subject=title&iconid=0&mode=2&font=&size&color&message=content
这里几个参数formhash又是一个随机值到随机值编辑页面再定义一个[登陆随机值2]
isblog readperm iconid mode font=&size&color 这些应该能懂他的意思,修改值后发表后便不是默认值了。subject是帖子标题,message是内容
整个POST数据整理后便成为:
formhash=[登陆随机值2]&isblog=&readperm=0&subject=[标签:标题]&iconid=0&mode=2 &font=&size&color&message=[标签:内容]
最后一页填上一些该模块的注意事项及相关备注。
有的论坛的开启了小标题, 发表的POST数据便改变了。这样模块应该添加一个参数&typeid=小标题id