| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10646 人关注过本帖
标题:关于 【通过代理访问】 的研究,【突破 IP ,“无限制”投票】
只看楼主 加入收藏
shenchaoming
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-9-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
关于 【通过代理访问】 的研究,【突破 IP ,“无限制”投票】
相信大家身边有很多朋友有时候请大家投各种票,刚好,这会儿也有朋友找我投票,身为IT程序开发人员,总觉得投机取巧一点。

如果仅仅只是点击即可投票,那相对而言就简单了,然而,有些网站限制IP,那么情况就不一样了。

如果您是拨号上网用户,可以重连路由,改变外网IP地址,不过,这种方式有时候也不奏效。

于是我采用了IP代理的方式来自动投票。

这样,一般人会这样:更改IE浏览器的代理设置,打开IE浏览器输入投票网址(这里需要各位自己找直接投票的url)投票。

但是问题又出来了,每次投票都得重启浏览器才行,我个人觉得浏览器打开的一些设置已经保存在了缓存中

虽然在更改代理的时候更改了注册表项值,但浏览器并没有实时去读取这个值

因此,鄙人编写了一个小程序用于自动投票。下面是该程序的关键代码:

        投票实例,服务器有点慢,可能需要等十几秒钟,弹框提示即可

          http://www.

        如果兄弟投了,鄙人十分感谢,好啦,咱们还是交流学习吧:

程序代码:
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." + 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((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
      
        知识点差不多就这些了。

[ 本帖最后由 shenchaoming 于 2012-11-26 01:31 编辑 ]
搜索更多相关主题的帖子: 用户 IP地址 IE浏览器 代理 
2012-11-25 22:17
不会哭的面具
Rank: 2
等 级:论坛游民
帖 子:10
专家分:17
注 册:2012-11-25
收藏
得分:7 
- - 牛人不解释.
2012-11-26 00:02
mmxo
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:189
专家分:1090
注 册:2012-11-7
收藏
得分:7 
请问牛人你是如何通过代码找到代理服务器的,鄙人前两个星期刚好也研究过这个,结果是发现找到的代理服务器通过他们去访问国内的好多网站都不行(例如百度,就是一黑屏),当然,没有全部找完,只是找到了几十个,不知牛人是否知道这是为什么?是否如果是国内的代理服务器就可以正常访问了呢?还望赐教!

为提高中华编程水平而奋斗
2012-11-26 00:20
sqlcon
Rank: 2
等 级:论坛游民
威 望:1
帖 子:20
专家分:98
注 册:2012-10-31
收藏
得分:6 
牛人,学习了!
2012-11-26 00:42
shenchaoming
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-9-2
收藏
得分:0 
回复 3楼 mmxo
没有使用自动获取功能,代理是从网上copy,直接粘贴到文本文件 (不用做处理)使用花刺代理检测出能匹配的代理即可。然后使用本软件导入即可呈现。
2012-11-26 13:15
shenchaoming
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-9-2
收藏
得分:0 
回复 3楼 mmxo
抓取 也并不是 不可以。找个链接,使用软件访问,获取HTML,查看该网站源码,根据其格式,自动匹配即可。
2012-11-26 13:16
快速回复:关于 【通过代理访问】 的研究,【突破 IP ,“无限制”投票】
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047934 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved