还是关于投票程序
作者:英雄无敌 日期:2006-04-12
最近还是一个投票任务,不过这次是公司给的活,给某位名人在某大网站作弊投票,呵呵,不知道怎么会搞出网上投票的,我想想网上投票基本都能作弊。
经过分析发现这里的投票程序限制有三个,1、referer,2、IP,3、cookies。反正1和3都好解决,关键是2怎么办。本来拿我上次的拨号程序改吧改吧就给了人家,结果这几天他那个IP段的IP基本都已经投过票了。现在大部分IP都不能投了。于是又缠我改成多代理投票。
这个小程序代码分成三部分,一部分是读proxy列表的代码,我将列表处理成ArrayList.第二部分是投票的代码,这里伪造referer,读取代理投票。第三部分是投票日志。第一和第二部分在一个线程中运行,第三部分另外一个线程。主要还是说第二部分吧。
选中了.net中HttpWebRequest因为它和WebRequest类都有Proxy的方法。但是在WebRequest类中某些Headers的类别添加受到限制,如referer,而他的子类HttpWebRequest中倒是提供了referer属性的修改方法,所以就用HttpWebRequest了。整个代码都很简单,这个方法的参数uri是代理地址和端口,就几行代码就能把票投上,用代理列表来个循环就ok了,但是我觉得HttpWebRequest.Proxy的速度有点慢,下次改成socket的试试。
private void send(string uri)
{
//需要post的数据
string sData="q_884%5B%5D=4316&user_5=&user_6=&user_8=&poll_id=7514";
HttpWebRequest Req = (HttpWebRequest)HttpWebRequest.Create("http://XXXXXX/polling.php");
WebHeaderCollection wh=Req.Headers;
byte[] b=Encoding.ASCII.GetBytes(sData);
//伪造header
Req.Proxy=new WebProxy("http://"+uri+"/",true);
Req.ContentType="application/x-www-form-urlencoded";
Req.Referer="http://XXXXXX/";
Req.Accept="image/gif, image/x-xbitmap, image/jpeg, image/pjhome.net" target="_blank">pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
Req.Headers.Add("Accept-Language","zh-cn");
Req.Headers.Add("Accept-Encoding","gzip, deflate");
Req.UserAgent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)";
Req.ContentLength=b.GetLength(0);
Req.Headers.Add("Cache-Control","no-cache");
Req.Method="POST";
Stream s=Req.GetRequestStream();
s.Write(b,0,b.GetLength(0));
s.Close();
WebResponse response=null;
response=Req.GetResponse();
/*for (int i=0;i Console.WriteLine(wh.AllKeys[i].ToString()+":"+wh[i].ToString());
}*/
string strReturn;
System.IO.StreamReader _read=new System.IO.StreamReader(response.GetResponseStream(),System.Text.Encoding.Default);
//textBox1.Text=_read.ReadToEnd();
strReturn=_read.ReadToEnd();
_read.Close();
if (strReturn.Length<1500)
{
oLog.arrMsg.Add(getnow().ToString()+"--"+ uri +"is failing...\r\n");
}
else
{
oLog.arrMsg.Add(getnow().ToString()+"--"+ uri +"is seccess...\r\n");
}
//string strresponse=Encoding.ASCII.GetString(((byte[])Req.responseBody));
}
经过分析发现这里的投票程序限制有三个,1、referer,2、IP,3、cookies。反正1和3都好解决,关键是2怎么办。本来拿我上次的拨号程序改吧改吧就给了人家,结果这几天他那个IP段的IP基本都已经投过票了。现在大部分IP都不能投了。于是又缠我改成多代理投票。
这个小程序代码分成三部分,一部分是读proxy列表的代码,我将列表处理成ArrayList.第二部分是投票的代码,这里伪造referer,读取代理投票。第三部分是投票日志。第一和第二部分在一个线程中运行,第三部分另外一个线程。主要还是说第二部分吧。
选中了.net中HttpWebRequest因为它和WebRequest类都有Proxy的方法。但是在WebRequest类中某些Headers的类别添加受到限制,如referer,而他的子类HttpWebRequest中倒是提供了referer属性的修改方法,所以就用HttpWebRequest了。整个代码都很简单,这个方法的参数uri是代理地址和端口,就几行代码就能把票投上,用代理列表来个循环就ok了,但是我觉得HttpWebRequest.Proxy的速度有点慢,下次改成socket的试试。
复制内容到剪贴板 程序代码
private void send(string uri)
{
//需要post的数据
string sData="q_884%5B%5D=4316&user_5=&user_6=&user_8=&poll_id=7514";
HttpWebRequest Req = (HttpWebRequest)HttpWebRequest.Create("http://XXXXXX/polling.php");
WebHeaderCollection wh=Req.Headers;
byte[] b=Encoding.ASCII.GetBytes(sData);
//伪造header
Req.Proxy=new WebProxy("http://"+uri+"/",true);
Req.ContentType="application/x-www-form-urlencoded";
Req.Referer="http://XXXXXX/";
Req.Accept="image/gif, image/x-xbitmap, image/jpeg, image/pjhome.net" target="_blank">pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
Req.Headers.Add("Accept-Language","zh-cn");
Req.Headers.Add("Accept-Encoding","gzip, deflate");
Req.UserAgent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)";
Req.ContentLength=b.GetLength(0);
Req.Headers.Add("Cache-Control","no-cache");
Req.Method="POST";
Stream s=Req.GetRequestStream();
s.Write(b,0,b.GetLength(0));
s.Close();
WebResponse response=null;
response=Req.GetResponse();
/*for (int i=0;i
}*/
string strReturn;
System.IO.StreamReader _read=new System.IO.StreamReader(response.GetResponseStream(),System.Text.Encoding.Default);
//textBox1.Text=_read.ReadToEnd();
strReturn=_read.ReadToEnd();
_read.Close();
if (strReturn.Length<1500)
{
oLog.arrMsg.Add(getnow().ToString()+"--"+ uri +"is failing...\r\n");
}
else
{
oLog.arrMsg.Add(getnow().ToString()+"--"+ uri +"is seccess...\r\n");
}
//string strresponse=Encoding.ASCII.GetString(((byte[])Req.responseBody));
}
评论: 1 | 引用: 0 | 查看次数: 3137
西马[2006-04-12 11:13 PM | | | 222.188.191.12 | | 回复]
沙发快成作弊专家了
发表评论