在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

判断登录的QQ是否已经加入指定的QQ群

C# 清风 500℃ 0评论

一、背景

朋友给了一个小的Windows应用程序,打开这个应用程序会让登录QQ,然后会判断登录的QQ是不是已经加入了指定的QQ群。如果已经加入,则可以继续使用软件,否则就退出这个程序,大致就是这样。朋友希望知晓这种判断qq是否加入指定QQ群的方法。如下图:

二、分析

这里使用fiddler进行抓包看一下,通过抓包结果来看,这个程序首先访问了http://qun.qzone.qq.com/,然后进行了授权登录,登成功之后就会回调到http://qun.qzone.qq.com/上,然后所有群号一览无余,就可以判断指定的群号了,基本上就是上图看到的界面了。fiddler抓包图如下:

三、实现

这里使用Microsoft .net的Windows Form实现,使用WebBrowser控件加载http://qun.qzone.qq.com/,登录成功只有使用正则匹配指定的群号来完成操作。代码大致如下:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.Navigate("http://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=549000912&daid=5&style=40&s_url=http://qun.qzone.qq.com/group");
            webBrowser1.ProgressChanged += WebBrowser1_ProgressChanged;
            webBrowser1.Navigated += WebBrowser1_Navigated;
        }

        private void WebBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            if (webBrowser1.Url.ToString().StartsWith("http://qun.qzone.qq.com"))
            {
                this.Hide();
            }
        }

        private void WebBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
        {
            
            if (webBrowser1.Url.ToString().StartsWith("http://qun.qzone.qq.com"))
            {
                HtmlElement groupList = webBrowser1.Document.GetElementById("my_group_list_container");
                if (groupList == null)
                {
                    return;
                }
                webBrowser1.ProgressChanged -= WebBrowser1_ProgressChanged;
                string groupListText = webBrowser1.DocumentText;
                string groupid = "这里是QQ群的ID";
                if (Regex.IsMatch(groupListText, $"data-groupid=\"{groupid}\""))
                {
                    MessageBox.Show("验证成功");
                    CloseChrome();
                    Application.Exit();
                    
                }
                else
                {
                    MessageBox.Show("请加指定交流群入本群");
                    CloseChrome();
                    Application.Exit();
                }
            }
        }
        public void CloseChrome()
        {
            if (webBrowser1 != null)
            {
                webBrowser1.Dispose();
            }
        }

    }
}

 

四、预览

五、总结

这个软件就登录的技术来看,没有任何难度可言,其实就是通过浏览器相关控件加载QQ官方服务,然后通过控件进行采集数据。我个人还是不建议使用这类程序,因为登录成功后其可以默默无闻的获取你所有的群号,群发的动态、以及群共享的资源等等。如果改变一下访问地址,如QQ空间,就直接登录成功,那么就可以采集到你空间所有的信息,例如:照片、日志、说说等等。

六、实例下载

WindowsFormsApp1.zip

 

 

 

 

转载请注明:清风博客 » 判断登录的QQ是否已经加入指定的QQ群

喜欢 (5)or分享 (0)
支付宝扫码打赏 微信打赏
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址