青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
mangosd是MaNGOS-Zero項目中的游戲邏輯進程,玩家一旦與realmd的keyexchange過程完成后(詳細內容見《realmd認證登錄服務器(一):認證登錄基本流程》),便只與mangosd進行交互。而客戶端與realmd的連接也會在客戶端向mangosd發(fā)送enterworld之后斷開。

本文將介紹客戶端連接到mangosd后,mangosd認證客戶端合法性并最終建立RC4流加密的過程。具體過程如下:

 

(1) 客戶端與mangosd建立TCP連接后,mangosd會向客戶端發(fā)送消息SMSG_AUTH_CHALLENGE

   1: int WorldSocket::open (void *a)
   2: {
   3:     ........
   4:  
   5:     // Send startup packet.
   6:     WorldPacket packet (SMSG_AUTH_CHALLENGE, 4);
   7:     packet << m_Seed;
   8:     if (SendPacket (packet) == -1)
   9:         return -1;
  10:  
  11:     ........
  12: }

m_Seed是一個隨機數,每次客戶端連接上來的時生成一個新的隨機數(隨著WorldSocket的創(chuàng)建而初始化)。

 

(2)客戶端收到SMSG_AUTH_CHALLENGE消息后,知道服務器要求其提供身份認證信息,于是開始構造CMSG_AUTH_SESSION消息。(以下代碼并非客戶端真實代碼)

   1: //client do auth
   2: {
   3:     BigNumber clientSeed;
   4:     clientSeed.SetRand(4 * 8);
   5:     sha.Initialize();
   6:     sha.UpdateData("abu");
   7:     uint32 t = 0;
   8:     sha.UpdateData((uint8 *)&t, 4);
   9:     sha.UpdateBigNumbers(&clientSend, NULL);
  10:     sha.UpdateData((uint8 *)&serverSeed, 4);
  11:     sha.UpdateBigNumbers(&K, NULL);
  12:     sha.Finalize();
  13:  
  14:     uint32 unk2;
  15:     ByteBuffer pktbuf;
  16:     string account = "abu";
  17:     uint16 pktbuf_size = 4+4+4+account.length()+4+20;
  18:     EndianConvertReverse(pktbuf_size);
  19:     pktbuf << uint16(pktbuf_size);
  20:     pktbuf << uint32(CMSG_AUTH_SESSION);
  21:     pktbuf << uint32(5875); //build version
  22:     pktbuf << unk2;
  23:     pktbuf << account;
  24:     pktbuf.append(clientSeed.AsByteArray(4), 4);
  25:     pktbuf.append(sha.GetDigest(), 20);
  26:  
  27:     send((char const*)pktbuf.contents(), pktbuf.size());
  28: }

其中最為關鍵的是構造20位的sha驗證密文M:

M = sha(t, account, clientSeed, serverSeed, K);

t為0;account是明文的用戶名;clientSeed是由客戶端生成的隨機數,用于本次連接游戲session;serverSeed是SMSG_AUTH_CHALLENGE消息發(fā)過來的服務器隨機數;K是之前和realmd交互做keyexchange時生成的,由服務器和客戶端分別進行計算,SRP6算法要求(保證)兩邊的計算結果一致,服務器端保存在realmd.account.sessionkey字段。

 

 

 

 

(3)服務器收到客戶端發(fā)來的CMSG_AUTH_SESSION,首先對收到的數據包進行分析,客戶端發(fā)來的數據包的包頭如下:

   1: struct ClientPktHeader
   2: {
   3:     uint16 size; //packet_size except itself
   4:     uint32 cmd;  //opCode
   5: };

收到客戶端發(fā)來的data,處理流程可以簡化為如下代碼:

int WorldSocket::handle_input (ACE_HANDLE)

{

……………

handle_input_missing_data()

{

handle_input_header();

handle_input_payload()

{

const int ret = ProcessIncoming (m_RecvWPct);

}

}

}

在ProcessIncoming()函數中使用switch case把客戶端發(fā)過來的不同的opcode定位到不同的處理函數中,而登錄認證過程需要定位到int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)函數。

在HandleAuthSession()函數中,服務器以客戶端相同的方式計算sha密文,并和客戶端傳來的做比較,如果相同則認證通過,然后創(chuàng)建WorldSession實例,初始化m_Crypt成員,以便以后服務器和客戶端之間交互的RC4對稱加密使用。最后把新創(chuàng)建的WorldSession對象的m_Session添加到游戲世界中,添加完畢后,在游戲世界的主線程(Update線程)可以對該客戶端做相應的處理。

 

(4)HandleAuthSession()處理的最后會使用下面的代碼,進行判斷:如果session可以作為normal_session的而不是queue_session則發(fā)送SMSG_AUTH_RESPONSE消息,至此所有發(fā)送的消息都將進行RC4的流加密。

   1: void World::AddSession_ (WorldSession* s)
   2: {
   3:     ........
   4:  
   5:     if (pLimit > 0 && Sessions >= pLimit && s->GetSecurity () == SEC_PLAYER )
   6:     {
   7:         AddQueuedSession(s);
   8:         UpdateMaxSessionCounters();
   9:         DETAIL_LOG("PlayerQueue: Account id %u is in Queue Position (%u).", s->GetAccountId (), ++QueueSize);
  10:         return;
  11:     }
  12:  
  13:     // Checked for 1.12.2
  14:     WorldPacket packet(SMSG_AUTH_RESPONSE, 1 + 4 + 1 + 4);
  15:     packet << uint8 (AUTH_OK);
  16:     packet << uint32 (0);                                   // BillingTimeRemaining
  17:     packet << uint8 (0);                                    // BillingPlanFlags
  18:     packet << uint32 (0);                                   // BillingTimeRested
  19:     s->SendPacket (&packet);
  20:  
  21:     ........
  22: }

 

總結:

 

 

(1)realmd和mangosd在登錄認證過程中,相互之間基本不通信,通過MySQL來傳遞client認證所需的sessionkey。

(2)每次客戶端和mangosd之間認證時,各自生成一個隨機數Seed,保證在傳輸過程中隱藏sessionkey。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品专区| 亚洲电影一级黄| 久久免费视频在线| 亚洲精选在线| 欧美a级理论片| 狠狠色伊人亚洲综合成人| 欧美亚洲一区二区在线| 亚洲夜晚福利在线观看| 国产精品视频你懂的| 欧美中文字幕在线观看| 欧美在线999| 亚洲一区二区三区四区在线观看 | 亚洲国产精品黑人久久久| 久久亚洲精品一区二区| 欧美激情网站在线观看| 亚洲免费视频网站| 欧美伊人久久久久久久久影院| 在线观看日韩专区| 亚洲一区中文字幕在线观看| 亚洲国产美女久久久久| 亚洲一区二区久久| av成人免费| 久久一区二区三区四区五区| 亚洲一区二区视频| 欧美69视频| 欧美不卡视频| 国产视频久久网| 亚洲欧美日韩精品久久久久 | 在线看片成人| 亚洲自啪免费| 欧美一区在线视频| 欧美亚州一区二区三区| 91久久国产精品91久久性色| 黄色成人在线网址| 午夜一区二区三视频在线观看 | 久久久亚洲国产美女国产盗摄| 欧美国产精品专区| 亚洲盗摄视频| 99亚洲一区二区| 欧美午夜精品伦理| 亚洲一区二区三区777| 午夜精品久久久99热福利| 欧美日韩国产片| 亚洲人久久久| 欧美日韩亚洲综合| 欧美激情在线免费观看| 亚洲欧美日韩一区在线观看| 欧美日韩p片| 亚洲尤物影院| 午夜一区二区三区在线观看| 欧美日韩国产精品一卡| 中文在线不卡| 欧美激情精品久久久久久免费印度 | 欧美日韩一区二区在线观看| 一本不卡影院| 久久久精品动漫| 亚洲精品视频在线看| 欧美日韩国内| 久久久精品网| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲影视在线| 亚洲精品视频在线观看免费| 国产伦理精品不卡| 欧美激情在线免费观看| 欧美中文日韩| 亚洲永久在线| 亚洲免费大片| **欧美日韩vr在线| 国产一区二区三区在线观看视频 | 欧美日韩亚洲综合| 亚洲欧美在线另类| 亚洲人成网站在线播| 欧美一区二区三区视频免费播放| 久久九九免费视频| 日韩一区二区精品葵司在线| 美女尤物久久精品| 先锋影音久久久| 一本久久a久久免费精品不卡| 亚洲人成人一区二区三区| 精品1区2区| 亚洲国产视频直播| 亚洲精品黄网在线观看| 亚洲精品久久久久中文字幕欢迎你| 激情久久久久久| 最近看过的日韩成人| 亚洲日本va午夜在线电影| 亚洲精品乱码久久久久久日本蜜臀 | 免费在线欧美视频| 蜜臀久久99精品久久久画质超高清| 欧美一区二区三区喷汁尤物| 久久精品男女| 亚洲欧洲一区二区天堂久久| 亚洲人成人99网站| 一区二区三区毛片| 久久精品国产2020观看福利| 欧美呦呦网站| 欧美日韩国产va另类| 国产精品日韩欧美一区| 在线观看欧美亚洲| 亚洲一区二区三区乱码aⅴ蜜桃女| 香蕉久久夜色精品国产| 欧美freesex8一10精品| 99国内精品| 久久露脸国产精品| 欧美日韩久久| 韩日视频一区| 亚洲网站视频福利| 久久久久久久久久久久久9999| 亚洲精品一区二区三区婷婷月| 亚洲免费网址| 久久av资源网站| 日韩午夜在线观看视频| 午夜精品久久久久久久99热浪潮 | 国产精品久久久久永久免费观看| 国产欧美日韩另类视频免费观看| 亚洲高清视频在线观看| 久久精品男女| 亚洲综合色婷婷| 国产精品福利久久久| 亚洲人成网站777色婷婷| 久久亚洲综合色| 久久er99精品| 国精品一区二区| 久久九九免费视频| 欧美在线视频不卡| 国产一区二区三区久久久久久久久 | 国产精品二区影院| 亚洲午夜精品久久| 一区二区三区免费网站| 国产精品夫妻自拍| 久久er精品视频| 久久久久国产成人精品亚洲午夜| 国产专区综合网| 欧美成人自拍视频| 欧美日本一道本在线视频| 一区二区三区视频免费在线观看| 一区二区免费在线播放| 国产精品无人区| 亚洲成人在线视频播放 | 亚洲欧美激情诱惑| 国产日韩欧美三区| 亚洲福利视频网站| 国产精品久久久久久久久搜平片| 久久精品视频在线看| 欧美黑人多人双交| 欧美伊人久久久久久久久影院 | 亚洲欧美国产三级| 久久天堂av综合合色| 亚洲视频国产视频| 午夜欧美大尺度福利影院在线看| 国产午夜精品久久久| 一区二区三区高清| 在线电影一区| 亚洲欧美国产精品桃花| 在线亚洲成人| 欧美va日韩va| 亚洲二区免费| 在线欧美福利| 久久久久久9| 久久激情网站| 国产精品美女久久福利网站| 亚洲欧洲一区二区三区| 国内精品免费午夜毛片| 午夜精品久久| 久久天堂国产精品| 国产视频一区在线观看一区免费| 99xxxx成人网| 久久av一区二区| 在线看成人片| 欧美日韩一区在线播放| 99成人精品| 久久久久99| 亚洲理论在线| 国产精品久久婷婷六月丁香| 亚洲免费在线观看| 久久中文字幕一区| 日韩亚洲欧美一区二区三区| 欧美日韩精品不卡| 午夜欧美不卡精品aaaaa| 久久男女视频| 亚洲午夜av在线| 黄色成人在线网站| 欧美日韩亚洲高清一区二区| 亚洲欧美色一区| 亚洲激情专区| 久久视频国产精品免费视频在线| 久久综合激情| 亚洲精品日韩久久| 久久婷婷国产综合精品青草| 亚洲国产精品久久久久秋霞不卡| 欧美三级乱码| 免播放器亚洲| 久久狠狠亚洲综合| 一本久久综合亚洲鲁鲁| 欧美激情91| 猫咪成人在线观看| 午夜综合激情| 亚洲欧美精品伊人久久| 亚洲裸体视频| 在线精品亚洲|