如何使用C#实现QQ号码的申请

腾讯向大众提供了申请QQ的界面,方便很多潜在用户加入QQ大军中,注册页面是http://reg.qq.com ,为了限制用户的过度使用,设置了验证码、IP限制等手段,一般用户默认一天只能申请几个QQ号码,号码是随机生成的,当然好的号码是不会有的,这些是腾讯的资源,需要付费才能获取到。

本文主要介绍如何利用C#来实现QQ号码的快速、批量申请操作,以及考虑如何加入宽带拨号的方式实现IP的限制,尽可能的申请到更多的QQ号码,以供他用。

先看看演示程序的界面效果:

 =====》

上面是我使用C#实现QQ号码申请的演示程序,是应用的雏形。其中为了方便,把用户需要填写的信息封装起来,用户开通QQ号码后,再自行修改即可,只需要输入验证码即可快速申请到QQ。

1、首先需要获取验证码,然后供用户输入并提交申请,这里我使用了后台线程进行处理,提高用户界面的响应效果。

     public partial class Form1 : Form

    {
         private  CookieContainer cookieReg  =   new  CookieContainer();
         private  BackgroundWorker worker  =   new  BackgroundWorker();
         private  WebProxy proxy;


         public  Form1()
        {
            InitializeComponent();

            worker.DoWork  += new  DoWorkEventHandler(worker_DoWork);
            worker.RunWorkerCompleted  +=   new  RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);

             // proxy = new WebProxy("120.203.214.184", 80);
        }

         private   void  GetVerifyImage()
        {
            worker.RunWorkerAsync( " GetImage " );
        }

         void  worker_DoWork( object  sender, DoWorkEventArgs e)
        {
             string  newverifyUrl  =   " http://captcha.qq.com/getimage?aid=1007901& "   +
                 new  Random().NextDouble()  +   new  Random().Next( 10 )  +   new  Random().Next( 10 );

            cookieReg  =   new  CookieContainer();
            HttpHelper httpHelper  =   new  HttpHelper();
             string  regurl  =   " http://reg.qq.com " ;
            httpHelper.GetHtml(regurl, cookieReg, regurl, proxy);

             using  (Stream s  =  httpHelper.GetStream(newverifyUrl, cookieReg, regurl, proxy))
            {
                 if  (s  ==   null )
                {
                    MessageUtil.ShowWarning( " 获取登陆码错误,请检查您的网络! " );
                     return ;
                }
                e.Result  =  Image.FromStream(s);
            }
        }

         void  worker_RunWorkerCompleted( object  sender, RunWorkerCompletedEventArgs e)
        {
            Image image  =  e.Result  as  Image;
             if  (image  !=   null )
            {
                 this .pictureBox1.Image  =  image;
            }
        }

 

 

2、 处理申请操作结果显示。申请QQ的处理操作相对比较繁琐,我把它封装在一个处理函数中,这样我们在事件处理的时候,先宏观处理结果,然后在进一步细化具体的操作,如下所示:

         private   void  btnApplyNumber_Click( object  sender, EventArgs e)
        {
             if  ( this .txtVerifyCode.Text.Length  <   4 )
            {
                SetTips( " 请输入验证码 " );
                 this .txtVerifyCode.Focus();
            }

             string  qqnumber  =  ApplyQQ();
             if  ( ! string .IsNullOrEmpty(qqnumber))
            {
                SetTips( string .Format( " 恭喜您,申请到QQ {0} " , qqnumber));
                LogTextHelper.WriteLine( string .Format( " {0}----{1} " , qqnumber,  " 123abc " ));
            }
             else
            {
                 if  (getnumHtml.Contains( " 此IP申请的操作过于频繁 " ))
                {
                    SetTips( " IP操作过于频繁 " );
                }
                 else
                {
                    SetTips( " 申请失败,请重试 " );
                }
            }
            GetVerifyImage();
        }

 

 以上先对申请的操作进行处理,并记录最后申请结果页面,如果页面有一些特殊的如IP操作频繁的信息,则提示用户IP操作的问题,方便采取如“手工拨号”等方式进行处理,实现IP的变化,从而可以申请更多的QQ号码。如果一切正常,返回QQ号码,那么记录到相关的媒介并显示即可。

 

3、 详细QQ申请操作处理逻辑。申请QQ的处理,不是一般的麻烦,为了不给用户识别相应的提交内容,腾讯把申请的资料进行乱码化处理,并把顺序打乱,把相应的名称处理成0f2b4766321c2d6a4c7a61515324这样不可识别的字符串,然后统一提交,一般人是识别不了这些字符串的,字符串不是加密串,是随机按照规则组合而成,很变态。这里我提供大致的思路,就是先获取Cookie的相关信息,把里面的变量作为基础,对数据进行处理,然后作为相应的字段名称,混合提交的内容,一起POST到服务器,如果成功,则返回QQ号码,否则提示相应的错误信息。

         private   string  getnumHtml  =   "" ; // 最后申请的网页内容
         private   string  ApplyQQ()
        {
             string  html  =   "" ; //  "g_dataArray=new Array(new Array(/"0f2b4766321c2d6a4c7a61515324/",/"4621587a340437624e71315a5a2b/",/"23755a6a29192c7b506d73474536/",/"4f21596e22043464537b774b493a/",/"2d2d5b6a01163078567072577102/",/"4121587a340437624e7130525223/",/"4f2d486122002679117b65555728/",/"047548612200267910736d5d5f30/",/"306d4a6024193779584b55656718/",/"2574486122002679136b75454738/",/"33344a66250e703f1429370b0970/",/"252348683412256c49766a585c2d/",/"161059673e192645547262564206/"),new Array(9796,9806,9807,9803,9797,9795,9793,9798,9802,9801,9800,9799,9792),/"/cgi-bin/getnum/");";
             string  regurl  =   " http://reg.qq.com/ " ;
            HttpHelper helper  =   new  HttpHelper();

             int  BaseNum  =   0 ;
            BaseNum  =  GetBaseNumByCookieSkey(cookieReg);     

             string  nick  =   " test " ;
             string  pass  =   " 123abc " ;
             string  repass =  pass;
             string  year  =   " 2009 " ;
             string  month  =   " 12 " ;
             string  day  =   " 13 " ;
             string  sex  =    " 1 " ;
             string  verifycode  =   this .txtVerifyCode.Text;
             string  province  =   " 11 " ;
             string  city  =   " 1 " ;
            List < string >  ElementsArrName  =  GetElementArray(nick, pass, repass, year, month, day, sex, verifycode, province, city);
            List < short >  DataArrayShort  =   new  List < short > ();
            List < string >  DataArrayLong  =   new  List < string > ();

            Thread.Sleep( 100 );
             string  regurl2  =   " http://reg.qq.com/cgi-bin/checkconn?seed "   +   new  Random().NextDouble()  +   new  Random().Next( 10 );

            html  =  helper.GetHtml(regurl2, cookieReg, regurl, proxy);
             //  html = "g_dataArray=new Array(new Array(/"0f2b4766321c2d6a4c7a61515324/",/"4621587a340437624e71315a5a2b/",/"23755a6a29192c7b506d73474536/",/"4f21596e22043464537b774b493a/",/"2d2d5b6a01163078567072577102/",/"4121587a340437624e7130525223/",/"4f2d486122002679117b65555728/",/"047548612200267910736d5d5f30/",/"306d4a6024193779584b55656718/",/"2574486122002679136b75454738/",/"33344a66250e703f1429370b0970/",/"252348683412256c49766a585c2d/",/"161059673e192645547262564206/"),new Array(9796,9806,9807,9803,9797,9795,9793,9798,9802,9801,9800,9799,9792),/"/cgi-bin/getnum/");";
            GetDataArray(html,  ref  DataArrayShort,  ref  DataArrayLong);

             string  postData  =  GetPostData(ElementsArrName, BaseNum, DataArrayShort, DataArrayLong);
             // MessageBox.Show(postData);

            Thread.Sleep( 100 );
             string  regurl3  =   " http://reg.qq.com/cgi-bin/getnum " ;
            html  =  helper.GetHtml(regurl3, cookieReg, postData,  true , regurl, proxy);
            getnumHtml  =  html; // 记录最后分析的内容,以便进一步分析操作

            Regex re  =   new  Regex( " var//s*xyz=/ " (. *? )/ " ; " , RegexOptions.IgnoreCase  |  RegexOptions.Singleline  |  RegexOptions.IgnorePatternWhitespace);
            Match mc  =  re.Match(html);
             if  ( ! mc.Success)
            {
                 return   "" ;
            }
             string  qqnumber  =  mc.Groups[ 1 ].Value;
             return  qqnumber;
        }   

 

上面注释的部分,就是获取到的相关信息,乱码一片,不过既然是本地处理,也是有规律可循的,本文只是介绍相关的规则,详细实现不在一一呈现,主要的处理逻辑就是获取本地Cookie的某项内容,并把内容进行截断,作为一个BaseNum,然后把获取到的数组进行乱码化,作为提交字段的名称,然后一一放置相关的内容,提交到服务处理。

上面只是一个简单的Demo,一般情况下,申请3~10左右的号码可能就会因为IP的限制,而不能继续,需要暂停几个小时才能继续可以申请一个左右,第二天才可以继续申请更多的号码。

 为了更好的申请更多的QQ号码,一般需要加入拨号这种方式来处理IP的限制,如我的QQ搜通天中应用来批量申请QQ号码的界面如下所示:

 

 如果需要了解详细,可以下载该软件来玩玩,熟悉下QQ申请的操作模式。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值