• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    如何用VB編寫你自己的MSN即時通訊軟件

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 15次 | 進入軟件測試論壇討論

    領測軟件測試網 作者姓名:楊忠勛  
    作者簡介:專業:計算機軟件開發與應用
    個人網站:http://zhongxunyang.yeah.net
    Email:zhongxunyang@yahoo.com.cn
    Oicq:171704474
    調試環境:VB6.0


    你用VB已經有很長時間了,一直疑惑MSN是如何工作的,F在你不用再為這個問題苦惱了,這篇文章不僅告訴你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參與討論

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>