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

如何写一个自动投票工具

    博客分类:
  • J2EE
阅读更多
当然,自动投票这个违反了正常竞争,不提倡,这里只就技术问题做个探讨。

投票服务器一般的验证条件:
  • IP地址不能重复
  • Cookie验证
  • 验证码验证

一个自动投票工具可能涉及的问题:
  • 自动变换IP地址
  • 识别验证码
  • 伪装成浏览器提交


自动变换IP地址

一种直接的办法就是控制ADSL的链接状态来实现IP变换,具体可以参考这里。但如果你使用的不是ADSL,那么更直接的办法就是使用代理了。

首先你需要一个有效代理列表,可以从网上专门提供代理网站收集,也可以有专门的工具,比如商易代理IP获取器。如果是网站获取,你可以写个页面解析程序,分页获取;如果是软件,在获取可用代理后,一般可以直接导成txt文本。

接下来就是要测试代理的可用性,一般可用代理不到采集下来的1/10。
测试代理的有效性:
static String myIP = "X.X.X.X";//自己原来的对外IP
private static boolean testProxy(String ip, String port) {
		System.getProperties().setProperty("http.proxyHost", ip);
		System.getProperties().setProperty("http.proxyPort", port);

		InputStream in = null;
		try {
			in = new URL("http://iframe.ip138.com/ic.asp").openStream();
			String string = IOUtils.toString(in, "GBK");
			System.out.println(string);

			return string.indexOf(myIP) < 0;
		} catch (Exception e) {
			return false;
		} finally {
			if (in != null)
				IOUtils.closeQuietly(in);
		}
	}



伪装成浏览器提交

这里是斗智斗勇的时候,有时候投票服务器会使用一些小手段来阻碍模拟者,你需要伪装成一个普通浏览器,并具有和用户操作一样的行为。

你可以使用firefox(firebug)或是chrome的调试器查看正常投票的网络信息,从而进行模拟。

一般的伪装:
		DefaultHttpClient httpclient = new DefaultHttpClient();
		// 代理的设置
		HttpHost proxy = new HttpHost(ip, Integer.parseInt(port));
		httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
				proxy);
		httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
				CookiePolicy.BROWSER_COMPATIBILITY);
		httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT,				"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0");
		httpclient.getParams().setParameter(	CoreProtocolPNames.HTTP_CONTENT_CHARSET, "GBK");

HttpPost httppost = new HttpPost("http://XXX");

		httppost.addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0");
		httppost.addHeader("Host", "XXX);
		httppost.addHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		httppost.addHeader("Accept-Encoding", "gzip, deflate");
		httppost.addHeader("Accept-Language","zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
		httppost.addHeader("Cache-Control", "max-age=0");
		httppost.addHeader("Connection", "keep-alive");
		httppost.addHeader("Referer","http://XXX");



识别验证码

这个是个大话题,识别验证码方法很多,比较有效的方法是采用tesseract-ocr。一般的验证码都不在话下,个别的需要自己训练一下,可以参考这里
一般的用法:
tesseract test.jpg out -l eng digits

test.jpg为验证码图片,out为识别的验证码存放的txt文件名,-l eng为指定语言,也可以下载支持中文的包识别中文,digits为指定只识别数字,这样对于只是数字的验证码可以提高识别率。

如果你发现tesseract提示empty page!!,则需要修改一下参数:
Here's a summary of compression support and limitations:
    - All formats except JPEG support 1 bpp binary.
    - All formats support 8 bpp grayscale (GIF must have a colormap).
    - All formats except GIF support 24 bpp rgb color.
    - All formats except PNM support 8 bpp colormap.
    - PNG and PNM support 2 and 4 bpp images.
    - PNG supports 2 and 4 bpp colormap, and 16 bpp without colormap.
    - PNG, JPEG, TIFF and GIF support image compression; PNM and BMP do not.
    - WEBP supports 24 bpp rgb color.

比如最后的指令可能为:
tesseract test.jpg out -l eng -psm 7 digits


tesseract识别格式有限,有的网站的验证码格式是bmp或其他,这个时候需要先获取下来byte[],保存成原有格式,然后再转化成支持的格式,比如jpg,tif等。转化工作可以使用JAI(Java Advanced Imaging API)

对于有的验证码,还需要做一些前期处理,比如去掉背景噪点,灰度化,增大对比度,去掉干扰线条等。

用java调用是必须的:
public static String doOCR(File imageFile) throws Exception {
		String result = "";
		File outputFile = new File(imageFile.getParentFile(), "output");
		StringBuffer strB = new StringBuffer();

		List<String> cmd = new ArrayList<String>();
		cmd.add(tessPath + "\\tesseract");
		cmd.add("");
		cmd.add(outputFile.getName());
		cmd.add(LANG_OPTION);
		cmd.add("eng");
		cmd.add("-psm");
		cmd.add("7");
		// cmd.add("nobatch");
		cmd.add("digits");
		
		ProcessBuilder pb = new ProcessBuilder();
		pb.directory(imageFile.getParentFile());

		cmd.set(1, imageFile.getName());
		System.out.println(cmd.toString());
		pb.command(cmd);
		pb.redirectErrorStream(true);
		Process process = pb.start();

		int w = process.waitFor();
		logger.debug("Exit value = {}", w);

		if (w == 0) {
			BufferedReader in = new BufferedReader(new InputStreamReader(
					new FileInputStream(outputFile.getAbsolutePath() + ".txt"),
					"UTF-8"));

			String str;

			while ((str = in.readLine()) != null) {
				strB.append(str).append(EOL);
			}
			in.close();
		} else {
			String msg;
			switch (w) {
			case 1:
				msg = "Errors accessing files. There may be spaces in your image's filename.";
				break;
			case 29:
				msg = "Cannot recognize the image or its selected region.";
				break;
			case 31:
				msg = "Unsupported image format.";
				break;
			default:
				msg = "Errors occurred.";
			}
			System.err.println("验证码获取失败:" + msg);
		}

		new File(outputFile.getAbsolutePath() + ".txt").delete();
		result = strB.toString().trim();
		return result;
	}
分享到:
评论

相关推荐

    自动投票工具2014自动投票软件v1.0绿色版

    自动投票工具2014是一款简单易用自动投票软件,该软件能够采用真实独立的IP,并且按照活动网站的要求来正规投票,更加安全、快速,让用户的使用更加放心。而且该软件完全模拟手工操作快速投票,用户只要运行软件即可...

    自动投票工具V0.01 绿色免费版.rar

    通用免费全自动投票软件,一款强大的投票工具,帮助你获取更多选票,使用方法如下: 投票设置---》对于需要更换IP的投票需要使用这个选项,填入你的ADSL账号,密码即可,如果是内网的话可能无法使用. 模拟投票---...

    自动投票小工具源代码

    web 控件操作例程,使用的技术包括: 浏览器视图的使用 网页form及input按钮的读写以及自动提交form 定时器的使用 图形数字识别 ...可以自己修改不同的投票对象为他进行自动投票 最后编译环境是vs2008

    自动投票工具

    在IT行业中,自动投票工具是一种特定的软件应用,主要用于在线活动中的投票环节。这些工具能够自动化执行投票过程,减轻用户手动点击的繁琐工作,并且在某些情况下,还支持定时任务来实现无人值守的自动投票。下面...

    【源码已发布】Java自动投票工具

    综上所述,Java自动投票工具是一个涉及网络爬虫、数据解析、模拟用户交互等多个技术领域的项目,其源码发布对于学习和研究自动化工具的开发具有较高的参考价值。通过深入研究,开发者可以了解到如何在Java环境下实现...

    自动投票(c#源码)

    此外,`Selenium WebDriver`是一个流行的工具,用于模拟浏览器行为,它可以控制浏览器执行点击、填写表单等操作。 3. **多线程与并发**:自动投票系统可能需要同时处理多个投票任务,这就涉及到了多线程和并发处理...

    吐血推荐!vote投票器 超小绿色自动投票autovote

    综上所述,"vote投票器"是一个轻量级、便携式的自动投票工具,适用于快速进行投票操作。其优点在于小巧、无需安装,但缺点是缺乏OCR功能,不能处理需要视觉识别的投票情况。用户只需运行压缩包内的"AutoVote.exe...

    网络自动投票器

    然而,随着网络投票的普及,也催生了一种名为“网络自动投票器”的工具。这款工具声称能够帮助用户实现快速、高效的投票,甚至能够识别并解决复杂的验证码问题,从而达到锁定特定投票人的目的。 一、验证码识别技术...

    帮朋友做的一个自动投票机源码

    自动投票机是一种利用程序技术实现自动为特定对象进行网络投票的应用。在互联网时代,各种比赛、评选活动层出不穷,而自动投票机的出现,主要是为了应对手动投票效率低下的问题,它能快速地完成大量投票任务。然而,...

    全自动投票软件 v2.1 绿色版.rar

    全自动投票软件v2.1是一款高效实用的网络投票工具,专为用户设计,提供便捷的投票服务。这个绿色版软件无需安装,用户只需解压后即可直接运行,大大简化了使用流程。它支持两种常见的HTTP请求类型:GET和POST,这...

    易语言自动投票源码.rar

    6. **安全与合法性**:虽然这是学习资料,但值得注意的是,滥用自动投票工具可能违反服务条款,甚至触犯法律,因此了解技术的同时,也要了解其使用边界。 通过对这个源码的学习,你可以深入理解易语言的编程技巧,...

    自动投票能手2.61

    然而,值得注意的是,自动投票工具在某些情况下可能违反了投票活动的公平性原则。许多网络投票活动会设置反作弊机制,禁止使用此类工具。因此,在使用自动投票能手2.61时,用户需确保活动规则允许自动投票,以免触犯...

    我的自动投票器

    【描述】:这篇博客主要介绍了作者开发的一款自动投票工具。虽然具体的描述信息为空,但通常这样的工具是基于编程技术实现的,可能涉及到自动化脚本、网络请求、数据解析等多个方面的知识。通过访问提供的博文链接...

    一个用于路由哭的网上投票工具

    标题中的“一个用于路由哭的网上投票工具”指的是一个专门设计用于路由器的程序,它能够帮助用户在进行网络投票时突破IP限制。这样的工具通常利用技术手段改变路由器的IP地址,以便多次参与同一投票活动,这在一些...

    全自动投票软件(自动投票器) V9.9 绿色免费版.zip

    然后浏览器下面就出现一个窗口,只要你投票,他就开始抓包 要是GET方式投票的,很简单,把前面GET后面的东西前面加上这个网站的网址组成新的网址输入到请输入投票地址 然后软件上的HTTP请求头设置上的REFER就写上...

    一个简单的投票程序(JSP版)

    【标题】"一个简单的投票程序(JSP版)"所涉及的知识点主要集中在Java Web开发领域,具体包括Servlet和JSP技术的使用。以下是对这些技术及其在该程序中的应用进行的详细解释: 1. **Servlet**:Servlet是Java编程语言...

    自动投票C#源代码

    综上所述,"自动投票C#源代码"是一个涵盖网络编程、多线程、数据解析等多个技术领域的项目,通过分析和学习这样的代码,开发者可以提升自己在实际问题解决上的技能。然而,需要注意的是,自动投票可能违反网站的使用...

    自动投票能手 2.61.rar

    因此,合理使用和谨慎选择使用自动投票工具至关重要。 在安全性方面,"无毒"的描述表明该软件在安全检测中未发现恶意代码,但用户仍需谨慎对待下载来源,确保从正规渠道获取软件,以防潜在的病毒或木马。此外,自动...

    我要上春晚自动投票器

    最后,虽然这种自动投票工具在某些情况下提高了参与度,但也存在滥用的风险,可能会影响活动的公平性。因此,用户在使用时应遵守活动规则,避免违反主办方的规定,否则可能会导致账号被封禁,甚至触犯相关法律法规。...

    投票小工具

    【投票小工具】是一款专为网络投票设计的实用软件,其主要功能是自动拨号以改变用户的电脑IP地址。在一些需要频繁切换IP地址的场景下,如在线投票、网络测试或者多地区服务访问等,该工具能显著提高效率,减少手动...

Global site tag (gtag.js) - Google Analytics