这两天我家北鼻给我出了个小难题,让我帮她投票一个网站。并问我如何能够伪造访问网页的IP地址,这可是给我出了个大难题,整理一晚上才有点眉目
一、基本思路分为两步
1、获取投票的真实路径
真实路径就是在投票页面选择投票的项目后,网页提交到后台处理的页面。通常用GET或者POST的方式。由于投票页面都会对后台处理的网址做一点小处理,经常是通过javascript进行处理。如何提取就不再详述,仁者见仁了。
2、突破ip限制进行循环投票
通常投票发起人为了保证所谓的公平,会对每个ip地址投票的次数进行显示。如:每个ip能投10次。由于伪造访问服务器的$_server[ remote_addr ]基本是不可能的事情。所以只能另辟蹊径,主要就是使用了HTTP代理服务器。获取代理服务器的方法当然就是度娘了搜索了,将网页提供的HTTP代理服务器的端口与IP整理成程序能够识别的格式。能够使得程序一条一条的解读。
二、概念阐述完毕,分享代码部分
1、以下该投票程序的核心逻辑代码,当然是最简单的逻辑。我个人比较懒惰觉得速度不快就多开几个窗口便是,有能力的人也可能在这基础上稍加变动,如:多线程,改成winform程序等。提高程序的操作性和速度。
FileStream fs = new FileStream("ip.txt", FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string str;
string[] str1 = new string[2];
while (!sr.EndOfStream)
{
str = sr.ReadLine();
str1 = str.Split(':');
string s1 = str1[0];
string s2 = str1[1];
int i = 0;
for (i = 0; i < 100; i++)
{
try
{
HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create("http://www.baidu.com");
//这的网站即便是投票记录到数据库的处理页面
httpRequest.Timeout = 5000;
//设置timeout时间,并不是每个带服务器都有用的
httpRequest.Method = "GET";
System.Net.WebProxy proxy = new WebProxy(s1, Convert.ToInt32(s2));
//设置代理的对象信息
httpRequest.Proxy = proxy;
//Proxy赋值对象
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
StreamReader sr1 = new StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312"));
string result = sr1.ReadToEnd();
result = result.Replace("\r", "").Replace("\n", "").Replace("\t", "");
if (result.Contains("######"))
//从反馈的html中判断投票是否成功
{
Console.WriteLine("投过了:" + s1);
break;
}
Console.WriteLine(s1+":"+result);
int status = (int)httpResponse.StatusCode;
sr1.Close();
}
catch {
//代理服务器超时处理
Console.WriteLine("超时:"+s1);
break;
}
}
}
sr.Close();
fs.Close();
2、代理服务器的格式为XXX.XXX.XXX.XXX:PORXY,将代理服务器写入IP.txt放到程序的可执行文件的同目录下。IP.txt内容例子如下:
1.85.2.253:8001
1.93.8.169:3128
1.255.53.81:80
5.56.12.5:8080
5.56.61.185:12980
5.56.61.185:19350
5.178.66.108:3128
5.206.237.26:8080
5.226.86.83:80
27.116.62.75:8080
……
#代理服务器一般有效时间比较短,最好百度获取最新的!
工程项目打包下载地址如下:网络投票程序.rar