标题:关于 【通过代理访问】 的研究,【突破 IP ,“无限制”投票】
取消只看楼主
shenchaoming
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-9-2
结帖率:100%
已结贴  问题点数:20 回复次数:2 
关于 【通过代理访问】 的研究,【突破 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
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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-388400-1-1.html




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

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