![PeanuthulldynamicDNSSDK_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a1.gif)
![PeanuthulldynamicDNSSDK_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a2.gif)
![PeanuthulldynamicDNSSDK_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a3.gif)
![PeanuthulldynamicDNSSDK_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a4.gif)
![PeanuthulldynamicDNSSDK_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.花生殼動(dòng)態(tài)域名SDKPeanuthull dynamic DNS上海貝銳信息科技有限公司目錄1. 概述22. 官方認(rèn)證23. 關(guān)于官方認(rèn)證Key的說(shuō)明34. 示例源碼35. 源碼說(shuō)明66. 關(guān)于客戶端界面97. DDNS協(xié)議說(shuō)明117.1. TCP認(rèn)證部分117.1.1. 賬號(hào)認(rèn)證117.1.2. 服務(wù)器跳轉(zhuǎn)157.1.3. 注冊(cè)域名167.1.4. 獲取域名信息177.1.5. 獲取用戶信息187.2. UDP保持部分197.2.1. 心跳包協(xié)議197.2.2. 維持客戶端在線247.2.3. 獲得客戶端IP端變更247.2.4. 注銷(xiāo)登陸24上海貝銳信息科技有限公司33 1. 概述花生殼
2、是一套完全免費(fèi)的桌面式域名管理和動(dòng)態(tài)域名解析( DDNS )等功能為一體的客戶端軟件?;ㄉ鷼た蛻舳讼蛴脩籼峁┤轿坏淖烂媸接蛎芾硪约皠?dòng)態(tài)域名解析服務(wù)。用戶無(wú)需通過(guò) IE 瀏覽器,直接通過(guò)客戶端使用 所提供的動(dòng)態(tài)域名服務(wù),包括用戶注冊(cè)、域名查詢、域名管理、 IP 工具以及自診斷等各種服務(wù);且通過(guò)樹(shù)狀結(jié)構(gòu)方式可使用戶對(duì)多達(dá)上百個(gè)域名進(jìn)行方便管理,亦可自主添加二級(jí)域名,自由設(shè)置 A 記錄( IP 指向)、 MX記錄、 CName(別名)、 URL重定向等,用戶操作界面清晰簡(jiǎn)單?;ㄉ鷼?dòng)態(tài) DDNS 服務(wù)支持包括Modem、ISDN 、ADSL、有
3、線電視網(wǎng)絡(luò)、雙絞線到戶的寬帶網(wǎng)和其他任何能夠提供互聯(lián)網(wǎng)真實(shí) IP 的接入服務(wù)線路,無(wú)論連接獲得的 IP 屬于動(dòng)態(tài)還是靜態(tài),都可根據(jù)自己的需求選擇合適的系統(tǒng)平臺(tái)、數(shù)據(jù)庫(kù)平臺(tái)以及站點(diǎn)運(yùn)營(yíng)模式,并且可避免在轉(zhuǎn)換服務(wù)商時(shí),因受制域名解析服務(wù)商而忍受效率低下的修改過(guò)程,全面利用花生殼來(lái)建立擁有自主域名和最大自主權(quán)的互聯(lián)網(wǎng)主機(jī)。 以下為花生殼嵌入式開(kāi)發(fā)所需要的相關(guān)資源,通過(guò)開(kāi)發(fā),您可以完成如同官方花生殼客戶端完全一樣的功能,甚至將花生殼動(dòng)態(tài)域名嵌入您的軟件、路由器乃至各種網(wǎng)絡(luò)設(shè)備。2. 官方認(rèn)證獲得官方認(rèn)證的軟硬件將被列入官方支持清單:支持清單具體步驟參見(jiàn):花生殼嵌入申請(qǐng)獲得官方認(rèn)證前,您將需要簽訂相關(guān)合
4、作協(xié)議。3. 關(guān)于官方認(rèn)證Key的說(shuō)明您在對(duì)產(chǎn)品進(jìn)行正式的發(fā)布前,需要執(zhí)行以下步驟:3.1. 從oray開(kāi)發(fā)者平臺(tái) 注冊(cè)開(kāi)發(fā)者,獲得App ID、App Secret、App Version:l App ID - 2個(gè)字節(jié)l App Version -2個(gè)字節(jié) l App Secret -4個(gè)字節(jié)注:網(wǎng)站上申請(qǐng)得到的App ID、App Secret、App Version是十進(jìn)制3.2. 服務(wù)器地址P3.3. App ID與App Version組合到4個(gè)字節(jié)的整數(shù),得到clientinfo 如0xFFFF為App ID,0xEEEE為App Version,則組合后為:0xFFFFEEEE
5、3.4. 用3.2步驟得到的clientinfo和App Secret 提交驗(yàn)證。(示例源碼中的PH_EMBED_CLIENT_INFO和PH_EMBED_CLIENT_KEY)4. 示例源碼我們提供一套已實(shí)現(xiàn)所有協(xié)議的規(guī)范代碼,您可以進(jìn)行任意傳播與使用,沒(méi)有任何協(xié)議限制。如果你發(fā)現(xiàn)本套代碼中存在需要修復(fù)的問(wèn)題,請(qǐng)發(fā)送Email到:open4.1. 源碼清單文件說(shuō)明main.c主入口函數(shù),一般修改該文件和phkey.h里的值就行了Makefile.amLinux編譯MakefilePHGlobal.c全局變量及公用函數(shù)實(shí)現(xiàn)phkey.hKey值定義PHGlobal.h程序用到的數(shù)據(jù)結(jié)構(gòu)的定義p
6、hupdate.cPHDDNS Embed網(wǎng)絡(luò)通信主過(guò)程phupdate.hbase64.c通用加密算法相關(guān)代碼bitstream.cbitstream.hblowfish.cblowfish.hglobal.hlutil.hmd5.cmd5.hgenerate.cDDNS嵌入式私有專(zhuān)用加密算法實(shí)現(xiàn),用于TCP主認(rèn)證過(guò)程,以及每個(gè)心跳包的加解密generate.hlog.c日志實(shí)現(xiàn)log.hPHSocket.cSOCKET封裝,支持TCP/UDPPHSocket.h4.2. 編譯4.2.1. windows編譯源碼壓縮包內(nèi)包含VC6工程文件,可在Windows上編譯測(cè)試,無(wú)其他依賴項(xiàng)4.2.2
7、. Linux(X86, ARM, MIPS)編譯過(guò)程:1、解壓縮#tar zxvf phddns-2.0.6.32828.tar.gz# cd phddns-2.0.6.328282、編譯前configure為當(dāng)前平臺(tái)編譯#./configure3、編譯最終可執(zhí)行文件#makeARM與MIPS交叉編譯:您需要首先安裝相關(guān)的交叉編譯器,相關(guān)工具鏈的安裝請(qǐng)參考開(kāi)發(fā)板文檔,并執(zhí)行類(lèi)似以下的編譯前configure#./configure -host=i386-linux -target=arm-linux-build=arm-linux CXX=arm-linux-c+ CC=arm-linux-
8、gcc LD=arm-linux-ld4.2.3. 運(yùn)行l(wèi) 直接運(yùn)行,根據(jù)提示進(jìn)行操作l featured.exe -h 有參數(shù)說(shuō)明5. 源碼說(shuō)明我們提供的源碼封裝了DDNS協(xié)議的解析,對(duì)外暴露結(jié)構(gòu)PHGlobal,只要往結(jié)構(gòu)里填入相關(guān)信息,即可實(shí)現(xiàn)一個(gè)簡(jiǎn)單的客戶端。PHGlobal結(jié)構(gòu)說(shuō)明參考源碼里的phglobal.h文件例子:簡(jiǎn)單客戶端#include <stdio.h>#include <signal.h> #include "phruncall.h"#include "phupdate.h"#include "
9、log.h"#include "phkey.h"PHGlobal global;PH_parameter parameter;static void my_handleSIG (int sig)if (sig = SIGINT)printf ("signal = SIGINTn");phddns_stop(&global);exit(0);if (sig = SIGTERM)printf ("signal = SIGTERMn");phddns_stop(&global);signal (sig, my_ha
10、ndleSIG);/狀態(tài)更新回調(diào)static void myOnStatusChanged(PHGlobal* global, int status, long data)printf("myOnStatusChanged %s", convert_status_code(status);if (status = okKeepAliveRecved)printf(", IP: %d", data);if (status = okDomainsRegistered)printf(", UserType: %d", data);print
11、f("n");/域名注冊(cè)回調(diào)static void myOnDomainRegistered(PHGlobal* global, char *domain)printf("myOnDomainRegistered %sn", domain);/用戶信息XML數(shù)據(jù)回調(diào)static void myOnUserInfo(PHGlobal* global, char *userInfo, int len)printf("myOnUserInfo %sn", userInfo);/域名信息XML數(shù)據(jù)回調(diào)static void myOnAccou
12、ntDomainInfo(PHGlobal* global, char *domainInfo, int len)printf("myOnAccountDomainInfo %sn", domainInfo);int main(int argc, char *argv)void (*ohandler) (int);WORD VersionRequested;WSADATA WsaData;int error;VersionRequested = MAKEWORD(2, 0);WSAStartup(VersionRequested, &WsaData);ohandle
13、r = signal (SIGINT, my_handleSIG);if (ohandler != SIG_DFL) printf ("previous signal handler for SIGINT is not a default handlern");signal (SIGINT, ohandler);init_global(&global);global.cbOnStatusChanged = myOnStatusChanged;global.cbOnDomainRegistered = myOnDomainRegistered;global.cbOnU
14、serInfo = myOnUserInfo;global.cbOnAccountDomainInfo = myOnAccountDomainInfo;set_default_callback(&global);strcpy(global.szHost,"");strcpy(global.szUserID,"youname");strcpy(global.szUserPWD,"youpassword");global.clientinfo = PH_EMBED_CLIENT_INFO;global.challengekey =
15、 PH_EMBED_CLIENT_KEY;for (;)int next = phddns_step(&global);sleep(next);phddns_stop(&global);return 0;6. 關(guān)于客戶端界面客戶端界面一般包含登陸、登錄后的狀態(tài)顯示、介紹三個(gè)頁(yè)面。我們提供了一套界面模板供參考。模板代碼在源碼包UI目錄下。登錄界面:登錄后的狀態(tài)顯示界面:介紹界面:7. DDNS協(xié)議說(shuō)明動(dòng)態(tài)主機(jī)注冊(cè)協(xié)議提供一種將域名和動(dòng)態(tài)IP地址綁定的方法,允許客戶機(jī)將自己的IP地址提交給服務(wù)器,并選擇希望注冊(cè)的域名記錄,服務(wù)器確認(rèn)客戶機(jī)擁有該域名的權(quán)限,并修改DNS相應(yīng)記錄,在客
16、戶機(jī)在線的情況下維持這些動(dòng)態(tài)注冊(cè)的域名,并且在客戶機(jī)離線自動(dòng)刪除動(dòng)態(tài)注冊(cè)的域名。DDNS協(xié)議包含TCP認(rèn)證和UDP保持兩部分7.1. TCP認(rèn)證部分7.1.1. 賬號(hào)認(rèn)證客戶機(jī)必須通過(guò)賬號(hào)驗(yàn)證才能進(jìn)行域名申請(qǐng)、修改、注冊(cè)操作。賬號(hào)驗(yàn)證必須在服務(wù)器的就緒狀態(tài)下進(jìn)行。在其他狀態(tài)下客戶機(jī)發(fā)出賬號(hào)驗(yàn)證請(qǐng)求服務(wù)器都返回 503命令順序錯(cuò)誤的回應(yīng)。驗(yàn)證過(guò)程如下:客戶機(jī)發(fā)出AUTH authtype指令,authtype為一種驗(yàn)證類(lèi)型,我們這里使用AUTH ROUTER6(CRAM-MD5擴(kuò)展)驗(yàn)證。 服務(wù)器回應(yīng)一個(gè)挑戰(zhàn)串,該串使用客戶機(jī)的IP地址、服務(wù)器的當(dāng)前時(shí)間等不可重復(fù)不可預(yù)測(cè)的參數(shù)生成,服務(wù)器使用B
17、ASE64方式將該串返回客戶機(jī),回應(yīng)碼為334 “客戶機(jī)將挑戰(zhàn)串作為key使用CRAM-MD5的單向加密方式加密自己的密碼形成加密串,將賬號(hào)和加密串座位回應(yīng),其格式為:“賬號(hào)名+一個(gè)空格+加密嵌入認(rèn)證碼+客戶端信息+加密串”。其中加密嵌入認(rèn)證碼工4個(gè)字節(jié),為嵌入認(rèn)證碼與服務(wù)器當(dāng)前時(shí)間運(yùn)算得到,服務(wù)器時(shí)間是挑戰(zhàn)串的第六個(gè)字節(jié)后的4個(gè)字節(jié),算法是嵌入認(rèn)證碼與該時(shí)間的去翻進(jìn)或運(yùn)算后循環(huán)右移一定位數(shù):該右移位數(shù)是用服務(wù)器時(shí)間整除30,客戶端信息也是4個(gè)字節(jié),前兩節(jié)為嵌入式的客戶號(hào),后兩位為客戶端版本號(hào),客戶機(jī)使用base64方式對(duì)回應(yīng)進(jìn)行編碼返回服務(wù)器?!币陨险f(shuō)明對(duì)應(yīng)的代碼:int GenerateC
18、rypt(char *szUser, char *szPassword, char *szChallenge64, long clientinfo, long embkey,char *szResult)unsigned char szDecoded256;unsigned char szKey256;unsigned char szAscii256; unsigned int nDecodedLen;long challengetime = 0;int nMoveBits;long challengetime_new = 0;long a, b, c, d;unsigned int nKey
19、;int nUser;unsigned int nEncoded; /Base64 解碼nDecodedLen = lutil_b64_pton(szChallenge64, szDecoded, 256);memcpy(&challengetime, szDecoded + 6, 4); /取反進(jìn)行或運(yùn)算challengetime |= embkey; /得到循環(huán)移位位數(shù)nMoveBits = challengetime % 30; /完成32位的循環(huán)位移a = challengetime << (32 - nMoveBits) % 32);b = challengeti
20、me >> (unsigned int )nMoveBits) % 32);c = (0xffffffff << (32 - nMoveBits) % 32);d = b & c;challengetime_new = a | d; /KEY-MD5nKey = KeyMD5Encode(szKey, (unsigned char*)szPassword, strlen(char*)szPassword), (unsigned char*)szDecoded, nDecodedLen);szKeynKey = 0; nUser = strlen(char *)s
21、zUser);memcpy(szAscii, szUser, nUser);szAsciinUser = ' 'memcpy(szAscii+nUser+1, &challengetime_new,4);memcpy(szAscii+nUser+1+4,&clientinfo,4);memcpy(szAscii+nUser+1+4+4, szKey, nKey);/base64 編碼nEncoded = lutil_b64_ntop(unsigned char *)szAscii, nUser + 1 + 4 + 4 + nKey, szResult, 256)
22、;return nEncoded;服務(wù)器驗(yàn)證客戶的回應(yīng),如果賬號(hào)和密碼錯(cuò)誤則返回535,如果正確則返回一個(gè)多行回應(yīng),第一行為250,以后每行為該賬號(hào)已經(jīng)注冊(cè)的主機(jī)記錄。如果該賬號(hào)沒(méi)有注冊(cè)任何記錄則返回250<CRLF>.<CRLF>。 驗(yàn)證成功后服務(wù)器進(jìn)入驗(yàn)證狀態(tài)(Auth)。例子1:成功登陸C:AUTH ROUTER6S:334 UghjtYsdyu=C:awerasdfhjkloiuyqwertyuioS:250 Auth passed at level <1> .其中,<1>中的數(shù)字表示用戶級(jí)別:從0開(kāi)始,分別為:0 標(biāo)準(zhǔn)級(jí)1 專(zhuān)業(yè)級(jí)2 商
23、業(yè)級(jí)3 旗艦級(jí)例子2:不成功登陸C:AUTH ROUTERS:334 UghjtYsdyu=C:awerasdfhjkloiujqwertyuioS:535 Authentication failure.例子3:驗(yàn)證格式不正確C:AUTH foobarS:504 Authentication mechanism unsupported7.1.2. 服務(wù)器跳轉(zhuǎn)在以上的帳戶驗(yàn)證過(guò)程中,如果服務(wù)器發(fā)現(xiàn)該帳號(hào)不應(yīng)該在本臺(tái)服務(wù)器登陸,將返回需要跳轉(zhuǎn)字串536 Should Redirection例子:C:建立6060連接S:220 DDNS ServerX4 Ready.C:AUTH ROUTER6S:
24、334 UghjtYsdyu=C:awerasdfhjkloiuyqwertyuioS: 536 Should Redirection To <>C:QUITS:221 Good bye此時(shí),客戶端應(yīng)重新連接到:7.1.3. 注冊(cè)域名在驗(yàn)證狀態(tài)下客戶機(jī)可以選擇注冊(cè)域名,客戶機(jī)使用REGI命令注冊(cè),最后使用CNFM確認(rèn)注冊(cè)操作獲取注冊(cè)碼,完成注冊(cè)工作。一般要求要注冊(cè)賬號(hào)下的全部域名,否則不注冊(cè)的域名無(wú)法解析。例子:C:REGI A S:250 register successfullyC:CNFMS:250 00123456 012381090在一次會(huì)話中客戶機(jī)只能執(zhí)行一次注冊(cè)動(dòng)作,
25、一次注冊(cè)動(dòng)作可以注冊(cè)或撤銷(xiāo)注冊(cè)多個(gè)名稱(chēng)。如果客戶機(jī)在CNFM指令成功后再次使用REGI或CNFM服務(wù)器將返回命令順序出錯(cuò)。 發(fā)出CNFM指令后,得到的回應(yīng)碼后的字符串分別為更新協(xié)議使用的會(huì)話ID和初始序號(hào)。如果客戶機(jī)在一次在線過(guò)程中多次連接并注冊(cè)主機(jī)則使用最新的注冊(cè)碼。l 會(huì)話編號(hào)為非0的有符號(hào)長(zhǎng)整數(shù),使用十進(jìn)制表示。l 初始序號(hào)為非0的無(wú)符號(hào)長(zhǎng)整數(shù),使用十進(jìn)制表示。如果沒(méi)有成功動(dòng)態(tài)注冊(cè)域名則服務(wù)器返回507 no name registered. REGI指令和CNFM指令支持批命令方式發(fā)送,也就是客戶端可以連續(xù)發(fā)送若干條REGI指令并以一條CNFM指令結(jié)尾。中間使用CRLF隔開(kāi),服務(wù)器會(huì)按
26、順序批量回應(yīng)所有的REGI指令和CNFM指令,每個(gè)回應(yīng)同樣使用CRLF隔開(kāi)。7.1.4. 獲取域名信息在驗(yàn)證狀態(tài)下客戶機(jī)可以選擇獲取該帳號(hào)的域名清單,命令格式為:STAT DOMAINrn,服務(wù)器第一行返回250 DomainInfo OK,后接X(jué)ML格式的域名清單,以CRLF.CRLF結(jié)尾。例子:C:STAT DOMAINS:250 DomainInfo OK<domainInfo account='test' login='test'> <domains><domain><DomainName></Dom
27、ainName> <RegDate>1246419992</RegDate> <Account>test</Account> <StatusCode>25</StatusCode><RootName></RootName><IsFree>1</IsFree></domain></domains><domainInfo>C: QUITS:221 Good bye7.1.5. 獲取用戶信息在驗(yàn)證狀態(tài)下客戶機(jī)可以選擇獲取用戶信息,命令格式為
28、:STAT USERrn,服務(wù)器第一行返回250 Userinfo OK,后接X(jué)ML格式的用戶數(shù)據(jù),以CRLF.CRLF結(jié)尾。例子:C:STAT USERS:250 Userinfo OK<userInfo account='test' login='test'> <ID>88888</ID> <Account>test</Account> <Password></Password> <Email>test</Email> <RegDate>1
29、246419991</RegDate> <Credit>0.0</Credit><Largess>0.0</Largess> <IsEnable></IsEnable> <PHServer></PHServer> <PWDQuestion></PWDQuestion><IsEnterprise>0</IsEnterprise> <Contactor></Contactor> <IsMale>0</I
30、sMale> <Address></Address><PostCode>200000</PostCode><IDType></IDType> <IDNumber>lt;/IDNumber> <Country>cn</Country> <Province></Province><City></City> <Tel>34333333</Tel><ServiceTyp
31、e>0</ServiceType> <ClientIP>-1301289100</ClientIP></userInfo>C: QUITS:221 Good bye7.2. UDP保持部分在完成TCP登陸和注冊(cè)過(guò)程后,客戶端就需要斷開(kāi)TCP連接,進(jìn)入長(zhǎng)期的“心跳保持”狀態(tài)。 心跳保持協(xié)議使用UDP 6060端口,客戶機(jī)必須按規(guī)定的時(shí)間隔定時(shí)向服務(wù)器發(fā)送更新數(shù)據(jù)包,如果服務(wù)器在5分鐘內(nèi)沒(méi)有收到客戶機(jī)的更新請(qǐng)求將自動(dòng)刪除該客戶的所有注冊(cè)的域名。7.2.1. 心跳包協(xié)議客戶端使用TCP過(guò)程中后獲得的挑戰(zhàn)串加密操作碼、序號(hào)和校驗(yàn)碼連同TCP過(guò)程中完
32、成域名注冊(cè)后的會(huì)話編號(hào)發(fā)送給服務(wù)器。如果沒(méi)有錯(cuò)誤服務(wù)器回應(yīng)正常UDP_OPCODE_UPDATE_OK,否則服務(wù)器回應(yīng)更新失敗信息UDP_OPCODE_UPDATE_ERROR,此時(shí)客戶端必須重新登錄并注冊(cè)域名。如果客戶機(jī)3分鐘內(nèi)沒(méi)有收到服務(wù)器得回應(yīng)則判斷網(wǎng)絡(luò)連接出現(xiàn)問(wèn)題。但在沒(méi)有程序錯(cuò)誤的時(shí)候繼續(xù)發(fā)送更新信息。所有操作,客戶端都發(fā)送同樣結(jié)構(gòu)與大小的數(shù)據(jù)包:struct DATA_KEEPALIVE /! 會(huì)話ID ,注冊(cè)域名成功后返回的會(huì)話ID int lChatID; /! 操作碼 參考后面的define值 Int lOpCode; /! 包ID ,注冊(cè)域名成功后返回的起始序號(hào)/! 客戶機(jī)
33、每成功發(fā)送一次更新信息后,序號(hào)加1 Int lID; /! 校驗(yàn)和 計(jì)算方法為:0-(包ID+操作碼) Int lSum; /! 保留字,目前不使用 Int lReserved; ;/! 更新包擴(kuò)展結(jié)構(gòu),用于服務(wù)器返回時(shí)IP地址typedef struct DATA_KEEPALIVE keepalive;Int ip; DATA_KEEPALIVE_EXT; /! 心跳包更新指令 #define UDP_OPCODE_UPDATE_VER2 0x2010 /! 心跳包服務(wù)器返回正常 #define UDP_OPCODE_UPDATE_OK 0x2050 /! 心跳包服務(wù)器返回錯(cuò)誤 #defi
34、ne UDP_OPCODE_UPDATE_ERROR 1000 /! 心跳包注銷(xiāo)登錄 #define UDP_OPCODE_LOGOUT 11 /! 心跳包加密部分大小 #define KEEPALIVE_PACKET_LEN 20每次發(fā)送都需要將該數(shù)據(jù)報(bào)加密,客戶端使用TCP過(guò)程中后獲得的挑戰(zhàn)串加密操作碼、序號(hào)和校驗(yàn)碼連同TCP過(guò)程中完成域名注冊(cè)后的會(huì)話ID發(fā)送給服務(wù)器。其中,會(huì)話ID和序號(hào)為注冊(cè)域名成功后返回的會(huì)話ID和起始序號(hào),客戶機(jī)每成功發(fā)送一次更新信息,序號(hào)加1。校驗(yàn)碼計(jì)算方法為:0-(包ID+操作碼)加密與發(fā)送過(guò)程代碼段:BOOL SendKeepAlive(PHGlobal *p
35、hglobal, int opCode) DATA_KEEPALIVE data; blf_ctx blf; char p1KEEPALIVE_PACKET_LEN,p2KEEPALIVE_PACKET_LEN; memset(&data,0,sizeof(data); data.lChatID = phglobal->nChatID; data.lID = phglobal->nStartID; data.lOpCode = opCode; data.lSum = 0 - (data.lID + data.lOpCode);data.lReserved = 0; if (
36、!phglobal->bTcpUpdateSuccessed) return FALSE; LOG(1) ("SendKeepAlive() %dn",opCode); InitBlowfish(&blf, (unsigned char*)phglobal->szChallenge,phglobal->nChallengeLen); memcpy(p1,&data,KEEPALIVE_PACKET_LEN);memcpy(p2,&data,KEEPALIVE_PACKET_LEN); Blowfish_EnCode(&blf
37、, p1+4,p2+4,KEEPALIVE_PACKET_LEN-4); phSend(phglobal->m_udpsocket, p2, KEEPALIVE_PACKET_LEN,0); /RecvKeepaliveResponse(); return TRUE; 數(shù)據(jù)包接受與解碼過(guò)程代碼段:int RecvKeepaliveResponse(PHGlobal *phglobal) char temp100;DATA_KEEPALIVE_EXT rdata; DATA_KEEPALIVE data; blf_ctx blf; char p1KEEPALIVE_PACKET_LEN,p2KEEPALIVE_PACKET_LEN; if (!phglobal->bTcpUpdateSuccessed) return errorOccupyReconnect; /prevent the thread to be suspended while waiting for dataif (phDataReadable(phglobal
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物服務(wù)保安工作總結(jié)
- 【正版授權(quán)】 ISO 59040:2025 EN Circular economy - Product circularity data sheet
- 2025-2030全球商業(yè)藥品采購(gòu)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)草酸镥水合物行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球農(nóng)機(jī)三角帶行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球工業(yè)級(jí)硅酸鉀行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)航空航天設(shè)備零部件用清洗機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球直流電流分流器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球帳篷地面釘行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球500+Ah電芯行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 【字貼】人教PEP版-小學(xué)英語(yǔ)四年級(jí)上冊(cè)單詞表國(guó)標(biāo)體描紅字帖(含音標(biāo))
- 班組建設(shè)考核制度
- 如何寫(xiě)好賞析文章
- 超聲科圖像質(zhì)量評(píng)價(jià)細(xì)則及超聲科制度匯編
- 損傷控制性手術(shù)
- 中國(guó)古代文學(xué)史 馬工程課件(中)24第六編 遼西夏金元文學(xué) 緒論
- 2022版義務(wù)教育(勞動(dòng))課程標(biāo)準(zhǔn)(含2022年修訂部分)
- 過(guò)松源晨炊漆公店(其五)課件
- 最新交管12123學(xué)法減分題庫(kù)含答案(通用版)
- 安全事故案例圖片(76張)課件
- 奢侈品管理概論完整版教學(xué)課件全書(shū)電子講義(最新)
評(píng)論
0/150
提交評(píng)論