`
leidiqiu
  • 浏览: 135082 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

powerd by discuz 7.2 论坛自动发帖原理介绍

    博客分类:
  • JAVA
阅读更多

     现在很多论坛都是使用现成的 powerd by discuz 7.2,虽说 readme 里声明不是免费软件,但是也没看到要收费的地方,对小公司而言,要搭建一个 BBS 论坛,Linux + Apache + Mysql + PHP + Discuz 无疑是很不错的选择,上手容易,配置也不复杂。

      上一帖给出了在discuz的论坛上自动发帖的代码,这里介绍一下它的基本原理吧。(参见附件的图片)

 

  • 获取登录的 sid 和 formhash 。

      这是个 GET 请求,请求页面 http://192.168.72.130/bbs/logging.php?action=login,服务端返回 sid 和 formhash,其中 sid 是会话的 ID,在返回的 Cookie 中,读取头部的 Set-Cookie 部分即可,sid 每次请求页面,值都不一样;formhash 在返回的文本文件中,如果在浏览器中直接输入:http://192.168.72.130/bbs/logging.php?action=login,可以看到登录界面,查看-源文件,找到登录的那个表单 form ,其中的 input 就有 formhash,type=hidden,隐藏不可见,formhash的值为8位的字母数字搭配,这是服务器返回给客户端的身份标识,具体算法好像是根据时间戳等信息,求MD5后,取其中8位,具体细节参照 discuz 的 PHP 源码吧。

 

 

  • 登录,获取 auth。

      有了 formhash 就可以登录了,其实登录的目的就是为了获得 auth 值,auth 值是通过服务器返回的 Cookie 中获得的。登录的过程是发送 POST 请求,首先要将 sid 写入 Cookie 中,POST 的内容可以通过在 URL 中传输,或是在 POST 的文本内容中,传递的参数有 action, loginfield, questionid, answer, loginsubmit, formhash, username, password 等,相互之间用 & 连接,这些参数在登录界面的源代码里都可以找到,具体内容可以参考代码:

 

"action=login&loginfield=username&questionid=0&answer=&loginsubmit=yes&formhash="
       + login_formhash
       + "&username="
       + user
       + "&password=" + pass

 

     其实以上过程就是模拟浏览器,发送 POST 请求,点击“登录”按钮的时候,浏览器完成以上动作,这里由代码自动完成。

     此时,服务器就认可了用户已经登录,将会保存用户已登录的信息,服务端回应的 Cookie 中,包含了 auth 值,需要从 Cookie 中提取并保存,作为用户的身份标识,用作后续的发帖身份认证。

 

  • 获取发帖的 formhash。

     登录到服务器后,要进行发帖操作,需要得到一个 formhash 标识,通过 GET 请求页面 http://192.168.72.130/bbs/post.php?action=newthread&fid=10 ,其中包含了 fromhash 值,这个请求要包含 sid 和 auth 的 Cookie,其中 fid=10 意为版块的 ID ,可以通过登录具体的版块发帖,鼠标放在“发帖”按钮上,浏览器状态栏会显示 ID 号,或者在发帖页面,查看源文件,找到发帖的表单 form ,查看这个 ID  号。

     服务器返回的内容中,会有个表单,包含 formhash 值,至此,就可以进行发帖操作了。

 

  • 发帖。

     发帖操作和登录操作类似,通过 POST 请求页面 http://192.168.72.130/bbs/post.php,同样需要把 Cookies 的内容加上;具体 POST 的内容,可以参考发帖操作页面的源代码,其中 form 的内容就是要 POST 的内容。可以参考如下:

 

"action=newthread&topicsubmit=yes&subject=" + subject
     + "&formhash=" + post_formhash + "&fid=" + new_fid
     + "&message=" + msg

 

     服务器会返回发帖的结果,所以有必要接受服务返回的内容,用来测试是否发帖成功。具体功能就不实现了。

 

  • 总结

     至此,自动发帖的原理就介绍完了。

     基本的过程就是,GET 请求登录页面,Cookie 中获得 sid ,返回页面中获得 formhash,用 sid formhash username ... 等信息,发送 POST 请求登录,登录后 Cookie 中会有 auth 等信息,取得 auth 后,GET 请求发帖页面,在页面中获得 formhash ,再以 sid auth ...等发送 POST 请求,完成发帖操作。

     如果有笔误或讲得不对的地方,请网友指教。

 

     附上 wireshark 网络抓包的部分内容,供参考。

 

Expert Info (Chat/Sequence): GET /bbs/logging.php?action=login HTTP/1.1\r\n

HTTP/1.1 200 OK\r\n
CsN_sid=RkWOSy; expires=Thu, 13-Jan-2011 09:26:26 GMT; path=/; httponly
<input type="hidden" name="formhash" value="dc5dc9b8" />\r\n

 

Expert Info (Chat/Sequence): POST /bbs/logging.php HTTP/1.1\r\n
CsN_sid=RkWOSy
action=login&formhash=dc5dc9b8&loginfield=username&questionid=0&answer=&loginmode=normal&loginsubmit=true&username=test&password=test

HTTP/1.1 200 OK\r\n
CsN_auth=0d5eTSofQlbIT7ENDULLpdt%2FCi3ysya4vt3LHVIVY%2BRnUAsxR5Gx8R4TOmcS7yXSVjsJ1BUG%2BVb0THYVj5YagA; expires=Sun, 03-Jan-2021 09:26:37 GMT; path=/; httponly
<a href="logging.php?action=logout&amp;formhash=dc5dc9b8">\315\313\263\366</a>\r\n

 

GET /bbs/post.php?action=newthread&fid=10&extra=page%3D1 HTTP/1.1\r\n
CsN_sid=RkWOSy; CsN_auth=0d5eTSofQlbIT7ENDULLpdt%2FCi3ysya4vt3LHVIVY%2BRnUAsxR5Gx8R4TOmcS7yXSVjsJ1BUG%2BVb0THYVj5YagA

HTTP/1.1 200 OK\r\n
<input type="hidden" name="formhash" id="formhash" value="570a67c4" />\r\n
<input type="hidden" name="posttime" id="posttime" value="1294306004" />\r\n
<input type="hidden" name="wysiwyg" id="e_mode" value="0" />\r\n
<input type="hidden" name="iconid" id="iconid" value="" />\r\n

 

POST /bbs/post.php HTTP/1.1\r\n
CsN_sid=RkWOSy; CsN_auth=0d5eTSofQlbIT7ENDULLpdt%2FCi3ysya4vt3LHVIVY%2BRnUAsxR5Gx8R4TOmcS7yXSVjsJ1BUG%2BVb0THYVj5YagA
action=reply&replysubmit=yes&replysubmit=true&formhash=570a67c4&fid=10&tid=15&subject=&message=6666666666666666666666666

HTTP/1.1 200 OK\r\n
CsN_oldtopics=D15D; expires=Thu, 06-Jan-2011 10:27:06 GMT; path=/
CsN_fid10=1294306025; expires=Thu, 06-Jan-2011 10:27:06 GMT; path=/
CsN_visitedfid=10; expires=Sat, 05-Feb-2011 09:27:06 GMT; path=/

    

  • 大小: 15.1 KB
分享到:
评论
3 楼 chenzhp 2013-04-13  
你好,回帖的代码你能够整理上来吗?
2 楼 leidiqiu 2011-01-12  
    你给的地址中使用了 httpclient 这个 jar 的辅助包,我是直接使用 java 提供的HttpUrlConnection 类,自己构造一个 POST 请求,这样对网络的数据通信理解得也更透彻些,回帖也实现了,没时间整理发到博客上来。
    要查看某个帖子的formhash,要登录到这个帖子,得到版块 ID 和帖子 ID,也就是 fid和 tid,把鼠标放在版块或是帖子标题上,状态栏会显示的。知道 fid 和 tid 了,就可以发请求,得到一个发帖页面,从这个页面中提取 formhash 。
1 楼 CoderDream 2011-01-10  
能不能研究下如何回帖?
http://iliuw.iteye.com/blog/636505
这里的代码不完整,不知道怎么得到某个帖子的formhash
特别是他的getRecLink(buildId)是如何实现的不知道!

相关推荐

    mac os解决睡眠时出错

    在Mac OS操作系统中,用户有时会遇到电脑在尝试进入睡眠模式或者从睡眠中唤醒时出现错误,这可能是由于系统中的某些软件冲突、硬件问题或者是设置不当导致的。本解决方案提供了一个补丁,旨在修复这个问题,确保Mac...

    php微信框架包含demo(powerd by arphp)

    自定义栏目, 发送消息 , 微信接口 /** * 监听微信服务器推送信息Action. * * @return void */ public function indexAction() { ... arComp('ext.weixin')-&gt;registerEvent('click' , array($this, 'click'));...

    PHPWind_For_DVBBS_BGK_2.0.rar

    《PHPWind论坛系统与DVBBS的整合及BGK2.0版本详解》 PHPWind是一款广泛应用于互联网的开源论坛系统,以其高效、稳定、易用的特点,深受广大站长的喜爱。而DVBBS则是一款历史悠久的论坛软件,拥有庞大的用户群体。...

    ARM_Powered? ARM Low-Powerd

    本文将详细介绍ARM低功耗技术的核心组件——ARM Power Management Kit (PMK),以及如何利用这些技术来优化芯片设计中的功耗管理。 #### 二、ARM Power Management Kit (PMK) **1. PMK简介** ARM Power Management...

    HZBooks.,Tagging,People-Powerd.Metadata.For.the.Social.Web,.标签_标记系统设计实践

    HZBooks.,Tagging,People-Powerd.Metadata.For.the.Social.Web,.标签_标记系统设计实践

    PowerdDesigner数据建模使用说明

    PowerdDesigner数据建模使用说明 详细介绍了使用PowerdDesigner 进行数据库建模的步骤,按本说明,实际操作一遍,基本会使用PowerdDesigner数据建模了

    jQuery Google Powerd 自定义的搜索引擎

    内容索引:脚本资源,jQuery,Google,API,搜索引擎 基于jQuery的Google Powerd,创建一个自定义的Google搜索引擎,你只要使用Google AJAX Search API,你就可以定制一个界面漂亮的google 结果集搜索引擎到你的网站上,...

    Conext UPS powerd-开源

    Conext Battery Backup UPS电源守护程序。 cpowerd监视Conext UPS的电源状态。 它可以检测到电源故障并安全地关闭系统,或者在恢复电源后取消关闭。 电池电量不足警报尚未实现。

    PreventSleep-禁止休眠与关闭显示器

    标题“PreventSleep-禁止休眠与关闭显示器”所指的是一个专为Windows操作系统设计的实用程序,其主要功能是阻止系统进入休眠模式并防止显示器自动关闭。这在进行一些需要长时间保持系统活跃的任务,如大型软件安装、...

    汽车租赁系统数据库设计.doc

    并通过数据库原理软件设计实践,巩固在课堂教学中学习的关于数据库原理的 有关知识和数据库系统建立的方法,熟练掌握对于实际问题,为了建立一个关系数据库 信息管理系统,必须得经过需求分析、概念结构设计、逻辑...

    Sybase PowerDesigner v15.2破解文件

    Sybase PowerDesigner V15.2 破解文件。 使用说明:安装PowerDesigner v15.2.0.3042后,复制此文件到安装目录替换同名文件。PowerDesigner v15.2请到相关站点下载。

    IOS7节电降热补丁

    4. **屏幕亮度自动调节**:补丁可能优化了自动亮度调整算法,使其更加敏感,能在光线变化时更快地调整,从而减少不必要的电池消耗。 5. **CPU频率控制**:通过对CPU频率的智能调控,当设备温度升高或电池电量降低时...

    2011最新网店程序

    NowShop系统运行环境: ☆语言环境:ASP ☆数据库类型:ACCESS ☆其它要求:FSO(必须)、Jmail(可选) ☆服务器操作系统:简体中文Windows 2000、2003服务器操作系统。...Powerd By:Now Shop商城系统 V4.5

    nowshop45--程序好http://bbs.fytcw.com

    《NowShop商城系统 V4.5》运行稳定、安全可靠、功能强大、傻瓜式后台管理,大量独具特色的功能在同类购物系统中独树一帜,它“易用、实用、超强人性化”的...Powerd By:Now Shop商城系统 V4.5 http://bbs.fytcw.com

    最新版本PowerDesigner 16.6汉化工具(含安装包下载地址)

    最新版本PowerDesigner 16.6汉化工具,含安装包下载地址。完全傻瓜式汉化,你值得拥有。

    php的cli模式-圣诞树源码

    4. 在底部添加版权信息,使用`coryRight`方法,居中显示“Powerd by Sunwq!”。 在`draw`方法内部,`setTreeBody`方法用于绘制树身,根据给定的长度遍历并设置随机字符和颜色。`start`和`end`方法分别设置开始和...

    RAZER BLACKWIDOW黑寡妇终极版(樱桃轴蓝版),变砖自救教程。云固件更新包

    笔者小记: 昨日WIN7X64有一次710的重要更新,导致雷云出错,键盘多功能按键失效。 之后想着装回老版本的单独键盘驱动,但是之前雷云自动更新到2.03的... ---POWERD BY SAMKING.LEE WECHAT:691258 22:50 2018/7/13

    powerdesigner数据建模实验报告

    【PowerDesigner数据建模实验报告】是针对信息系统需求分析与数据建模的实践学习,旨在理解和掌握数据模型的原理及工具应用。实验的核心是通过PowerDesigner这一CASE工具,完成从概念数据模型(CDM)到物理数据模型...

    apache虚拟主机配置

    1. **`Header append Powerd-By wuchen`**: 在响应头中添加`Powerd-By: wuchen`字段。 #### 八、浏览器缓存有效期设置 1. **`ExpiresActive On`**: 开启浏览器缓存。 2. **`ExpiresDefault A86400`**: 设置默认...

    IP4电源配置路径

    通过对这个文件进行编辑,可以自定义IP4在不同使用状态下的电力消耗,如在低电量模式下自动降低屏幕亮度、减少后台应用程序的活动等,以延长电池寿命。 ### 三、操作步骤与注意事项 #### 操作步骤: 1. **备份...

Global site tag (gtag.js) - Google Analytics