投票机的实现及相关技术(一)

本文仅限于投票机技术的讨论与学习,请大家以后不要再留言索求XXXXX的投票机了,我是不会写的。谢谢!

这几天没日没夜,就为了一个网络投票。在网上找了一下,还有很多收费的投票机,而且还不便宜,效率似乎也不是很高,自己动手写了一个。(原创文章,转载请联系我)

其实投票机就是一个往目标服务器Post数据,看以下代码,

cl = new WebClient();

                     cl.Headers.Add(
"Accept""image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");

                     cl.Headers.Add(
"Referer", idxPage);

                     cl.Headers.Add(
"Accept-Language""en-us");

                     cl.Headers.Add(
"Content-Type""application/x-www-form-urlencoded");

                     cl.Headers.Add(
"UA-CPU""x86");

                     cl.Headers.Add(
"Accept-Encoding""gzip, deflate");

                     
string result = cl.UploadString(votePage, "POST""R1=xx&B1=%CD%B6%C6%B1");

 

以上的代码很简单,就是往服务器Post一个“R1=xx&B1=%CD%B6%C6%B1”数据,前面的cl.Headers.Add(…..)是伪造一个请求的头。

 

以上是一个简单的实现,很多服务器都进行IP判断,这样以上代码投完服务器指定的每IP投多少票后,就不能再投了。下面就是使用代理服务器。

WebProxy proxy = new WebProxyhostip, hostport;

cl.Proxy = proxy;

使用了代理服务器后,如果服务器不进行代理服务器的检测,那么每换一次代理,就相当于换了新的IP。代理当然可以实现程序自动更换,比如说你先取一个列表,然后随机从列表中去,具体代码我就不贴出来了。

投票程序如果加了验证码,那么就要取得验证码,单纯的数字验证,相当简单,我就不说了,这里说一下使用图形验证码,看下面图形(相对比较简单的图形验证)

 

上面的图片中,只有数字,虽然数字颜色不同,但没躁点,无干扰线,还有就是背景色是不变的,现在思路就是,读取图片,把图片中的单个数字截取出来,再转换成黑白色,也就是说如果当前象素如果是背景色,就转换成白色,反之转换成黑色。这里只是提供一条思路,具体如何实现可以参考(http://blog.csdn.net/qqwwee_com/archive/2005/08/14/454335.aspx)。以下是代码:

 

static void LoadConfirmCodes()

       
{

              confirmCodes.Add(
20357705950);

              confirmCodes.Add(
-13239202421);

              confirmCodes.Add(
10584162692);

              confirmCodes.Add(
10981343403);

              confirmCodes.Add(
-16310303134);

              confirmCodes.Add(
5583032615);

              confirmCodes.Add(
-18820801456);

              confirmCodes.Add(
-3934491937);

              confirmCodes.Add(
-12977451958);

              confirmCodes.Add(
18624901559);

       }


       

       
static string GetConfirmCode(Bitmap bmp)

       
{

              Rectangle r1 
= new Rectangle(00610);

              Rectangle r2 
= new Rectangle(100610);

              Rectangle r3 
= new Rectangle(200610);

              Rectangle r4 
= new Rectangle(300610);

              

              Bitmap b1 
= bmp.Clone(r1, bmp.PixelFormat);

              Bitmap b2 
= bmp.Clone(r2, bmp.PixelFormat);

              Bitmap b3 
= bmp.Clone(r3, bmp.PixelFormat);

              Bitmap b4 
= bmp.Clone(r4, bmp.PixelFormat);

              

              
return string.Format("{0}{1}{2}{3}", ImageToNumeric(b1),

                     ImageToNumeric(b2), ImageToNumeric(b3), ImageToNumeric(b4));

       }


       

       
static int ImageToNumeric(Bitmap bmp)

       
{

              StringBuilder sb 
= new StringBuilder();

              
int height = bmp.Height - 1;

 

              
for (int i = 0; i < height; i++)

              
{

                     
int width = bmp.Width - 1;

                     
for (int j = 0; j <= width; j++)

                     
{

                            Color color 
= bmp.GetPixel(j, i);

                            sb.Append(color.Name 
== "ffeeeeee" ? "0" : "1");

                     }


              }


 

              
return confirmCodes[sb.ToString().GetHashCode()];

       }


 

    以上代码将像素点按背景和非背景转换成了字符串,然后取得Hash,然后将取回来的图片进行转换后与以存在的对比。当然,以有的库你必须先学习,也就是说你先必须从网站先学到(0-9)这10个图片,分析出字符串,得到每个数的Hash
    这里只是简单的说明了一个基本的投票机的原理,如果有足够的资源,而且不能使用代理的时候,就可以使用自动切IP(要求你有足够多的合法IP资源)和ADSL自动断线重拨(要求你有足够多的ADSL)。下一篇文章将说明如何切IP和ADSL自动断线重拨。

posted @ 2006-04-03 16:35 XiaoHui 阅读(10551) 评论(45)  编辑 收藏 网摘 所属分类: Win Form(C#)

  回复  引用    
#1楼 2006-04-03 17:34 | lovebanyi [未注册用户]
最主要的还是验证码部分.
  回复  引用  查看    
#2楼 2006-04-04 09:13 | A.Z      
使用特征判定将大大提高速度,减少内存资源。
不过用hash code是一个好办法。
QQ的验证码有好的方法吗,用微软的识别库不知道正确率有多高。



  回复  引用  查看    
#3楼 2006-04-04 09:16 | A.Z      
cl.Headers.Add("UA-CPU", "x86");
cl.Headers.Add("Accept-Encoding", "gzip, deflate");

这两句好像不用



  回复  引用  查看    
#4楼 2006-04-04 09:16 | A.Z      
没有封装错误处理
  回复  引用  查看    
#5楼 [楼主]2006-04-04 11:44 | XiaoHui      
@A.Z
以上只是代码片断。。。。

  回复  引用    
#6楼 2006-04-14 11:32 | bobcy [未注册用户]
前几天做了一个web投票的小程序,地址:
http://www.wuhan.net.cn/54/index.html

尽管限制了ip的投票数和同一ip的投票间隔时间,没想到差不多平均2天还是有近10万的投票数,程序响应变得特别慢。

分析数据库的记录发现,高峰时间差不多每一秒至少有3票。原来以为是数据库用的access,当数据库记录数太多后导致的性能下降,后来采用了一系列access数据库优化的方法,定期把前一天的投票记录转移到另一个表中,压缩修复acccess数据库,建立索引等等,结果还是不理想。

估计是某些人采用自动投票机或按键精灵之类的工具来挂机刷票,于是今天采用了图片验证码的方式来防止这些工具自动刷票。

麻烦各位研究投票机的朋友再帮我看看,我今天修改后的投票程序还有哪些漏洞没赌上,可以给人钻的,谢谢。
  回复  引用  查看    
#7楼 [楼主]2006-04-15 14:15 | XiaoHui      
@bobcy
你进行了一系列优化后,还是不行,可以考虑使用SQL。因为你的投票程序一下子要面对那么多的请求,尤其是使用投票机,Access对于多并发,光靠优化是起不了多大作用的。

还有就是投票程序,感觉就像是矛与盾,现在网上有好多对付网络投票的团队。而且收费也不低,呵呵。
  回复  引用    
#8楼 2006-05-10 17:55 | 曾先生 [未注册用户]
你好!你能不能帮我破解一下这个投票的网站。http://minisite.it.sohu.com/minisite/site627/photodetail1.jsp?corpID=627&status=browse&privCode=04&pictureID=34941
难度好像很大的。能不能这两天就回复我呢!大哥!


  回复  引用  查看    
#9楼 [楼主]2006-05-11 11:21 | XiaoHui      
@曾先生
您给的网站已经看过了,难度不大。加上了IP验证,也就是说1个IP只能投一票。
  回复  引用    
#10楼 2006-05-14 20:25 | 李先生 [未注册用户]
http://culture.uusee.com/list_c.php?ranking_number_id=3&award_d_id=26
帮我破解一下这个网站,谢谢,
怎么下载不了啊http://www.wuhan.net.cn/54/index.html
能不能传个投票机给我啊,好像投票机对这个网站没用啊,能不能快的回复我啊,要是能的话真的太谢谢了
  回复  引用    
#11楼 2006-05-16 22:00 | X_Code [未注册用户]
最近在研究这方面的程序,能不能请教一下QQ:56066909
  回复  引用    
#12楼 2006-07-12 22:46 | 天使 [未注册用户]
可以麻烦帮我写个投票机吗????真的是对我很重要的投票!拜托了!可以的话请回复我!我的QQ:10255807
  回复  引用    
#13楼 2006-07-20 19:54 | wokanbuxing [未注册用户]
能否告知R1=xx&B1=%CD%B6%C6%B1是怎么来的?
  回复  引用  查看    
#14楼 [楼主]2006-07-29 13:13 | XiaoHui      
@wokanbuxing
这一段代码是向WEB服务器Post回去的代码,可能通过IE的插件得到的。具体忘记名字了。
结合我当时的完成的程序,实现上就是投票的选项是XX,点击的Button是=%CD%B6%C6%B1

  回复  引用    
#15楼 2006-10-20 23:09 | yiyantang8@yahoo.com.cn [未注册用户]
看过了,很受感动!
按照这种思路,投票似乎仍然是很艰深的东东,有没有可能以一种非常简明的网页在线支持的投票方式表现出来呢?
比如说网页点击器,有很多不同思路编写出来的现成软件,界面也非常简明。
  回复  引用    
#16楼 2006-11-04 22:52 | 郭先生 [未注册用户]
能否帮忙破解这个网站呢,真的有急用.http://www.cjch.cn/gdlc/tp.asp
采用了IP和验证的手段.写好的程序请发至 guochunbo911@163.com 谢谢.^-^
  回复  引用    
#17楼 2006-11-07 15:24 | FENG[匿名] [未注册用户]
cl = new WebClient();

cl.Headers.Add("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");

cl.Headers.Add("Referer", idxPage);

cl.Headers.Add("Accept-Language", "en-us");

cl.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

cl.Headers.Add("UA-CPU", "x86");

cl.Headers.Add("Accept-Encoding", "gzip, deflate");

string result = cl.UploadString(votePage, "POST", "R1=xx&B1=%CD%B6%C6%B1");

--------------------
WebClient是如何实现的


  回复  引用    
#18楼 2006-11-10 22:41 | 张先生 [未注册用户]
高人哪!可是你写的东西我都看不懂呀?能不能帮我做一个投票软件呀?
http://hnmazda.allyes.com/2006/ljxf/yhxf1.php?id=26
这个地址1个IP能投20票,带验证码,我都是手工投的,明显比不过人家,帮我做一个吧,谢谢了。我的邮箱zhangjian2820@yahoo.com.cn
  回复  引用    
#19楼 2006-11-17 16:22 | 李小姐 [未注册用户]
最近一直在找投票机,可就是没找着,能否帮我做一个投票软件啊?如果可以真是万分感谢。地址http://www.fzyyb.com/vote/view.asp?id=91
这个只有IP限制。如果可以的话,能否发自yanzi504@163.com,盼复!
  回复  引用    
#20楼 2006-11-29 19:15 | macleo [未注册用户]
太棒了!我正找这个!谢谢楼主分享!
  回复  引用    
#21楼 2006-11-29 22:32 | macleo [未注册用户]
文章太妙了!
精品啊!精品!谢谢楼主啊!
  回复  引用    
#22楼 2006-11-30 01:42 | macleo [未注册用户]
请问楼主,您的这个代码是C#么?
谢谢,请指点!^_^!
我找到了Curl,但是无法克服ip地址自动更换的问题!
感谢!
  回复  引用    
#23楼 2006-12-04 00:12 | macleo [未注册用户]
谢谢,楼主!
是C#代码哦!
^_^,使用WebClient,编译通过!不过,还是达不到投票的效果!

现在需要考虑的是如何更换IP的问题了!

  回复  引用    
#24楼 2006-12-04 00:13 | macleo [未注册用户]
http://hiphotos.baidu.com/macleo/pic/item/2ed62987c511202bc65cc303.jpg

谢谢,楼主!
使用WebClient,编译通过!不过,还是达不到投票的效果! 如图!

现在需要考虑的是如何更换IP的问题了!
  回复  引用  查看    
#25楼 [楼主]2006-12-05 21:11 | XiaoHui      
@macleo
不好意思,由于当初不是在本人自己机器上开发的ADSL换IP,源代码不在了,一直也就没接着写下来了。。。
  回复  引用    
#26楼 2006-12-09 00:32 | 睡眠不足 [未注册用户]
请大哥帮我也做一个。我们公司年终奖金就全靠它了http://www.ca029.com/fb/
是10号..笑笑...这个是网址麻烦了。联系QQ2368934
先在此谢过
  回复  引用  查看    
#27楼 2006-12-20 00:53 | macleo      
^_^,文章怎么不更新了?看到你的回复了!
我的投票机编译通过了!不过,adsl切断来实现变更IP,实在太麻烦了!导致我无法正常上网了!
自动切断ADSL拨号方式投票机截图:http://hiphotos.baidu.com/macleo/pic/item/f2e868892fe018b20f2444b3.jpg
我放弃了都!还是想搞个用读代理的!

你的随笔呢?????为何不更新呢???谢谢你的文章!文章很精品!应该继续!

  回复  引用  查看    
#28楼 [楼主]2007-01-21 20:17 | XiaoHui      
@macleo
谢谢关注,呵呵!

WebClient可以指定Proxy,用代理服务器的思路其实很简单的,因源码丢了,而且也很容易实现,没必要再先下去了。。

将Proxy存到一个文本文件中,然后指定循环N次后换一个Proxy。思路就是这样,我想你应该也很容易实现出来的。找代理的网站是www.proxycn.com
  回复  引用    
#29楼 2007-01-22 14:13 | macleo [未注册用户]
受益菲浅,感谢指点!感谢!
  回复  引用    
#30楼 2007-01-30 14:19 | 天下 [未注册用户]
能不能做我做一个又带六位数字验证又能用代理的投票机,麻烦了,请发我邮箱lele-0212@163.com
  回复  引用    
#31楼 2007-02-11 20:48 | baby [未注册用户]
我要在这里投票,可以用吗?
怎么用啊?
C我不懂的
应该怎么存啊?
是不是有软件的啊?
  回复  引用    
#32楼 2007-03-25 14:04 | 蔡先生 [未注册用户]
我现在要写一个自动投票系统,不知怎么写呀,请教下行吗?
  回复  引用    
#33楼 2007-04-10 13:06 | 小张 [未注册用户]
xiaohui你好,我是个菜鸟,看不懂你的文章,可我需要你文章里的内容,因为姐姐参加我们区的一个比赛,需要网上投票,但是她的竞争者好象用了自动投票系统的,本来比姐姐少400多票,但是一小时内就赶上甚至超过了300多票,很明显作弊,所以我想麻烦你帮我也刷下票,地址是http://www.gaogang.gov.cn/gg05/10jia/index.html
是“教书育人标兵”里的最后一个候选者。谢谢你了
  回复  引用    
#34楼 2007-04-20 11:22 | 一滴水 [未注册用户]
急用!急用!大侠帮我一下我要一个投票机,我到网页下载都是病毒,我都被毒死好多次了,请大侠帮一下发给我一个投票机,我在这里叩头了。。我想给这个网站投票你看可以吗?http://www.sna-bfsu.cn/blog/user.asp?id=34如果可以大侠一定帮我一下哟!我的邮箱是wspqw8888@163.com



先谢谢你哟
本月22日晚上结束

  回复  引用    
#35楼 2007-05-02 03:18 | BlueLeaf [未注册用户]
怎样能保证获取验证码的webClient和用来POST的webClient是同一次连接呢,我的程序总是报“验证码”错误,我测过了验证码100%正确,估计就是连接不同。下面是部分代码,帮忙看看,谢谢!
//全局变量
private WebClinet webClient = new WebClient();

/// <summary>
/// 加载验证码
/// </summary>
/// <param name="StrUrl">网站地址</param>
/// <param name="Cookies">cookie集合</param>
/// <returns>验证码图形</returns>
private Bitmap crImg(string StrUrl)
{
this.ImgUrl = StrUrl;
Bitmap bmp = null;
bmp = new Bitmap(webClient.OpenRead(StrUrl));
bmp.Save("code.bmp");
return bmp;
}


/// <summary>
/// 用WebClient,但是不用代理服务器投票
/// </summary>
/// <param name="postData"></param>
/// <returns></returns>
public string WebClientVoteWithoutProxy(string postData)
{
//http头标太多,省了
string result = "";
try
{
result = webClient.UploadString("http://student.hust.edu.cn/goodroom/default.asp", "POST", postData);
MessageBox.Show(result);
webClient.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return result ;
}

  回复  引用    
#36楼 2007-05-03 10:05 | lenovo [未注册用户]
美女帅哥大家好,我是个菜鸟,看不懂这代码,可我需要文章里的内容,因为我的一个好同学参加江苏省第二届大学生职业规划南京赛区的一个比赛,需要网上投票,但是她的竞争者好象用了自动投票系统的,所以我想麻烦你帮我也刷下票,地址是http://www.jsbys.com.cn/career/xs/get_xs.aspx?xs_ID=20118
拜托了!!!
  回复  引用    
#37楼 2007-05-11 09:50 | 广州李先生 [未注册用户]
你好,能够帮我看看这个投票系统吗,投票不限制ip,但是有验证码,还要填写手机号码和邮箱,似乎蛮复杂的。
http://www.landwind.com/zhuanti/happy/zpzs.aspx
这个是作品地址:http://www.landwind.com/zhuanti/happy/detail.aspx?AID=425


  回复  引用    
#38楼 2007-05-20 04:01 | 冷锋 [未注册用户]
您好,能帮我做个投票系统吗?有验证码和时间限制,间隔时间为1分钟投一次,能不能帮我做个自动投票的?谢谢了 投票网站是http://family.beijing2008.cn/en/fc_vote.php?id=1013&inf=1
我的邮箱是gukaisharp@163.com
万分感谢~
  回复  引用    
#39楼 2007-07-03 13:03 | 专业定做投票软件 [未注册用户]
我们专业从事自动投票投软件(投票机,投票器,自动投票机)的开发,有需要可以联系我,http://www.autovote.cn/
  回复  引用    
#40楼 2007-07-17 13:22 | Helen [未注册用户]
现在急需一个刷票器,
高人能帮个忙吗?可以支付一定费用!!
如果愿意请加QQ:812934070
谢谢!
  回复  引用    
#41楼 2007-10-14 23:06 | 霏霏 [未注册用户]
原来还有这样的高人帮助大家 感激
  回复  引用    
#42楼 2007-12-28 13:23 | match1990 [未注册用户]
能不能帮我做个投票机吖,谢谢楼主了,我急用,网址
以下http://client.sina.com.cn/200712N82/vote.php?s=1&id=3200
赢的话定当答谢!我的邮箱是l598606162@yahoo.cn
  回复  引用    
#43楼 2008-01-12 00:53 | 仙子过客 [未注册用户]
呵呵,我在OutdoVote上也看到有这方面的文章,写得比楼主要好一些,注释比较多,而且可以下载免费的通用投票软件,上次用它参加比赛成绩还不错:)
网址是:www.outdovote.cn,有需要可以去看看
出售***,可准确地自动识别新浪动网淘宝CSDN等多种复杂验证码。为您制作投票软件、自动充值及其它自动提交程序铺平道路。

输出为一个标准DLL,可供VB,VC,Delphi,C#.NET,VB.NET,模拟精灵,按键精灵等多平台调用,调用方法简单,几行代码即可完成。独具特色的边缘检测字符分离、旋转倾斜纠正和通用字符匹配算法(无论字体和大小), 使得该引擎对于像新浪、动网、淘宝、CSDN等多种验证码均有不错的识别率,是一款效果较为理想的验证码识别引擎。附详细的调用实例和代码注释等相关技术文档。

同时提供专业发贴机、自动投票机、自动查询器、自动充值机等各类网络软件的定制,以及各种复杂验证码的识别服务,价格依软件具体难度而定。

QQ:631753663
手机:13517270758
MSN: rapboyhaha@hotmail.com

  回复  引用    
#45楼 2008-06-28 21:07 | 周投报 [未注册用户]
谢谢,帮我做一个http://www.shanghuichina.com/dong8/xuanzhe.asp
这个网站的投票软件,好吗,非常急,非常感谢,我的邮箱qpxyz@163.com




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-01-31 14:32 编辑过
Google站内搜索

相关文章:

相关链接: