MSN机器人程序的设计与实现毕业设计文档格式.docx
《MSN机器人程序的设计与实现毕业设计文档格式.docx》由会员分享,可在线阅读,更多相关《MSN机器人程序的设计与实现毕业设计文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
ChatRobot;
MSN;
ChatSoftware
第一章绪论
1.1研究背景
自从上世纪中叶第一台计算机诞生以来,计算机越来越走进人们的生活当中,特别是随着计算机网络的发展,把全世界的人们紧密的联系在一起,大大的扩展了计算机的功能,人们越来越离不开计算机了。
如今,作为网络应用之一的聊天工具,越来越受到人们的欢迎和重视。
现在已有的聊天软件不胜枚举,流行的主要有MSNMessenger、QQ等。
MSNMessenger来自于软件巨头微软,其实力当然不容小觑。
目前最新版本为MSN9,能够实现文本、手写、语音、视频等多种沟通方式,可以预见在不久的将来,聊天软件将成为人们通过因特网相互联系和娱乐的主要平台。
由于MSNMessenger协议是公开的,因此第三方软件开发者能通过协议写出自己的程序与网络交互,于是MSN机器人应运而生。
MSN机器人是以MSN联系人的形式出现的,只要你添加相关机器人的MSN帐号,就可以像与真人聊天一样与机器人聊天,并可查询地图、股票、天气预报、电视节目等信息。
1.2MSN机器人的发展现状
MSN机器人是一项能够带给用户良好信息体验的技术产品――基于人工智能技术的开发、研究和应用,为成千上万用户提供新颖实用的网络服务。
MSN机器人技术日渐成熟,其中著名的如赢思软件公司开发的小I机器人。
2004年赢思先后在全球知名的即时通讯(IM)平台MSN、“腾讯QQ”及YahooMessenger上推出了小I智能机器人;
小I以其强大的聊天功能和各类资讯信息的提供一时间成为各大IM平台的新宠,用户量突破800万,在人工智能机器人及信息服务领域获得了前所未有的突破。
2006年2月,凭借在机器人领域多年的积累以及强大的技术实力,赢思软件成为微软全球战略合作伙伴及微软官方机器人平台,携手微软打造最强大的机器人应用平台。
目前公司已推出小I聊天、MSN群、小I地图、小I天气、小I收视指南、小I问答等多项应用,提供了多种个性化功能和服务,性能稳定,应用广泛。
1.3本文工作
本文将重点分析MSNMessenger协议里的登陆过程和消息发送部分,并用其设计并制作一款MSN客户端,然后在此基础上完成对MSN机器人系统的设计和实现,以达到研究聊天机器人运作原理的目的。
具体的章节安排如下:
第一章研究背景及当前技术的发展状况
第二章MSN协议分析
第三章MSN机器人系统设计
第四章MSN机器人系统实现
第五章总结与展望
2.1MSN登录过程
1.TCP连接到(207.46.104.20)上的1863端口,发送如下指令:
VER1MSNP9MSNP8CVR0\r\n
服务器返回:
VER命令是用来和服务器协商MSN客户端所使用的版本信息,其中1代表TrID是命令序号,后面是所支持协议的版本,必须以CVR0结尾。
2.客户端发送CVR命令到服务器声明客户端环境:
CVR20x0804winnt5.0i386MSNMSGR6.0.0602MSMSGSyxu68@\r\n
CVR命令有一个TrID和另外8个参数。
第一个参数是客户端语言的LocalID,简体中文为0x0804,美国英语为0x0409,台湾为0x0404,日本为0x0411,韩国为0x0412;
第二个参数为操作系统类型,winnt代表NT系列,Win代表win9x系列;
第三个参数为操作系统版本号,5.0表示Windows2000,5.1表示WindowsXP,4.10表示Windows98;
第四个参数为计算机体系结构,i386表示Intel386以上机型;
第五个参数为客户端名称,MSNMSGR表示MSNMessenger客户端;
第六个参数表示客户端版本号,当前为6.0.0602;
第七个参数必须为MSMSGS;
第八个参数为登录名(邮件地址)。
CVR26.0.06026.0.06026.0.0268
服务器也返回CVR但是它只有6个参数。
第一个参数为TrID;
第二个参数为推荐您使用的客户端版本号,如果为1.0.0000,表示您的客户端信息不可识别;
第三个参数和第二个参数相同;
第四个参数表示前一版本的版本号;
第五个参数为下载推荐版本的URL地址;
第六个参数为获取推荐客户端信息的URL地址。
3.客户端发送USR命令说明身份:
USR3TWNIyxu68@\r\n
USR命令有4个参数,第一个参数为TrID;
第二个参数为身份验证的系统代号,以前可以使用MD5,现在必须使用TWN;
第三个参数必须是字母I,表示身份验证开始;
第四个参数是要登录服务器的帐号名称。
服务器返回XFR命令:
XFR3NS207.46.106.72:
18630207.46.104.20:
1863\r\n
XFR命令有5个参数,第一个参数为TrID;
第二个参数为NS表示转移到一个notification服务器;
第三个参数为notification服务器的IP地址和端口(以冒号间隔,一般是1863但不绝对);
第四个参数在MSNP2以后都必须是0;
第五个参数为当前连接的服务器IP和端口。
4.关闭连接,客户端终止到的连接。
说明:
MSNP8MSNP9中不再使用MD5的作身份验证的方式,MD5的方式只在MSNP7及前面的版本中实现,MSNP8、MSN9需要以新的方式执行也就是使用USR3TWNIyxu68@\r\n命令。
5.客户端连接到上面给定的notification服务器指定端口(207.46.106.72:
1863),首先按照上面的发送一些命令如下:
客户端发送:
VER4MSNP9MSNP8CVR0\r\n
CVR50x0804winnt5.0i386MSNMSGR6.0.0602MSMSGSyxu68@\r\n
CVR56.0.06026.0.06026.0.0268
USR6TWNIyxu68@\r\n
在此服务器不回复XFR命令,而是回复USR命令。
USR6TWNSlc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1065400856,kpp=1,kv=5,ver=2.1.0173.1,tpf=15920bfbfabbe0badb47790dc51a54fa\r\n
回应的usr命令前两个参数个发送的usr命令相同,第三个参数使用字母S代替I表示后面开始身份验证过程,其中cttpf是变化的,其他不变。
6.使用SSL协议连接到或其它服务器的443端口。
登录名后缀为@、@、@的客户端使用:
443;
登录名后缀为@的使用:
其他使用:
443。
建议使用如下方法确定身份验证服务器:
SSL连接到443端口,发送如下命令:
GET/rdr/pprdr.aspHTTP/1.0\r\n
\r\n
服务器将回应如下:
HTTP/1.1200OK\r\n
Server:
Microsoft-IIS/5.0\r\n
Date:
Sun,27Sep200311:
57:
47GMT\r\n
Connection:
close\r\n
PassportURLs:
DARealm=Passport.Net,DALogin=
Content-Length:
0\r\n
Content-Type:
text/html\r\n
Cache-control:
private\r\n
获取回应中的PassportURLs字段中DALogin部分(斜体部分),即可得到身份验证地址,注意该连接实际上需要在前面加上https:
//,表示要使用HTTPSSL协议获取相关信息。
是需要连接的服务器,用SSL连接到该服务器443端口,即可进行下面的操作。
7.在SSL连接中发送如下HTTP请求:
GET/login2.srfHTTP/1.1\r\n
Authorization:
Passport1.4OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=yxu68@,pwd=******,lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1065400856,kpp=1,kv=5,ver=2.1.0173.1,tpf=15920bfbfabbe0badb47790dc51a54fa\r\n
User-Agent:
MSMSGS\r\n
Host:
\r\n
Keep-Alive\r\n
Cache-Control:
no-cache\r\n
Authorization后面跟内容中的“sign-in=”后面为登录的登录名称,“pwd=”后面为登录名对应的密码,其后内容(斜体部分)为前面服务器返回的usr命令后面部分内容。
如果成功服务器将返回如下信息:
…..
Authentication-Info:
Passport1.4da-status=success,tname=MSPAuth,tname=MSPProf,tname=MSPSec,from-PP='
t=…'
ru=\r\n
其中最重要的是Authentication-Info字段返回的值,取得“from-pp=”后面单引号中的部分内容(上面斜体下划线部分)。
如果失败服务器返回如下信息(如果失败需要连接其他服务器尝试):
HTTP/1.1401Unauthorized\r\n
58:
15GMT\r\n
PPServer:
H:
LAWPPIIS6B077\r\n
Expires:
Mon,20Oct200307:
14GMT\r\n
cachecontrol:
no-store\r\n
Pragma:
P3P:
CP="
DSPCUROTPiINDOTRiONLFIN"
PassportConfig:
ConfigVersion=11\r\n
WWW-Authenticate:
Passport1.4da-status=failed,srealm=Passport.NET,ts=-3,prompt,cburl=
390\r\n
同时服务器有可能将客户端重定向到其他地方,这是将返回如下信息:
HTTP/1.1302Found\r\n
32GMT\r\n
LAWPPLOG5C006\r\n
Passport1.4da-status=redir\r\n
Location:
其中
8.关闭SSL连接,回到notification服务器连接上,向服务器再次发送usr命令:
USR7TWNSt=5OyHvVtsqDmntb4B4z*UOKIkjWzyERUzYHRnO7bmd*!
4LS4w!
JLRB95JjopamqbRz1APVAq*hqeYScQIt*Se2lyA$$&
p=5ArrhL7LNEzouoqpC9kIoeqvBm4wzKnISD3QzZOxOIcz6iJ5w33IQJZ3tQjq9*4z*l6MQ6y6xYtth7QdEQb*Z1kRHUH6Pm6sJsUXfbfNbrhdu5oOJzdIjNXGVSC5FfheoGrHtrxMp1ZgMgeDcLY0yx6iYoO!
0EfXlpQ24avzKIQDA7ME7pLMFTKtVp5NJHdBI75Szr3P4d37Y$
命令含义和前面一样,注意的是第三个参数为S,第四个参数就是上面SSL连接中获取的Authentication-Info字段中from-pp部分。
如果密码正确notification服务器将返回usr命令,ok作为第二个参数。
USR7OKyxu68@\302\240\345\276\220\346\263\26310\r\n
其中第三个参数是用户登录名;
第四个参数是用户的昵称(UTF-8值);
第五个代表身份验证是否通过,1表示true;
第六个如果是MSNP7以上为0,其他为1。
其他将返回一些错误。
9.同步本地联系人列表
客户端向服务器发送本地保存的联系人列表版本号:
SYN80\r\n
第二个参数就是当前的联系人列表的版本号,0表示本地没有任何联系人的信息。
服务器回应客户端服务器上联系人列表的版本号:
SYN81056685\r\n
第二个参数是服务器上当前联系人列表的版本号,如果客户端的版本号和服务器上的版本号相同,则没有后面的两个参数;
第三个参数为期望的LST命令个数;
第四个参数为期望的LSG命令个数。
10.取得在线人员名单,发送上线通知。
客户端向服务器发送如下命令取得在线人员名单:
CHG9NLN268435492\r\n
CHG命令第二个参数为NLN时是取得在线人员名单,并通知他们客户上线了;
第三个参数为一个数值串,目前不明白其作用,但是版本不同,其值不同。
简体中文MSNMessager6.0.0602+Win2000下是268435492,英文版是268435508,繁体中文268435500。
用途更改用户在线状态,具体请参考更改用户状态。
以上完成所有登录过程。
2.2即时消息发送接收过程
1.客户端分别完成登录过程以后,由会话发起方(本例中为yxu68@)向其Notification服务器发送XFR命令:
XFR12SB\r\n
XFR作用是向Notification服务器获取Switchboard服务器IP地址和端口号。
第一个参数是TrID,第二个参数是Switchboard的缩写SB。
注意和登录过程中的XFR命令中的区别,登录过程是NS,代表是Notification服务器。
XFR12SB207.46.108.79:
1863CKI17334300.1065769901.10583\r\n
Notification服务器(207.46.106.22)回复XFR命令如下:
服务器回复的XFR命令第一个参数是TrID;
第二个参数是SB;
第三个参数是Switchboard服务器的IP地址和端口号(用冒号间隔),一般端口号都是1863,但是不绝对;
第四个参数是认证的方式,目前使用CKI;
第五个参数客户端将要发送的Switchboard服务器的认证字符串,需要保留。
如果没有初始化客户端的状态或者状态为HDN,这个服务器将不返回XFR命令,而是返回913错误91312\r\n。
2.客户端保持到Notification服务器的连接,同时连接到上面提供的Switchboard服务器(207.46.108.79)指定端口上,发送如下命令:
USR1yxu68@17334300.1065769901.10583\r\n
USR命令第一个参数是TrID,注意这里的TrID是Switchboard服务器上重新设置的一个TrID,又是从1开始,小于4294967295(2^32-1)的整数,故而这里需要在添加一个计数器,同时即时再次连接其他的Switchboard服务器,这个计数器也需要保持(不从1开始计数,接着上次开始计数);
第二个参数是客户端的登录用户名;
第三个参数是上面Notification服务器服务器返回XFR命令中的认证字符串。
Switchboard服务器(207.46.108.79)返回如下命令:
USR1OKyxu68@\302\240\345\276\220\346\263\263\r\n
该USR命令最后一个参数是客户端的昵称。
3.客户端向Switchboard服务器(207.46.108.79)发送如下命令:
CAL2taogx@\r\n
CAL命令第一