分享
 
 
 

如何用VB编写你自己的MSN即时通讯软件

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

作者姓名:杨忠勋

作者简介:专业:计算机软件开发与应用

语言能力:Toefl 633 Gre 2140

Email:zhongxunyang@yahoo.com.cn

Oicq:171704474

调试环境:VB6.0

你用VB已经有很长时间了,一直疑惑MSN是如何工作的。现在你不用再为这个问题苦恼了,这篇文章不仅告诉你MSN是如何工作的,甚至还告诉你如何用VB编出你自己的MSN即时通讯软件。

我们可以把MSN的工作机制分成两个阶段:

认证阶段

认证阶段包括登陆到MSN即时通的服务器并且取得好友列表

即时通讯阶段

即时通讯阶段包括发送/接受进入即时通讯阶段的请求和发送/接受消息。

MSN即时通讯软件的协议是基于ASCII码的协议,用其他话来讲就是所有的命令都必

须是英文的!第一个阶段包括连接到MSN即时通软件的服务器。在这个阶段我们应该连接

到服务器“messenger.hotmail.com”的1863端口(MSN即时通讯软件通过1863端口进行工作)。一旦连接上以后,我们就应该开始登陆过程了。此过程的第一步是验证MSN的版本。在此步中,客户端(即你的MSN软件)列出及向服务器发送它可以支持的版本,然后等待服务器的回应。

VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVRO

在MSN协议中,伴随着每个命令都有一个“试验ID”被发送。此实验ID从0开始,并且当每次服务器成功的对客户端的命令做回应时,都会增加。

服务器的回应如下

VER 0 MSNP7 MSNP6 MSNP5 MSNP4

现在客户端(MSN)和服务器之间确定了它们之间将要进行通讯的版本。

下一步客户端(MSN)向服务器发送一个请求,要求服务器提供它所支持的认证时需要的安全包的名字。

INF 1

不像ahoo,Rediff和其它的一些即时通讯软件,MSN在发送密码时会将密码加密,保证如有人监控你的端口时,密码不会轻易的泄露。

服务器的回应如下

INF 1 MD5 (MD5在这里是服务器当前支持的安全包的名字)

下一步客户端(MSN)将向服务器发送用户ID

USR 2 MD5 I venky_dude@hotmail.com

然后服务器将检验它是否包含有验证所需的此用户的所有相关信息。如没有的话,服务器将会发送如下回应:

XFR 2 NS 64.4.13.55:1863 0

意思为客户端(MSN)应该连接到NOTIFICATION服务器,地址和端口分别为64.4.13.55,1863.

我们关闭当前的连接并且在连接到新的服务器64.4.13.55时重复以下步骤

(客户端)VER 3 MSNP7 MSNP6 MSNP5 MSNP4 CVRO

(服务器)VER 3 MSNP7 MSNP6 MSNP5 MSNP4

(客户端)INF 4

(服务器)INF 4 MD5

(客户端)USR 5 MD5 I venky_dude@hotmail.com

现在我们连接上的服务器有了此尝试登陆的用户的信息.服务器回应如下:

USR 5 MD5 S 989048851.185113730

服务器发送的此字符串是“MD5 杂乱信息”.此杂乱信息由服务器创建并且在认证过程中使用.客户端然后向服务器发送使用MD5运算法加密后的密码.实际上客户端向服务器发送的是一个独一无二的MD5字符串,此字符串等价于此“MD5杂乱信息”(即989048851.185113730)+密码.结果如下

3b7926d277068ec49576a0c40598ff21

USR 6 MD5 S 3b7926d277068ec49576a0c40598ff21

如果密码正确,服务器将做如下回应:

USR 6 OK venky_dude@hotmail.com venkat

此处“venkat”是用户的呢称.

在此协议的最新版本中,服务器将发送一些附加的数据,像用户的信息和一个认证码(类似于一个cookie,可以用到许多其它的功能中)

MSG Hotmail Hotmail 362

MIME-Version:1.0

Content-Type:text/x-msmsgspro file;charset=UT

Login Time:1011252477

EmailEnabled:1

MemberIDHigh:84736

MemberIDLow:-143472939

Lang_preference:103

PreferredEmail:venky_dude@hotmail.com

Country:IN

PostalCode:

Gender:M

Kid

Age:22

Sid:517

Kv:2

MSPAuth:2AAAAAAAADU0p4uxxxJtDJozJS1UTS0i7YpwnCoPUHRv56YKxxxCTWmg$$

现在我们登陆上了服务器,但是我们的状态仍然是离线.为了能够发送和接受信息,我们需要把我们的状态改成在线.客户端通过如下命令完成这步:

CHG 7 NLN

服务器则向客户端发送回在线的好友及其相应的状态.

ILN 7 NLN btxxxe@hotmail.com nick (NLN:Now online 即当前在线)

ILN 7 AWY wmxxe@hotmail.com mike (AWY:Away 即离开)

ILN 7 BSY tehpxxp@hotmail.com jerry (BSY:Busy 即忙碌)

MSG Hotmail Hotmail 223

MIME-Version:1.0

Content-Type:text/x-msmsgsinitialemailnotification;charset=UTF-8

Inbox-Unread:293

Folders-Unread

Inbox-URL:/cgi-bin/HoTMaiL

Folders-URL:/cgi-bin/folders

Post-URL:http://www.hotmail.com

向服务器发送的下一个命令是和当前使用的客户端的版本相关的.客户端向服务器发送它的版本号和所在机器的信息像*作系统和其配置等

CVR 8 0x0409 win 4.10 i386 MSMSGS 4.5.0127 MSMSGS

0x0409 win4.10 i386 指出客户端当前的运行环境是win98,使用的是Intel的微处理器.

MSMSGS 4.5.0127 MSMSGS 指出msmsgs.exe的版本号

服务器回应提供下载最新版本及一些其它的信息的地址\

CVR 8 4.5.0127 4.5.0127 1.0.0863

http://download.microsoft.com/do ... /en-us/mmssetup.exe

http://messenger.microsoft.com

这个CVR命令的发送并不是必须的,无论此命令是否发送,MSN协议都可以正确的工作.

为了获得我们的好友列表,我们可以发送如下命令

LST 9 RL

服务器将相应发送回“反向列表”,此反向列表为当你在线时,可以看到你并能向你发送即时消息的用户列表.你也可以使用 LST 9 FL命令向服务器请求“正向列表”.此正向列表包括你加入到好友列表中的所有好友.服务器所做的回应如下

LST 9 RL 69 1 19 venky_dude@hotmail.com venkat

LST 9 RL 69 2 19 puxxxxx@hotmail.com puja

LST 9 RL 69 3 19 vancxxxx@hotmail.com ramachandran

LST 9 RL 69 4 19 moxxxxx@hotmail.com chandramouli

LST 9 RL 69 6 19 v_n_xxxx@hotmail.com Narakatesh

………………….

LST 9 RL 69 19 19 puneetagarxxx@hotmail.com puneet

*一旦有好友上线时,服务器(NS)将向我们发送如下命令

NLN 10 NLN deaxxx@hotmail.com Venkatesh

相反,如果有好友下线时,服务器将向我们发送如下命令

FLN 10 FLN deaxxx@hotmail.com Venkatesh

在MSNP7中,MSN引入了一个新的口令认证机制.MSN服务器向用户发送一个口令钥,用户必须正确的认证此口令钥才能使此过程继续进行下去.

CHL 0 20881396011366812350

客户端必须向服务器发送一MD5,此MD5为以上的“杂乱信息”后附加上字符串“Q1P7W2E4J9R8U3S5”.因此最终向服务器发送的MD5字符串为

20881396011366812350Q1P7W2E4J9R8U3S5

因此客户端的回应如下

QRY 18 msmsgs@msnmsgr.com 32

0212eaad0876afb8505859ca75d21a78

此处18为实验ID,用你的实际实验ID代替18.

如果认证正确,服务器将做出如下回应

QRY 18

在MSN里的即时通讯是基于session的。想进行对话的两个人必须在session模式当中。除非我们同其他用户开始一个聊天session,否则我们是不能发送/接受信息的。

基本上有两种途径可以使一个用户处于一个聊天session中

.1 用户向另一个用户发送一个聊天session请求

2 用户接收从另一个用户那里发送来的聊天session请求

接下来将分别详细介绍这两种途径

用户向另一个用户发送一个聊天session请求

客户端(用户)向服务器发送一个命令,以获取接线总机(SwitchBoard)服务器的地址.所有的即时通讯交谈都必须通过接线总机服务器实现。

XFR9 SB

此接线总机服务器返回此服务器的ip地址,连接端口,和一个CKI杂列。CKI 是一个安全包,用户必须使用此CKI杂列连接上接线总机服务器。

XFR9 SB 64.4.13.88:1863 CKI1989487642.2070896604

现在这次我们将向接线总机服务器进行一次新的连接。而且我们上次对MSN即时通服务器的连接必须要保持,否则我们将会登出。

在我们连接上接线总机服务器之后,我们将向此接线总机服务器发送以下命令:

USR 1 venky_dude@hotmail.com 989487642.2070896604

如果我们发送的这个CKI杂列正确的话,接线服务器将会返回

USR 1 OK venky_dude@hotmail.com venkat

当以上做完之后,接下来这个用户要做的就是要把另一个用户”叫到”此聊天session中了,这可以通过发送下面的命令完成

CAL 2 deadxxx@hotmail.com

服务器将会向此用户回应一个session号,同时也会将此session号发送给另一个用户。

如果另一个用户准备好聊天,并向做出回应时,服务器将向我们发送如下命令

JOI deadlee@hotmail.com Venkatesh

这条命令表示另一个用户加入了聊天当中,我们现在可以接受和发送信息了

用户接收从另一个用户那里发送来的聊天session请求

当我们被一个用户邀请到一个聊天session中时,认证服务器将向我们发送如下的信息.

RNG 11742066 64.4.13.74:1863 CKI 989495494.750408580 deaxxxx@hotmail.com Venkatesh

上面的命令包含了session号,接线服务器的ip地址,端口,CKI杂列及向我们发出交谈请求的用户信息。

现在我们将向接线服务器进行一次新的连接。同样我们上次对MSN即时通服务器的连接必须要保持,否则我们将会登出。

我们连接上接线服务器,并且发送如下命令

ANS 1 venky_dude@hotmail.com 989495494.750408580 11742066

上面的命令包含了我们的登陆名,我们接收到的CKI杂列和session号.

服务器将回应如下信息

IRO 1 1 1 deaxxxx@hotmail.com Venkatesh 和 ANS 1 OK

我们现在就可以发送和接收信息了。

在我们发送和接收信息之前,让我们了解一下信息是如何创建的

我们发送信息时,将首先建立一个头信息如下所示

MIME-Version: 1.0

Content-Type: text/plain; charset=UTF-8

X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22

然后使用如下的方式发送

MSG2 N137 MIME-Version: 1.0

Content-Type: text/plain; charset=UTF-8

X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22

hello

其中2是测试号,我们每发送一次信息,此号就会随着增加。137是指我们发送信息的长度。在上面的例子中就是头信息和我们发送的信息”hello”的长度。

我们发送的信息和上面的例子是差不多的。

下面是我们接受到的一个信息的例子

MSG deaxxxx@hotmail.com Venkatesh 137

MIME-Version: 1.0

Content-Type: text/plain; charset=UTF-8

X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22

hello

当另一用户正在输入信息时,我们会收到如下信息

MSG deaxxxx@hotmail.com Venkatesh 100

MIME-Version: 1.0

Content-Type: text/x-msmsgscontrol

TypingUser: deaxxxx@hotmail.com

我猜你们对如何编写出自己的MSN即时通讯软件已经有了大致的了解。我将会在以后对MSN的通讯协议继续进行补充,增添一些附加的功能比如增加/删除拥护,重命名,文件传输及语音聊天。

参考资料

微软发布的MSN的通讯协议

http://www.tlsecurity.net/Textwa ... ger-protocol-00.txt

MD5官方网站

http://userpages.umbc.edu/~mabzug1/cs/md5/md5.htm

译者注:如大家需要Msn_Clone的源代码,请发电子邮件给我。也欢迎大家到WAP开发论坛 http://ai2.yeah.net 参与讨论

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有