2006年6月14日 星期三

MSN Bot


所謂的「MSN Bot」指的就是:『一隻程式可以在 MSN 上讓你查資料,還可以和你聊天。』 



公司把 MSN 完全封掉,一開始還有個 e-messenger 作為替代方案,後來連 e-messenger 也被封掉了,所以不得已改用 Google Talk,到最近,連 Google Talk 也被封了... 卯起來我就去查了要如何透過 80 port 來連上 MSN server... 



基本上像我們公司所有對外有 firewall,連線都得經過 proxy server,用一些 tunnel 程式或許可以偷偷出去。但缺點是我們還是使用 messenger,這樣的話就是用 MSN protocol...這會有被 MIS 抓到的風險,故走 http 80 port 到一中繼站,再轉連至 MSN server 是最保險的作法。



---



先來說說 MSN 的基本架構。 



原則上 messenger 與 server 間的資料是使用 UDP protocol 來傳。架構上有兩個 server:NS 和 SB。



Notification server (NS) 



它用來處理使用者認證、好友清單、好友狀態...等等的事。換句話說,當我們使用 messenger 連上 MSN,便都是一直在和 NS 溝通。建立與 NS 的 connection 之後,以後有關好友上下線、更改暱稱...等的 notification 都會傳回 messenger,messenger 再依自己的邏輯將結果反應出來。



Switchboard (SB)



SB 可以把它想成是一台接線器,當我們送訊息給好友時,local 會與 SB 建立一個 connection,好友的電腦也會與 SB 建立一個 connection,而我們與好友間所有的訊息、所傳的檔案、視訊資料...等,都透過 SB 來互傳,可以將 SB 想像成是一台 proxy server 這樣的功能。換句話說,要記錄所有人的對話,應該也是在 SB 中做掉。



---



有了基本認識之後,要實作 MSN bot,我們需要一個 library 可以來處理與 server 間的 handshaking,還需要資料來回應使用者的查詢。



Library 方面,我有找到一個 libmsn,也有人以 C 配合它來完成一隻 bot。如果想自食其力,那就必需先了解 MSN protocol,下面這個網站提供了相當豐富的資訊可供參考。



hypothetic.org



資料的部份,可以將它存放在 database 中,使用 MySQL 是個不錯的方式。但缺點是資料必需自己去更新。另一個不錯的方式是使用 Google SOAP Search API,透過這個 API,我們可以查詢 Google 所 index 到的網頁,查詢完的資料透過 XML 回傳,bot 再將結果回應給使用者即可。



而實作使用的程式語言並沒有限定,端看 library 而定,諸如 C/C++、Java、Perl、PHP...等的都可以用來寫 bot。



---



上面 bot 的部份,將資料 feedback 部份拿掉,加入透過 80 port 將與 server 的 handshaking forward 至我公司的電腦,就應該可以「光明正大」的用 MSN 了吧!(謎之聲:又是一個打嘴炮的...)



事實上 Google 還提供了不少的 API for non-commercial use,有興趣的可以去看看。



Google Code



6 則留言:

  1. 說一下我同事的經驗…透過https port…假如你的公司沒擋金流,應該就可以
    office PC --> https client -> office proxy -> outside https sever



    版主回覆:(07/06/2012 02:56:30 PM)

    回覆刪除
  2. 因為是走security mode...所以mis應該只能抓到加密的資料~~@@


    版主回覆:(07/06/2012 02:56:30 PM)


    回覆刪除
  3. What you mean "https client" is something like IE?
    So you mean I can connect to my home pc via https protocol, and then
    my home pc connects to msn server?
    Precisely to say that,
    IE (office) <-> office proxy <-> home https svr <-> msn server ?
    That means that I also need a program on my home pc to communicate
    with msn server?

    I have a idea that I could use PHP + javascript to implement a simple
    text-based web messenger. However, one thing I can&#039;t avoid is that I
    have to handle notifications from msn server such as friend status
    change.

    Maybe to study how AJAX works is a good idea.


    版主回覆:(07/06/2012 02:56:30 PM)

    回覆刪除
  4. I think so~ it&#039;s called "tunnel"
    http://blog.linux.org.tw/~timhsu/archives/001515.html


    版主回覆:(07/06/2012 02:56:30 PM)

    回覆刪除
  5. 不是有一個web msn的版本嗎?
    http://webmessenger.msn.com/


    版主回覆:(07/06/2012 02:56:31 PM)


    回覆刪除
  6. 素啊素啊,可是 web msn 也被 block 了 >_<


    版主回覆:(07/06/2012 02:56:31 PM)

    回覆刪除