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

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>
            一区二区不卡在线视频 午夜欧美不卡'| 日韩一区二区精品葵司在线| 欧美日韩色综合| 亚洲天堂黄色| 91久久在线播放| 久久精品卡一| 亚洲欧美日韩国产综合| 亚洲日本欧美日韩高观看| 国产亚洲欧美一区二区三区| 国产精品免费一区二区三区在线观看| 欧美日韩高清一区| 久久精品视频亚洲| 欧美在线播放| 久久成人精品| 久久精品免费观看| 久久久久久久欧美精品| 亚洲自拍高清| 亚洲伊人伊色伊影伊综合网 | 亚洲午夜性刺激影院| 亚洲人成免费| 亚洲精品中文字幕女同| 日韩一级在线观看| 中文网丁香综合网| 亚洲欧美激情视频在线观看一区二区三区| 正在播放欧美视频| 极品中文字幕一区| 亚洲人成免费| 亚洲欧洲99久久| 久久婷婷国产综合国色天香| 麻豆精品91| 亚洲青色在线| 亚洲欧美日韩一区二区三区在线| 欧美在线日韩| 亚洲欧美bt| 久久人人九九| 欧美日韩在线免费观看| 国产精品一卡二| 激情文学综合丁香| 亚洲免费观看| 欧美与欧洲交xxxx免费观看| 久久精品国产一区二区电影| 老司机67194精品线观看| 玖玖综合伊人| 亚洲精品久久久久久一区二区| 亚洲视频在线视频| 久久久久国产精品一区三寸| 欧美精品1区2区| 国产欧美va欧美va香蕉在| 最新高清无码专区| 亚洲欧美日韩一区二区三区在线| 久久久久国产成人精品亚洲午夜| 欧美激情视频网站| 亚洲欧美日韩国产成人| 欧美日韩岛国| 亚洲第一黄色网| 亚洲视频在线观看| 欧美成人久久| 欧美一区午夜精品| 欧美视频精品在线观看| 亚洲高清视频在线观看| 午夜精品久久久久久久| 亚洲国产精品久久久久秋霞不卡| 一本色道久久加勒比88综合| 免费国产一区二区| 狠狠综合久久| 欧美一区二区精品在线| 欧美激情精品久久久久久| 欧美激情一区二区三级高清视频 | 欧美精品二区| 欧美成人性生活| 欧美99在线视频观看| 国产精品美女久久久久久久| 精品动漫3d一区二区三区| 亚洲欧美综合v| 999亚洲国产精| 免费看精品久久片| 亚洲高清久久| 欧美国产激情二区三区| 美乳少妇欧美精品| 亚洲精品中文字幕女同| 99re这里只有精品6| 久久国产精品99国产| 欧美高清视频一区| 亚洲国产毛片完整版 | 一本色道久久综合亚洲精品不卡| 亚洲免费黄色| 久久久人成影片一区二区三区| 黑人一区二区三区四区五区| 欧美一区二区女人| 亚洲影院免费| 国产精品日本精品| 亚洲电影在线观看| 国模精品一区二区三区色天香| 一区二区三区产品免费精品久久75 | 亚洲欧洲三级| av不卡免费看| 国内成+人亚洲+欧美+综合在线| 女主播福利一区| 国产精品久久久久aaaa九色| 男女视频一区二区| 国产精品美女久久福利网站| 久久综合伊人77777尤物| 欧美一区二区免费观在线| 蜜臀久久久99精品久久久久久| 欧美图区在线视频| 欧美大片一区二区三区| 99精品视频免费| 欧美一区二区三区日韩视频| 久久女同互慰一区二区三区| 国产日韩精品电影| 欧美在线影院| 欧美国产日本| 午夜精品在线看| 亚洲春色另类小说| 欧美另类一区| 久久精品国产久精国产一老狼| 欧美国产欧美综合| 在线视频中文亚洲| 国内精品久久久久久久果冻传媒| 美女精品在线| 亚洲午夜高清视频| 免费成人高清视频| 亚洲综合色视频| 国产日产高清欧美一区二区三区| 欧美刺激性大交免费视频 | 中文日韩电影网站| 精品动漫3d一区二区三区免费版 | 国产精品久久精品日日| 在线播放国产一区中文字幕剧情欧美 | 裸体素人女欧美日韩| 制服丝袜激情欧洲亚洲| 你懂的网址国产 欧美| 久久九九久久九九| 国产欧美一区二区三区视频| 中日韩视频在线观看| 亚洲午夜精品国产| 欧美日韩国产成人在线观看| 亚洲欧美色婷婷| 亚洲午夜精品在线| 亚洲第一在线视频| 在线国产精品一区| 欧美在线视频一区| 日韩亚洲成人av在线| 黄色日韩精品| 国产精品久久久久久久9999| 老司机67194精品线观看| 午夜精品免费在线| 亚洲精品资源美女情侣酒店| 亚洲日本aⅴ片在线观看香蕉| 久久免费视频一区| 久久国产欧美精品| 毛片一区二区三区| 欧美激情久久久久| 99热在线精品观看| 欧美在线精品一区| 美女网站久久| 国产精品天天看| 亚洲欧洲在线观看| 欧美一区二区网站| 亚洲国产精品久久91精品| 亚洲精品系列| 欧美福利小视频| 久久精品亚洲精品国产欧美kt∨| 欧美国产欧美亚洲国产日韩mv天天看完整| 麻豆精品精品国产自在97香蕉| 蜜臀av一级做a爰片久久| 欧美久久久久久久久久| 亚洲午夜精品一区二区| 中文一区二区在线观看| 久久综合久色欧美综合狠狠| 亚洲精品日韩在线观看| 麻豆成人综合网| 亚洲黄页一区| 国产精品国产自产拍高清av| 久久av一区二区三区漫画| 亚洲欧洲日韩在线| 亚洲一品av免费观看| 伊人久久婷婷| 欧美午夜激情在线| 久久久久久午夜| 日韩午夜在线视频| 久久精品免费| 国产精品香蕉在线观看| 午夜激情一区| 国产日本欧美在线观看| 亚洲视频在线视频| 欧美亚洲综合网| 国产日韩综合| 欧美国产另类| 久久噜噜亚洲综合| 亚洲国产一区二区三区青草影视| 久久国产直播| 久久精品视频免费| 国产日韩欧美亚洲| 欧美黄色大片网站| 亚洲欧洲一区| 久久国产精品久久国产精品| 久久久久久久999| 一本色道久久综合| 亚洲综合第一|