关于 【通过代理访问】 的研究,【突破 IP ,“无限制”投票】
2012-11-25 22:26
141 查看
相信大家身边有很多朋友有时候请大家投各种票,刚好,这会儿也有朋友找我投票,身为IT程序开发人员,总觉得投机取巧一点。
如果仅仅只是点击即可投票,那相对而言就简单了,然而,有些网站限制IP,那么情况就不一样了。
如果您是拨号上网用户,可以重连路由,改变外网IP地址,不过,这种方式有时候也不奏效。
于是我采用了IP代理的方式来自动投票。
这样,一般人会这样:更改IE浏览器的代理设置,打开IE浏览器输入投票网址(这里需要各位自己找直接投票的url)投票。
但是问题又出来了,每次投票都得重启浏览器才行,我个人觉得浏览器打开的一些设置已经保存在了缓存中
虽然在更改代理的时候更改了注册表项值,但浏览器并没有实时去读取这个值
因此,鄙人编写了一个小程序用于自动投票。下面是该程序的关键代码:
![](http://pic002.cnblogs.com/images/2012/285774/2012112522210614.jpg)
private void StartVote()
{
this.lbl_daili.Text = lst.Items.Count.ToString(); //获取代理
this.wbCnblog.Focus(); //浏览器窗口获取焦点。由于有些投票连接直接弹出alert提示,因此获取焦点,以自动回车防止程序暂停
int itemcount = lst.Items.Count;//获取代理列表,已循环代理访问
string[] urls = new string[itemcount]; //用于保存所有将要访问的投票链接地址
string[] proxyurl_ip = new string[itemcount];// 代理 IP
string[] proxyurl_port = new string[itemcount];// 代理 Port
Random rad = new Random();
int y = rad.Next(0, 72); // 由于有些网站投票需要限制用户名,因此随即生成用户名(数组)
for (int i = 0; i < itemcount; i++)
{
int x = y + i;
if (x >= 72)
{
x = x % 72;
}
urls[i] = "http://www.xxoo.com?name=" + mingzi[x];
lst.Items[i].Selected = true; //选择当前item,提取IP 以及 端口号,保存在数组中
proxyurl_ip[i] = lst.SelectedItems[0].SubItems[0].Text;
proxyurl_port[i] = lst.SelectedItems[0].SubItems[1].Text;
}
GetHtml(urls, proxyurl_ip, proxyurl_port); //访问站点获取站点内容
Application.Exit();//程序结束
}
访问站点获取HTML:
#region 自定义方法
bool loading = true; //该变量表示网页是否正在加载.
string html = string.Empty;
WebBrowser browser = new WebBrowser();
int successcount = 0;
int failurecount = 0;
int bugcount = 0;
string temp_proxy = "";
string current_proxy = ""; //当前代理,用于些日志用到,相当于排他锁的作用
public void GetHtml(string[] urls, string[] proxyurls_ip, string[] proxyurls_port)
{
wbCnblog.DocumentText = "页面加载中...";
wbCnblog.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated);//页面加载时执行 browser_Navigated ,获取返回内容,并写成功日志
for (int i = 0; i < urls.Length; i++)
{
loading = true; //表示正在加载
NaviByProxy( //代理访问URL
proxyurls_ip[i], //选中的代理IP地址
proxyurls_port[i], //选中的代理IP的端口
urls[i]//url地址
);
while (loading) //记录状态
{
this.txt_info.Text = "正通过代理" + proxyurls_ip[i] + ":" + proxyurls_port[i] + "进行投票";
this.textBox_url.Text = urls[i];
current_proxy = proxyurls_ip[i] + ":" + proxyurls_port[i];
try
{
Application.DoEvents();//等待本次加载完毕才执行下次循环.
}
catch
{
bugcount++;
this.txt_result.Text = "成功" + successcount + "个" + "/失败" + failurecount + "个/错误" + bugcount + "个";
continue;
}
}
}
this.txt_result.Text += "此轮投票已经结束";
}
#endregion
以下代码则是 加载内容:
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// Create by Charles 2012-11-25 13:23
void browser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
if (current_proxy != temp_proxy) //排他锁的作用
{
html = wbCnblog.DocumentText; //获取到的html.
this.wbCnblog.DocumentText = "";
if (html.Contains("生活快乐"))
{
//this.txt_result.Text += html;
this.txt_status.Text = "成功";
successcount++;
this.txt_result.Text = "成功" + successcount + "个" + "/失败" + failurecount + "个/错误" + bugcount + "个";
this.txt_success.Text += current_proxy + "|";
WriteText(current_proxy + "----投票成功----" + DateTime.Now + Environment.NewLine); //写日志文件
}
else
{
this.txt_status.Text = "失败";
failurecount++;
this.txt_result.Text = "成功" + successcount + "个" + "/失败" + failurecount + "个/错误" + bugcount + "个";
}
loading = false;//在加载完成后,将该变量置为false,下一次循环随即开始执行.
this.wbCnblog.Focus();
SendKeys.Send("{Enter}"); //如果存在弹窗,回车确定,防止程序暂定
//this.Focus();
//SendKeys.Send("{Enter}");
//this.wbCnblog.Document.Focus();
//SendKeys.Send("{Enter}");
temp_proxy = current_proxy;
}
}
关于写日志文件,我想应该就相对来说简单多了,就是简单的写文本文件
/// <summary>
/// 写成功日志文件
/// </summary>
/// <param name="text"></param>
// Create By Charles 2012-11-25 21:31
public void WriteText(string text)
{
FileStream fs = new FileStream(Path.Combine(Application.StartupPath, "succes_log.txt"), FileMode.Append);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
sw.Write(text);
sw.Close();
fs.Close();
}
差点忘了,还有一个很重要的代码,便是刷新 代理 注册表
#region 读取并设置浏览器的proxy server信息
RegistryKey pregkey;
pregkey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true);
if (pregkey == null)
{
this.txt_info.Text = "键值不存在!";
}
else
{
pregkey.SetValue("ProxyServer", lst.SelectedItems[0].SubItems[0].Text + ":" + lst.SelectedItems[0].SubItems[1].Text);
this.txt_info.Text = pregkey.GetValue("ProxyServer").ToString();
}
#endregion
知识点差不多就这些了,有兴趣的朋友可以留言交流交流
下载地址:http://download.csdn.net/download/shenchaoming/5133965
如果仅仅只是点击即可投票,那相对而言就简单了,然而,有些网站限制IP,那么情况就不一样了。
如果您是拨号上网用户,可以重连路由,改变外网IP地址,不过,这种方式有时候也不奏效。
于是我采用了IP代理的方式来自动投票。
这样,一般人会这样:更改IE浏览器的代理设置,打开IE浏览器输入投票网址(这里需要各位自己找直接投票的url)投票。
但是问题又出来了,每次投票都得重启浏览器才行,我个人觉得浏览器打开的一些设置已经保存在了缓存中
虽然在更改代理的时候更改了注册表项值,但浏览器并没有实时去读取这个值
因此,鄙人编写了一个小程序用于自动投票。下面是该程序的关键代码:
![](http://pic002.cnblogs.com/images/2012/285774/2012112522210614.jpg)
private void StartVote()
{
this.lbl_daili.Text = lst.Items.Count.ToString(); //获取代理
this.wbCnblog.Focus(); //浏览器窗口获取焦点。由于有些投票连接直接弹出alert提示,因此获取焦点,以自动回车防止程序暂停
int itemcount = lst.Items.Count;//获取代理列表,已循环代理访问
string[] urls = new string[itemcount]; //用于保存所有将要访问的投票链接地址
string[] proxyurl_ip = new string[itemcount];// 代理 IP
string[] proxyurl_port = new string[itemcount];// 代理 Port
Random rad = new Random();
int y = rad.Next(0, 72); // 由于有些网站投票需要限制用户名,因此随即生成用户名(数组)
for (int i = 0; i < itemcount; i++)
{
int x = y + i;
if (x >= 72)
{
x = x % 72;
}
urls[i] = "http://www.xxoo.com?name=" + mingzi[x];
lst.Items[i].Selected = true; //选择当前item,提取IP 以及 端口号,保存在数组中
proxyurl_ip[i] = lst.SelectedItems[0].SubItems[0].Text;
proxyurl_port[i] = lst.SelectedItems[0].SubItems[1].Text;
}
GetHtml(urls, proxyurl_ip, proxyurl_port); //访问站点获取站点内容
Application.Exit();//程序结束
}
访问站点获取HTML:
#region 自定义方法
bool loading = true; //该变量表示网页是否正在加载.
string html = string.Empty;
WebBrowser browser = new WebBrowser();
int successcount = 0;
int failurecount = 0;
int bugcount = 0;
string temp_proxy = "";
string current_proxy = ""; //当前代理,用于些日志用到,相当于排他锁的作用
public void GetHtml(string[] urls, string[] proxyurls_ip, string[] proxyurls_port)
{
wbCnblog.DocumentText = "页面加载中...";
wbCnblog.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated);//页面加载时执行 browser_Navigated ,获取返回内容,并写成功日志
for (int i = 0; i < urls.Length; i++)
{
loading = true; //表示正在加载
NaviByProxy( //代理访问URL
proxyurls_ip[i], //选中的代理IP地址
proxyurls_port[i], //选中的代理IP的端口
urls[i]//url地址
);
while (loading) //记录状态
{
this.txt_info.Text = "正通过代理" + proxyurls_ip[i] + ":" + proxyurls_port[i] + "进行投票";
this.textBox_url.Text = urls[i];
current_proxy = proxyurls_ip[i] + ":" + proxyurls_port[i];
try
{
Application.DoEvents();//等待本次加载完毕才执行下次循环.
}
catch
{
bugcount++;
this.txt_result.Text = "成功" + successcount + "个" + "/失败" + failurecount + "个/错误" + bugcount + "个";
continue;
}
}
}
this.txt_result.Text += "此轮投票已经结束";
}
#endregion
以下代码则是 加载内容:
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// Create by Charles 2012-11-25 13:23
void browser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
if (current_proxy != temp_proxy) //排他锁的作用
{
html = wbCnblog.DocumentText; //获取到的html.
this.wbCnblog.DocumentText = "";
if (html.Contains("生活快乐"))
{
//this.txt_result.Text += html;
this.txt_status.Text = "成功";
successcount++;
this.txt_result.Text = "成功" + successcount + "个" + "/失败" + failurecount + "个/错误" + bugcount + "个";
this.txt_success.Text += current_proxy + "|";
WriteText(current_proxy + "----投票成功----" + DateTime.Now + Environment.NewLine); //写日志文件
}
else
{
this.txt_status.Text = "失败";
failurecount++;
this.txt_result.Text = "成功" + successcount + "个" + "/失败" + failurecount + "个/错误" + bugcount + "个";
}
loading = false;//在加载完成后,将该变量置为false,下一次循环随即开始执行.
this.wbCnblog.Focus();
SendKeys.Send("{Enter}"); //如果存在弹窗,回车确定,防止程序暂定
//this.Focus();
//SendKeys.Send("{Enter}");
//this.wbCnblog.Document.Focus();
//SendKeys.Send("{Enter}");
temp_proxy = current_proxy;
}
}
关于写日志文件,我想应该就相对来说简单多了,就是简单的写文本文件
/// <summary>
/// 写成功日志文件
/// </summary>
/// <param name="text"></param>
// Create By Charles 2012-11-25 21:31
public void WriteText(string text)
{
FileStream fs = new FileStream(Path.Combine(Application.StartupPath, "succes_log.txt"), FileMode.Append);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
sw.Write(text);
sw.Close();
fs.Close();
}
差点忘了,还有一个很重要的代码,便是刷新 代理 注册表
#region 读取并设置浏览器的proxy server信息
RegistryKey pregkey;
pregkey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true);
if (pregkey == null)
{
this.txt_info.Text = "键值不存在!";
}
else
{
pregkey.SetValue("ProxyServer", lst.SelectedItems[0].SubItems[0].Text + ":" + lst.SelectedItems[0].SubItems[1].Text);
this.txt_info.Text = pregkey.GetValue("ProxyServer").ToString();
}
#endregion
知识点差不多就这些了,有兴趣的朋友可以留言交流交流
下载地址:http://download.csdn.net/download/shenchaoming/5133965
相关文章推荐
- 关于 【通过代理访问】 的研究,【突破 IP ,“无限制”投票】
- apache 反向代理的时候,通过域名访问是,出现跳转到ip或者无权访问的情况
- 关于腾讯云通过ip无法访问搭建的网站(无法访问)
- 关于在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程
- 通过上次写的自动获取IP代理池,访问whatismyip,来测试ip代理访问
- 关于投票系统刷票方式原理(突破ip限制刷票PHP版)
- 关于SharePoint通过IP访问的时候报错问题
- 如何通过IP访问virtualbox虚拟机的ubuntu server系统
- 解决JBoss只能通过localhost访问不能通过IP的问题
- Java网络编程从入门到精通(3):为什么不能直接通过IP访问网站
- 【经验随笔】Java通过代理访问互联网平台提供的WebService接口的一种方法
- etcd 修改通过Ip访问方式
- 阿里云服务器安装完apache通过IP访问无反应
- react flux的坑之(二) 启动成功后,无法通过ip访问 webpack
- Tomcat 部署 Web 通过 ip 直接访问项目
- https 通过Fiddler代理访问 (一)
- 关于动态代理的研究
- 通过 floating IP 访问 VIP - 每天5分钟玩转 OpenStack(126)
- 内网通过外网IP访问内网服务器?