手把手教你写灌水机器,全智能自己定,,想怎么灌就怎么灌~

原创 2006年05月24日 17:51:00

慎重申明:
仅供学习研究之用,不可做不该做的事~~保留作者名义!!
这是我前些日子根据我学校的BBS写的灌水程序,现在帖到自己的BLOG请根据你要实验的BBS提交表单作相应改动.


22:42 2006-4-22
我们使用开源HttpClient,该开源项目用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
我在以前那个公司做单元测试程序测试SERVLET代码和做压力测试程序测试系统压力时就是使用的它,它比JAVA里本有的net功能强而且容易使用。
因此,在这里我们还是使用它。
一 配置HttpClient
请把附件ext.rar解压放入JRE的库路径,比如:C:/Program Files/Java/j2re1.4.2_02/lib/ext。道理不用我说,当然是使得我们的程序可以使用这个开源包。

占位帖代码~~

package bbs;
//引入开源包
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.NameValuePair;

public class BbsUp {
  public static void main(String[] args) {
    HttpClient httpClient = new HttpClient();
    String bbsNumberStr = args[0];//接收参数,以作为个人已经发帖子数
    int bbsNumberInt = Integer.parseInt(bbsNumberStr);//从字符转换为整型
    String loginUrl = "
http://bbs.ctbu.edu.cn/login.php";//登陆url
    String updateUrl = "
http://bbs.ctbu.edu.cn/post.php";//发帖url
    try{
        //登陆
        PostMethod postMethod=new PostMethod(loginUrl);
       
        NameValuePair[] data = { new NameValuePair("pwuser", "你的BBS账号,比如我的就是lenky,则这儿就写lenky"),
            new NameValuePair("pwpwd", "不用我说,当然是BBS账号密码"),
            new NameValuePair("hideid", "0"),
            new NameValuePair("jumpurl", "
http://bbs.ctbu.edu.cn/"),
            new NameValuePair("step", "2"),
            new NameValuePair("cktime", "31536000"),
        };
        postMethod.setRequestBody(data);

        int statusCode=httpClient.executeMethod(postMethod);
        System.out.println(statusCode);
       
        if(statusCode==HttpStatus.SC_MOVED_PERMANENTLY||statusCode==HttpStatus.SC_MOVED_TEMPORARILY){
          Header locationHeader = postMethod.getResponseHeader("location");
          String location = null;
          if(locationHeader!=null){
            location = locationHeader.getValue();
            System.out.println("The page was redirected to:" + location);
          }else{
            System.err.println("Location field value is null.");
          }
          //return;
        }
        postMethod.releaseConnection();
       
        //回帖
        postMethod=new PostMethod(updateUrl);
        boolean b=true;
        while(b){//循环回帖
          NameValuePair[] data1 = {new NameValuePair("atc_title", "Re:....."),
                new NameValuePair("atc_content", "automatic reply program update! /n reply the topic every 40 second! /n number:" + (bbsNumberInt++) + " /n reply time:" + new java.util.Date()),
                new NameValuePair("step", "2"),
                new NameValuePair("action", "reply"),
                new NameValuePair("fid", "16"),
                new NameValuePair("tid", "127795"),
                new NameValuePair("editor", "0"),
                new NameValuePair("atc_attachment", "none"),
          };
          postMethod.setRequestBody(data1);
 
          int statusCode1=httpClient.executeMethod(postMethod);
          System.out.println(statusCode1);
         
          if(statusCode==HttpStatus.SC_MOVED_PERMANENTLY||statusCode==HttpStatus.SC_MOVED_TEMPORARILY){
            Header locationHeader = postMethod.getResponseHeader("location");
            String location = null;
            if(locationHeader!=null){
                location = locationHeader.getValue();
                System.out.println("The page was redirected to:" + location);
            }else{
                System.err.println("Location field value is null.");
            }
            //return;
          }
          Thread.sleep(1000*40);//等待40秒
          System.out.println("number:" + bbsNumberInt);
         
        }
        postMethod.releaseConnection();
       
    }catch(Exception err){
        System.out.println(err.getMessage());
    }finally{
       
    }
  }
}

上面就是全部代码,简单吧?

NameValuePair[] data = { new NameValuePair("pwuser", "你的BBS账号,比如我的就是lenky,则这儿就写lenky"),
        new NameValuePair("pwpwd", "不用我说,当然是BBS账号密码"),
        new NameValuePair("hideid", "0"),
        new NameValuePair("jumpurl", "
http://bbs.ctbu.edu.cn/"),
        new NameValuePair("step", "2"),
        new NameValuePair("cktime", "31536000"),
    };

以上参数的来由请分析
http://bbs.ctbu.edu.cn/login.php的html的表单代码。

new NameValuePair("atc_title", "Re:....."),
                new NameValuePair("atc_content", "automatic reply program update! /n reply the topic every 40 second! /n number:" + (bbsNumberInt++) + " /n reply time:" + new java.util.Date()),
                new NameValuePair("step", "2"),
                new NameValuePair("action", "reply"),
                new NameValuePair("fid", "16"),
                new NameValuePair("tid", "127795"),
                new NameValuePair("editor", "0"),
                new NameValuePair("atc_attachment", "none"),

以上参数的来由:我对哪帖做自动回复就分析哪帖的页面
比如我就对本贴做自动回复程序就分析
http://bbs.ctbu.edu.cn/read.php?tid=127795
的表单代码。
分析多帖之后,你会发现一般只需改动fid(是指论坛ID,可能是forum id的简写)和tid(指帖子ID,可能是帖(tie id的简写)

智能改进
一方面,从回复内容着手,我们可以事先写好多条(比如150条)广泛适用的回复保存在文件(比如文本文件),开程序启动后把回复内容保存在数组(或其它比如map,list,set等).再在自动回复随机抽取一条进行回复.
另一方面,在程序里的new NameValuePair("fid", "16"),new NameValuePair("tid", "127795")值可以也取随机数(当然要研究下其规律,比如范围等),若是可以访问的页面(此时,状态码返回200),则随机回复一条信息.若是不可以访问的页面(此时,状态码返回比如404或其它或者页面里有提示信息比如页面里有"帖子ID非法"的提示等等),则再进行下次随机访问.

二.分析访问页面的内容,这就涉及比较深了,呵呵,
我原来也就只是分析下最上几楼的回复(比如楼主发帖的标题和内容,再就是前面几楼的回复),查找关键字,再进行简单的分析判断回复哪句比较好等.

原来我用C语言写过灌水程序,但是太麻烦了,后来代码也不知道哪儿去了.不过可以想象,比这麻烦多了.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

手把手教你智能硬件开发(一) 我选Arduino

智能硬件怎么入门?有没有适合软件开发者使用的硬件平台呢?本文将向您展示Arduino智能硬件的开发,带你入门。

<WP7>(五)手把手教你写天气预报程序:ApplicationBar的使用和ListPicker的数据绑定

这一节,我们要做的是把设置界面写好。不好以为那么容易,因为涉及到ListPicker的数据绑定,而且数据是从数据库里面查询获取的,所以并不是拖连个控件就可以完成的事,不过,拖控件不是件好事,要尽量避免...

手把手教你实现Android中智能设备数据表格绘制

最近做一个android智能手表的app,要给用户呈现的就是用户每天,每周,每月数据信息,既然要使得用户能一眼就看出自己的数据趋势,当然最好的就是折线统计图或者柱状图了。 要实现这要的功能就需...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)