腾讯向大众提供了申请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号码的界面如下所示:

如何使用C#实现QQ号码的申请相关推荐

  1. html中qq号码怎么写,qq号码免费申请6位号的方法

    qq号码免费申请6位号的方法 qq号码免费申请6位号怎么操作?.很多人都知道,在国内,6位的QQ号几乎已经是绝版了,按照正常的申请根本就不可能得到,因为现在已经进入到10QQ号码的时代了,但是还有一种 ...

  2. QQ号码免费申请的骗术

    "快来看看,腾讯为庆祝腾讯QQ八周年,现在开放六位 QQ 号码免费申请,数量有限,送完即止,加油吧!!!" ­ ­ 如果你看到上面这样的信息千万别相信,这并不是腾讯的网站 这个网站 ...

  3. 解密:骗人的所谓“开放六位 QQ 号码免费申请”

    最近身边愈来愈认识的人士中了一个所谓的"开放六位 QQ 号码免费申请"的圈套,实质只是为一个卑劣的fs173.com网站做宣传. 该广告一般如下: HTTP://WWW.QQ.C0 ...

  4. C语言小明申请QQ号码

    问题描述     小明决定申请一个新的QQ号码,系统随机生成了若干个号码供他选择.小明的选号原则是: 1. 选择所有号码中各位数字之和最大的号码. 2. 如果有多个号码各位数字之和相同则选择数值最大的 ...

  5. QQ超级秘笈:免费申请QQ号码(转)

    QQ超级秘笈:免费申请QQ号码(转) 不知道从何时起,要想用QQ申请新的QQ号码简直成了"Mission: Impossible".虽然从声讯台和手机可以很方便的申请到新号码,但是 ...

  6. 申请QQ号码“永久保护”被拒,质疑腾讯服务

    我昨天晚上免费申请到了QQ号码8**88*8*8,有五个8(而且没有4),应该是不错的号了,运气不错嘛. 我立刻填写了全部完整详细的个人资料,申请"永久保护",但腾讯公司发邮件通知 ...

  7. HTML练习---QQ号码申请

    <html> <head> <title>百度一下,你就知道</title> </head> <body> <table ...

  8. Webview 打开qq聊天窗口,申请进群

    Webview打开qq聊天窗口,Webview申请进群 在网页上有点击添加官方QQ群功能,我用webview写后因为写了 public boolean shouldOverrideUrlLoading ...

  9. 腾讯43亿QQ号码用完后怎么办?

    开发者(KaiFaX) 面向全栈工程师的开发者专注于前端.Java/Python/Go/PHP的技术社区 作者 | 道哥 来源 | 爱码有道 最近有读者提问:听说腾讯QQ号码的理论最大值是43亿左右, ...

最新文章

  1. 零基础学习大数据开发需要多久能工作?
  2. UA OPTI512R 傅立叶光学导论22 透镜成像与傅立叶变换
  3. harbor 2.0.1安装部署
  4. HTML多选框滚动条,《HTM单选.doc
  5. 创建设计模式 - 抽象工厂设计模式
  6. DCS::TabNotebook
  7. Spring AOP会忽略从父类继承的方法
  8. mybatis运行流程
  9. MINIST数据集实践
  10. 使用ftp传输文件到arm板
  11. android远程打电话,Android打电话功能 Android实战教程第三篇之简单实现拨打电话功能...
  12. 参考平面及其高度_海图基准面、深度基准、标高等常用参考标准
  13. 人工智能的“虚假式繁荣”
  14. PCB之AD规则设置技巧
  15. 学java被“劝退”的第九天
  16. js炫酷烟花代码,手动自动燃放都可以哦
  17. 基于JavaWeb的在线外卖系统平台设计
  18. 机器学习各研究领域综述汇总!
  19. linux下使用如何使用多个CPU核
  20. 关于Transformer的通俗理解(一)

热门文章

  1. android 卸载残留代码,安卓手机怎么彻底清除卸载残留文件夹?如何彻底删除安卓手机上的残留软件[多图]...
  2. ncnn编译使用(一)
  3. excel函数技巧:什么是模糊查找,如何操作?
  4. GitHub Universe 转播 | Enterprise Day 2 日程
  5. 采用阿里的ius-release.rpm,安装最新版本的终端复用神器tmux
  6. Centos 7 一键安装Redash (Centos7 + Docker)
  7. Yarn管理页面中Aplication history无法访问问题以及Aggregation is not enabled问题
  8. 隐藏计算机关机键,Windows 10系统隐藏电源按钮、关机、睡眠、重启等
  9. saleae逻辑分析仪-串口
  10. 记录我对复指数信号的理解和学习过程