Python论坛  - 讨论区

标题:[python-chinese] 基于HTTP的QQ协议代码,Python实现登陆等操作!

2005年06月21日 星期二 08:49

梅劲松  stephen.cn at gmail.com
Tue Jun 21 08:49:50 HKT 2005

代码如下:
# -*- coding: cp936 -*- 
"""2005-06-15 
看到微程朋友分析基于http的QQ协议,于是准备写一个QQ程序。原以为有些包不能用了,后来灰衣人朋友的帮助下,才知道http通讯需要打开一次,关闭一次的。而不能象socket样,一直打开不关闭。
感谢微程和灰衣人朋友的帮助。关于协议大家可以看他的blog 
http://spaces.msn.com/members/mprogramer/Blog/cns!1pKnbff3FpJuGZcrsAlNZmZQ!147.entry
本程序为MIT授权 
如果需要转载本程序,请保留版权信息""" 
import urllib,httplib,md5,time 
class qq: 
   def __init__(self,qq="",pwd=""): 
       self.pwd=md5.new(pwd).hexdigest() 
       self.headers="" 
       self.qq=qq 
        

   def getdata(self): 
       self.conn=
httplib.HTTPConnection("tqq.tencent.com:8000")#这里是tqq.tencent.com的ip地址,也可以直接用域名
       self.conn.request("POST","", self.headers) 
       response = self.conn.getresponse()                                       
       print response.read().decode('utf-8').encode("cp936") 
       self.conn.close 

   def Login(self):#登陆 
       self.headers=("VER=1.0&CMD;=Login&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&PS;="+\ 
                     self.pwd+\ 
                     "&M5;=1&LC;=9326B87B234E7235") 
       self.getdata()       
        
        
   def Query_Stat(self):#在线好友 
       self.headers=("VER=1.0&CMD;=Query_Stat&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&TN;=50&UN;=0") 
                      
       self.getdata() 
        
   def List(self):#好友列表 
       self.headers=("VER=1.0&CMD;=List&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&TN;=160&UN;=0") 
        
       self.getdata() 

   def GetInfo(self,friend=""):#指定QQ号码的详细内容 
       self.headers=("VER=1.0&CMD;=GetInfo&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&LV;=2&UN;="+\ 
                     friend) 
        
       self.getdata() 

   def AddToList(self,friend=""):#增加指定QQ号码为好友 
       self.headers=("VER=1.0&CMD;=AddToList&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&UN;="+\ 
                     friend) 
        
       self.getdata() 

   def GetMsg(self):#获取消息 
       self.headers=("VER=1.0&CMD;=GetMsgEx&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq) 
        
       self.getdata() 

   def SendMsg(self,friend="",msg=""):#发送消息 
       self.headers=("VER=1.0&CMD;=CLTMSG&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&UN;="+\ 
                     friend+"&MG;="+\ 
                     msg.decode("cp936").encode('utf-8')) 
        
       self.getdata() 

   def Logout(self):#退出登陆 
       self.headers=("VER=1.0&CMD;=Logout&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq) 
        
       self.getdata() 

test=qq('号码','密码') 
test.Login() 
test.Query_Stat() 
test.List() 
test.GetInfo('他人QQ号码') 
test.AddToList('他人QQ号码') 
test.GetMsg() 
i=0 
while i<1000: 
   print i 
   time.sleep(0.9) 
   test.SendMsg('他人QQ号码',"一共有1000条消息,这是第"+str(i)+"条消息") 
   i = i+1 
test.Logout()


详细的请到http://bbs.chinaunix.net/forum/viewtopic.php?t=563093&show;_type=new查看。

-- 
梅劲松

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年06月21日 星期二 09:30

Neo Chan (netkiller) neo.chen at achievo.com
Tue Jun 21 09:30:17 HKT 2005

 
好贴,好贴...

请教梅大虾一个问题.

你是如何得到它的HTTP数据的..是用sniffer 吗??还是其它什么东东.得到
数据后怎样分析呢???
请介绍一下如何抓数据包和分析包..
我很想学这方面的东东..写下面的程序不难.难得是我不知怎样得到QQ的数
据...并分析..
例如:网游的外挂...哈哈.

这样说吧:不是有个故事吗?一个人向你讨饭..你是把你刚钓的鱼给他,还是教会他
钓鱼呢。。
道理是一样的..下面程序你给我们.我们是可以用.但我们根本不知它是如何实现
的..
再让我们写一个MSN的,POPO的..我们还是不会啊...还得上来问
你!!!!

无论是socket 还是http,smtp,nntp,pop...... 它的操作很简单就是send,receive.
难在抓数据包和分析包.

可能对有些人来说.抓数据包和分析包很简单...但对我们没接触过的人来说...根本不
知怎样 走进这个门槛儿.


Neo Chan (netkiller)
Best Regards, 73 de BG7NYT

Amateur Radio Callsign: BG7NYT
CQCQCQ This is BG7NYT Calling CQ and Stand By. 439.460MHz 



-----Original Message-----
From: python-chinese-bounces at lists.python.cn
[mailto:python-chinese-bounces at lists.python.cn] On Behalf Of 梅劲松 
Sent: Tuesday, June 21, 2005 8:50 AM
To: python-chinese at lists.python.cn
Subject: [python-chinese] 基于HTTP的QQ协议代码,Python实现登陆等操作!

代码如下:
# -*- coding: cp936 -*-
"""2005-06-15
看到微程朋友分析基于http的QQ协议,于是准备写一个QQ程序。原以为有些包不能用
了,后来灰衣人朋友的帮助下,才知道http通讯需要打开一次,关闭一次的。而不能象
socket样,一直打开不关闭。
感谢微程和灰衣人朋友的帮助。关于协议大家可以看他的blog
http://spaces.msn.com/members/mprogramer/Blog/cns!1pKnbff3FpJuGZcrsAlNZmZQ!1
47.entry
本程序为MIT授权
如果需要转载本程序,请保留版权信息""" 
import urllib,httplib,md5,time
class qq: 
   def __init__(self,qq="",pwd=""): 
       self.pwd=md5.new(pwd).hexdigest() 
       self.headers="" 
       self.qq=qq 
        

   def getdata(self): 
       self.conn=
httplib.HTTPConnection("tqq.tencent.com:8000")#这里是tqq.tencent.com的ip地
址,也可以直接用域名
       self.conn.request("POST","", self.headers) 
       response = self.conn.getresponse()

       print response.read().decode('utf-8').encode("cp936") 
       self.conn.close 

   def Login(self):#登陆 
       self.headers=("VER=1.0&CMD;=Login&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&PS;="+\ 
                     self.pwd+\ 
                     "&M5;=1&LC;=9326B87B234E7235") 
       self.getdata()       
        
        
   def Query_Stat(self):#在线好友 
       self.headers=("VER=1.0&CMD;=Query_Stat&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&TN;=50&UN;=0") 
                      
       self.getdata() 
        
   def List(self):#好友列表 
       self.headers=("VER=1.0&CMD;=List&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&TN;=160&UN;=0") 
        
       self.getdata() 

   def GetInfo(self,friend=""):#指定QQ号码的详细内容 
       self.headers=("VER=1.0&CMD;=GetInfo&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&LV;=2&UN;="+\ 
                     friend) 
        
       self.getdata() 

   def AddToList(self,friend=""):#增加指定QQ号码为好友 
       self.headers=("VER=1.0&CMD;=AddToList&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&UN;="+\ 
                     friend) 
        
       self.getdata() 

   def GetMsg(self):#获取消息 
       self.headers=("VER=1.0&CMD;=GetMsgEx&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq) 
        
       self.getdata() 

   def SendMsg(self,friend="",msg=""):#发送消息 
       self.headers=("VER=1.0&CMD;=CLTMSG&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq+"&UN;="+\ 
                     friend+"&MG;="+\ 
                     msg.decode("cp936").encode('utf-8')) 
        
       self.getdata() 

   def Logout(self):#退出登陆 
       self.headers=("VER=1.0&CMD;=Logout&SEQ;="+\ 
                     str(int(time.time()*100)%(10**5))+"&UIN;="+\ 
                     self.qq) 
        
       self.getdata() 

test=qq('号码','密码')
test.Login()
test.Query_Stat()
test.List()
test.GetInfo('他人QQ号码')
test.AddToList('他人QQ号码')
test.GetMsg()
i=0
while i<1000: 
   print i 
   time.sleep(0.9) 
   test.SendMsg('他人QQ号码',"一共有1000条消息,这是第"+str(i)+"条消息") 
   i = i+1
test.Logout()


详细的请到
http://bbs.chinaunix.net/forum/viewtopic.php?t=563093&show;_type=new查看。

--
梅劲松
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Neo Chan.vcf
Type: text/x-vcard
Size: 1081 bytes
Desc: not available
Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20050621/4a3b64fc/NeoChan.vcf

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年06月21日 星期二 09:42

Neo Chan (netkiller) neo.chen at achievo.com
Tue Jun 21 09:42:18 HKT 2005

Skipped content of type multipart/mixed-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3066 bytes
Desc: not available
Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20050621/2e76accc/smime-0001.bin

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号