![PeanuthulldynamicDNSSDK_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a1.gif)
![PeanuthulldynamicDNSSDK_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a2.gif)
![PeanuthulldynamicDNSSDK_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a3.gif)
![PeanuthulldynamicDNSSDK_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a4.gif)
![PeanuthulldynamicDNSSDK_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/909ad531-d171-4002-855d-6a51cf45944a/909ad531-d171-4002-855d-6a51cf45944a5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、.花生殼動態(tài)域名SDKPeanuthull dynamic DNS上海貝銳信息科技有限公司目錄1. 概述22. 官方認證23. 關于官方認證Key的說明34. 示例源碼35. 源碼說明66. 關于客戶端界面97. DDNS協(xié)議說明117.1. TCP認證部分117.1.1. 賬號認證117.1.2. 服務器跳轉157.1.3. 注冊域名167.1.4. 獲取域名信息177.1.5. 獲取用戶信息187.2. UDP保持部分197.2.1. 心跳包協(xié)議197.2.2. 維持客戶端在線247.2.3. 獲得客戶端IP端變更247.2.4. 注銷登陸24上海貝銳信息科技有限公司33 1. 概述花生殼
2、是一套完全免費的桌面式域名管理和動態(tài)域名解析( DDNS )等功能為一體的客戶端軟件?;ㄉ鷼た蛻舳讼蛴脩籼峁┤轿坏淖烂媸接蛎芾硪约皠討B(tài)域名解析服務。用戶無需通過 IE 瀏覽器,直接通過客戶端使用 所提供的動態(tài)域名服務,包括用戶注冊、域名查詢、域名管理、 IP 工具以及自診斷等各種服務;且通過樹狀結構方式可使用戶對多達上百個域名進行方便管理,亦可自主添加二級域名,自由設置 A 記錄( IP 指向)、 MX記錄、 CName(別名)、 URL重定向等,用戶操作界面清晰簡單?;ㄉ鷼討B(tài) DDNS 服務支持包括Modem、ISDN 、ADSL、有
3、線電視網(wǎng)絡、雙絞線到戶的寬帶網(wǎng)和其他任何能夠提供互聯(lián)網(wǎng)真實 IP 的接入服務線路,無論連接獲得的 IP 屬于動態(tài)還是靜態(tài),都可根據(jù)自己的需求選擇合適的系統(tǒng)平臺、數(shù)據(jù)庫平臺以及站點運營模式,并且可避免在轉換服務商時,因受制域名解析服務商而忍受效率低下的修改過程,全面利用花生殼來建立擁有自主域名和最大自主權的互聯(lián)網(wǎng)主機。 以下為花生殼嵌入式開發(fā)所需要的相關資源,通過開發(fā),您可以完成如同官方花生殼客戶端完全一樣的功能,甚至將花生殼動態(tài)域名嵌入您的軟件、路由器乃至各種網(wǎng)絡設備。2. 官方認證獲得官方認證的軟硬件將被列入官方支持清單:支持清單具體步驟參見:花生殼嵌入申請獲得官方認證前,您將需要簽訂相關合
4、作協(xié)議。3. 關于官方認證Key的說明您在對產(chǎn)品進行正式的發(fā)布前,需要執(zhí)行以下步驟:3.1. 從oray開發(fā)者平臺 注冊開發(fā)者,獲得App ID、App Secret、App Version:l App ID - 2個字節(jié)l App Version -2個字節(jié) l App Secret -4個字節(jié)注:網(wǎng)站上申請得到的App ID、App Secret、App Version是十進制3.2. 服務器地址P3.3. App ID與App Version組合到4個字節(jié)的整數(shù),得到clientinfo 如0xFFFF為App ID,0xEEEE為App Version,則組合后為:0xFFFFEEEE
5、3.4. 用3.2步驟得到的clientinfo和App Secret 提交驗證。(示例源碼中的PH_EMBED_CLIENT_INFO和PH_EMBED_CLIENT_KEY)4. 示例源碼我們提供一套已實現(xiàn)所有協(xié)議的規(guī)范代碼,您可以進行任意傳播與使用,沒有任何協(xié)議限制。如果你發(fā)現(xiàn)本套代碼中存在需要修復的問題,請發(fā)送Email到:open4.1. 源碼清單文件說明main.c主入口函數(shù),一般修改該文件和phkey.h里的值就行了Makefile.amLinux編譯MakefilePHGlobal.c全局變量及公用函數(shù)實現(xiàn)phkey.hKey值定義PHGlobal.h程序用到的數(shù)據(jù)結構的定義p
6、hupdate.cPHDDNS Embed網(wǎng)絡通信主過程phupdate.hbase64.c通用加密算法相關代碼bitstream.cbitstream.hblowfish.cblowfish.hglobal.hlutil.hmd5.cmd5.hgenerate.cDDNS嵌入式私有專用加密算法實現(xiàn),用于TCP主認證過程,以及每個心跳包的加解密generate.hlog.c日志實現(xiàn)log.hPHSocket.cSOCKET封裝,支持TCP/UDPPHSocket.h4.2. 編譯4.2.1. windows編譯源碼壓縮包內包含VC6工程文件,可在Windows上編譯測試,無其他依賴項4.2.2
7、. Linux(X86, ARM, MIPS)編譯過程:1、解壓縮#tar zxvf phddns-2.0.6.32828.tar.gz# cd phddns-2.0.6.328282、編譯前configure為當前平臺編譯#./configure3、編譯最終可執(zhí)行文件#makeARM與MIPS交叉編譯:您需要首先安裝相關的交叉編譯器,相關工具鏈的安裝請參考開發(fā)板文檔,并執(zhí)行類似以下的編譯前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. 運行l(wèi) 直接運行,根據(jù)提示進行操作l featured.exe -h 有參數(shù)說明5. 源碼說明我們提供的源碼封裝了DDNS協(xié)議的解析,對外暴露結構PHGlobal,只要往結構里填入相關信息,即可實現(xiàn)一個簡單的客戶端。PHGlobal結構說明參考源碼里的phglobal.h文件例子:簡單客戶端#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)更新回調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");/域名注冊回調static void myOnDomainRegistered(PHGlobal* global, char *domain)printf("myOnDomainRegistered %sn", domain);/用戶信息XML數(shù)據(jù)回調static void myOnUserInfo(PHGlobal* global, char *userInfo, int len)printf("myOnUserInfo %sn", userInfo);/域名信息XML數(shù)據(jù)回調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. 關于客戶端界面客戶端界面一般包含登陸、登錄后的狀態(tài)顯示、介紹三個頁面。我們提供了一套界面模板供參考。模板代碼在源碼包UI目錄下。登錄界面:登錄后的狀態(tài)顯示界面:介紹界面:7. DDNS協(xié)議說明動態(tài)主機注冊協(xié)議提供一種將域名和動態(tài)IP地址綁定的方法,允許客戶機將自己的IP地址提交給服務器,并選擇希望注冊的域名記錄,服務器確認客戶機擁有該域名的權限,并修改DNS相應記錄,在客
16、戶機在線的情況下維持這些動態(tài)注冊的域名,并且在客戶機離線自動刪除動態(tài)注冊的域名。DDNS協(xié)議包含TCP認證和UDP保持兩部分7.1. TCP認證部分7.1.1. 賬號認證客戶機必須通過賬號驗證才能進行域名申請、修改、注冊操作。賬號驗證必須在服務器的就緒狀態(tài)下進行。在其他狀態(tài)下客戶機發(fā)出賬號驗證請求服務器都返回 503命令順序錯誤的回應。驗證過程如下:客戶機發(fā)出AUTH authtype指令,authtype為一種驗證類型,我們這里使用AUTH ROUTER6(CRAM-MD5擴展)驗證。 服務器回應一個挑戰(zhàn)串,該串使用客戶機的IP地址、服務器的當前時間等不可重復不可預測的參數(shù)生成,服務器使用B
17、ASE64方式將該串返回客戶機,回應碼為334 “客戶機將挑戰(zhàn)串作為key使用CRAM-MD5的單向加密方式加密自己的密碼形成加密串,將賬號和加密串座位回應,其格式為:“賬號名+一個空格+加密嵌入認證碼+客戶端信息+加密串”。其中加密嵌入認證碼工4個字節(jié),為嵌入認證碼與服務器當前時間運算得到,服務器時間是挑戰(zhàn)串的第六個字節(jié)后的4個字節(jié),算法是嵌入認證碼與該時間的去翻進或運算后循環(huán)右移一定位數(shù):該右移位數(shù)是用服務器時間整除30,客戶端信息也是4個字節(jié),前兩節(jié)為嵌入式的客戶號,后兩位為客戶端版本號,客戶機使用base64方式對回應進行編碼返回服務器?!币陨险f明對應的代碼: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); /取反進行或運算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;服務器驗證客戶的回應,如果賬號和密碼錯誤則返回535,如果正確則返回一個多行回應,第一行為250,以后每行為該賬號已經(jīng)注冊的主機記錄。如果該賬號沒有注冊任何記錄則返回250<CRLF>.<CRLF>。 驗證成功后服務器進入驗證狀態(tài)(Auth)。例子1:成功登陸C:AUTH ROUTER6S:334 UghjtYsdyu=C:awerasdfhjkloiuyqwertyuioS:250 Auth passed at level <1> .其中,<1>中的數(shù)字表示用戶級別:從0開始,分別為:0 標準級1 專業(yè)級2 商
23、業(yè)級3 旗艦級例子2:不成功登陸C:AUTH ROUTERS:334 UghjtYsdyu=C:awerasdfhjkloiujqwertyuioS:535 Authentication failure.例子3:驗證格式不正確C:AUTH foobarS:504 Authentication mechanism unsupported7.1.2. 服務器跳轉在以上的帳戶驗證過程中,如果服務器發(fā)現(xià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此時,客戶端應重新連接到:7.1.3. 注冊域名在驗證狀態(tài)下客戶機可以選擇注冊域名,客戶機使用REGI命令注冊,最后使用CNFM確認注冊操作獲取注冊碼,完成注冊工作。一般要求要注冊賬號下的全部域名,否則不注冊的域名無法解析。例子:C:REGI A S:250 register successfullyC:CNFMS:250 00123456 012381090在一次會話中客戶機只能執(zhí)行一次注冊動作,
25、一次注冊動作可以注冊或撤銷注冊多個名稱。如果客戶機在CNFM指令成功后再次使用REGI或CNFM服務器將返回命令順序出錯。 發(fā)出CNFM指令后,得到的回應碼后的字符串分別為更新協(xié)議使用的會話ID和初始序號。如果客戶機在一次在線過程中多次連接并注冊主機則使用最新的注冊碼。l 會話編號為非0的有符號長整數(shù),使用十進制表示。l 初始序號為非0的無符號長整數(shù),使用十進制表示。如果沒有成功動態(tài)注冊域名則服務器返回507 no name registered. REGI指令和CNFM指令支持批命令方式發(fā)送,也就是客戶端可以連續(xù)發(fā)送若干條REGI指令并以一條CNFM指令結尾。中間使用CRLF隔開,服務器會按
26、順序批量回應所有的REGI指令和CNFM指令,每個回應同樣使用CRLF隔開。7.1.4. 獲取域名信息在驗證狀態(tài)下客戶機可以選擇獲取該帳號的域名清單,命令格式為:STAT DOMAINrn,服務器第一行返回250 DomainInfo OK,后接XML格式的域名清單,以CRLF.CRLF結尾。例子: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. 獲取用戶信息在驗證狀態(tài)下客戶機可以選擇獲取用戶信息,命令格式為
28、:STAT USERrn,服務器第一行返回250 Userinfo OK,后接XML格式的用戶數(shù)據(jù),以CRLF.CRLF結尾。例子: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登陸和注冊過程后,客戶端就需要斷開TCP連接,進入長期的“心跳保持”狀態(tài)。 心跳保持協(xié)議使用UDP 6060端口,客戶機必須按規(guī)定的時間隔定時向服務器發(fā)送更新數(shù)據(jù)包,如果服務器在5分鐘內沒有收到客戶機的更新請求將自動刪除該客戶的所有注冊的域名。7.2.1. 心跳包協(xié)議客戶端使用TCP過程中后獲得的挑戰(zhàn)串加密操作碼、序號和校驗碼連同TCP過程中完
32、成域名注冊后的會話編號發(fā)送給服務器。如果沒有錯誤服務器回應正常UDP_OPCODE_UPDATE_OK,否則服務器回應更新失敗信息UDP_OPCODE_UPDATE_ERROR,此時客戶端必須重新登錄并注冊域名。如果客戶機3分鐘內沒有收到服務器得回應則判斷網(wǎng)絡連接出現(xiàn)問題。但在沒有程序錯誤的時候繼續(xù)發(fā)送更新信息。所有操作,客戶端都發(fā)送同樣結構與大小的數(shù)據(jù)包:struct DATA_KEEPALIVE /! 會話ID ,注冊域名成功后返回的會話ID int lChatID; /! 操作碼 參考后面的define值 Int lOpCode; /! 包ID ,注冊域名成功后返回的起始序號/! 客戶機
33、每成功發(fā)送一次更新信息后,序號加1 Int lID; /! 校驗和 計算方法為:0-(包ID+操作碼) Int lSum; /! 保留字,目前不使用 Int lReserved; ;/! 更新包擴展結構,用于服務器返回時IP地址typedef struct DATA_KEEPALIVE keepalive;Int ip; DATA_KEEPALIVE_EXT; /! 心跳包更新指令 #define UDP_OPCODE_UPDATE_VER2 0x2010 /! 心跳包服務器返回正常 #define UDP_OPCODE_UPDATE_OK 0x2050 /! 心跳包服務器返回錯誤 #defi
34、ne UDP_OPCODE_UPDATE_ERROR 1000 /! 心跳包注銷登錄 #define UDP_OPCODE_LOGOUT 11 /! 心跳包加密部分大小 #define KEEPALIVE_PACKET_LEN 20每次發(fā)送都需要將該數(shù)據(jù)報加密,客戶端使用TCP過程中后獲得的挑戰(zhàn)串加密操作碼、序號和校驗碼連同TCP過程中完成域名注冊后的會話ID發(fā)送給服務器。其中,會話ID和序號為注冊域名成功后返回的會話ID和起始序號,客戶機每成功發(fā)送一次更新信息,序號加1。校驗碼計算方法為:0-(包ID+操作碼)加密與發(fā)送過程代碼段: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ù)包接受與解碼過程代碼段: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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45177-2024人工光型植物工廠光環(huán)境技術規(guī)范
- racemic-6-7-Dihydroxy-cannabichromene-生命科學試劑-MCE-9913
- 2-Isopropyl-5-methylanisole-生命科學試劑-MCE-4177
- 2025年度解除租賃合同簡易協(xié)議書(體育場館)
- 二零二五年度城市商業(yè)圈門市房租賃與商業(yè)資源整合合同
- 二零二五年度電子租房合同附租客租賃滿意度調查
- 2025年度員工離職補償及保密協(xié)議
- 二零二五年度社區(qū)車位使用權共有管理協(xié)議書
- 施工現(xiàn)場施工防火制度
- 教育機構電力供應的未來趨勢-分布式變電站
- 2022版義務教育(勞動)課程標準(含2022年修訂部分)
- 過松源晨炊漆公店(其五)課件
- 最新交管12123學法減分題庫含答案(通用版)
- 安全事故案例圖片(76張)課件
- 預應力錨索施工方案
- 豇豆生產(chǎn)技術規(guī)程
- 奢侈品管理概論完整版教學課件全書電子講義(最新)
- 文藝美學課件
- 中藥炮制學教材
- 常見腫瘤AJCC分期手冊第八版(中文版)
- 電氣第一種第二種工作票講解pptx課件
評論
0/150
提交評論