專利名稱:域名解析代理方法和系統、域名解析代理服務器的制作方法
技術領域:
本發明涉及數字網絡通信技術領域,特別是涉及一種域名解析代理方法和系統、一種域名解析代理服務器。
背景技術:
DNS (域名系統,Domain Name System)是一種用于TCP/IP (傳輸控制協議/因特網互聯協議,Transmission Control Protocol/Internet Protocol)的應用程序的分布式數據庫,它提供主機名字和IP地址之間的轉換信息。目前通常采用的域名解析方法如下1)客戶端向DNS服務器發送域名解析請求;2)DNS服務器對域名進行解析;3)DNS服務器將解析結果返回給客戶端;以及4)客戶端從 該結果中選擇一個IP地址進行訪問。目前,域名解析的過程需要調用Windows應用層API(應用程序編程接,口,Application Programming Interface),不僅允許正常程序過濾和修改Windows網絡協議,而且更令惡意程序有機可乘,因此存在被惡意代碼攻擊的可能。而DNS是一個開放的系統,可以自由地接收并發送信息,一旦受到攻擊,Windows客戶端就會連接到指定的惡意服務器,木馬或病毒操作集團就會克隆實際服務器的大部分服務,并將一部分內容替換為木馬或病毒,從而侵害用戶利益。例如,由于Winsock SPI(服務商提供接口,Service Provider Interface)和LSP(分層服務提供程序,Layered Service Provider)等API的設計,互聯網間謀軟件和木馬可以通過以下幾個方面篡改Windows網絡協議1、修改Winsock 2的LSP的堆棧設置運行木馬DLL (動態鏈接庫,Dynamic Link Library)文件;2、添加在Winsock LSP 2額外協議棧運行木馬DLL文件。而一旦間諜木馬DLL文件進入Winsock LSP2的堆棧,它就會悄悄地過濾互聯網通信信息,具體表現在I、竊取并篡改用戶名和密碼信息等,輕則可以讓Windows客戶端無法打開網頁,重則是網絡釣魚和金融詐騙給Windows客戶端造成巨大損失;2、可允許未經身份驗證的遠程攻擊者迅速可靠地欺騙響應并將記錄插入DNS服務器或者Windows客戶端緩存,從而重定向Internet通信量;3、可允許未經身份驗證的遠程攻擊者將特制的響應發送給易受攻擊的系統的DNS請求,從而使DNS緩存中毒,并將Internet通信量從合法位置重定向至其他位置;4、Windows應用層網絡很多參數是通過注冊表來配置的,這恰恰給了惡意程序隨意修改注冊表的機會,使得網絡失效或服務不能啟用或篡改網絡配置,從而破壞正常網絡應用。總之,需要本領域技術人員迫切解決的一個技術問題就是如何能夠防止域名解析過程中惡意代碼的攻擊,從而提高域名解析的安全性
發明內容
本發明所要解決的技術問題是提供一種域名解析代理方法和系統、一種域名解析代理服務器,能夠基于HTTP協議的DNS代理解析技術進行域名解析,從而提高域名解析的安全性。為了解決上述問題,本發明公開了一種域名解析代理方法,包括客戶端發起基于HTTP協議的域名解析請求,所述域名解析請求中包括域名參數;接收所述域名解析請求;從所述域名解析請求中解析域名參數;依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;
解析DNS服務器返回的DNS應答,并返回給客戶端。優選的,所述客戶端通過如下步驟發起域名解析請求將需要解析的域名參數進行base64編碼,并封裝到HTTP GET命令請求的包頭中;向域名解析代理服務器發送所述HTTP GET命令請求;所述從所述域名解析請求中解析域名參數的步驟,包括所述域名解析代理服務器的CGI程序接收所述HTTP GET命令請求;所述CGI程序通過對所述HTTP GET命令請求進行base64解碼,解析出所述域名參數。優選的,在將需要解析的域名參數進行base64編碼前,所述客戶端發起域名解析請求的步驟,還包括將需要解析的域名參數進行加密,以加密后的域名參數進行base64編碼;在所述CGI程序對所述HTTP GET命令請求進行base64解碼前,所述從域名解析請求中解析域名參數的步驟,還包括對所述HTTP GET命令請求進行解密,以解密后的HTTP GET命令請求進行base64解碼。優選的,所述解析DNS服務器返回的DNS應答,并返回給客戶端的步驟,包括將DNS服務器返回的DNS應答作為GET應答的內容,進行加密和base64編碼后,返回給客戶端。優選的,所述域名解析請求中還包括客戶端請求序列號參數和校驗碼參數;在依據解析得到的域名參數,向DNS服務器發起DNS查詢請求前,所述方法還包括根據所述校驗碼參數,確認客戶端是否為可信連接發起者,若是,則參照所述客戶端請求序列號參數及檢驗碼參數生成一個消息摘要;以該消息摘要作為關鍵字,將相應客戶端作為連接節點插入待響應DNS應答map中;所述解析DNS服務器返回的DNS應答,并返回給客戶端的步驟,還包括通過查詢消息摘要關鍵字,找到該客戶端的連接節點;將加密和base64編碼后的DNS相應數據拷貝給該連接節點;從待響應DNS應答map中刪除該連接節點。優選的,所述方法還包括所述客戶端判斷所述域名解析代理服務器返回的DNS應答,若該DNS應答的HTTP狀態碼為200,則解析所述DNS應答;若該DNS應答的HTTP狀態碼不為200,則返回錯誤,并結束本次查詢請求。優選的,所述解析所述DNS應答的步驟,包括獲取HTTP響應信息數據載荷;將數據載荷進行base64解碼,并解密,得到DNS解析數據。優選的,所述解析所述DNS應答的步驟,還包括解析所述DNS解析數據的字段,得到相應的數據結構;為所述數據結構申請動態內存,并將該動態內存插入緩存系統。
優選的,所述方法還包括在該DNS應答的HTTP狀態碼為200時,記錄所述域名解析代理服務器的游標位置,以所述游標位置作為下次域名解析的定向依據。優選的,所述域名解析請求中還包括查詢信息或者超時信息;其中,所述查詢信息包括遞歸查詢或者非遞歸查詢,所述超時信息表示客戶端得至Ij DNS應答的最大時間。另一方面,本發明還公開了一種域名解析代理服務器,其分別連接客戶端及DNS服務器,包括接收模塊,用于接收客戶端發起的基于HTTP協議的域名解析請求,所述域名解析請求中包括域名參數;第一解析模塊,用于從所述域名解析請求中解析域名參數;查詢模塊,用于依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;第二解析模塊,用于解析DNS服務器返回的DNS應答;及返回模塊,用于將所述DNS應答返回給客戶端。優選的,所述接收模塊和所述第一解析模塊為CGI程序;所述CGI程序,具體用于接收所述HTTP GET命令請求,并通過對所述HTTP GET命令請求進行base64解碼,解析出所述域名參數。優選的,所述CGI程序還用于,在對所述HTTP GET命令請求進行base64解碼前,對所述HTTP GET命令請求進行解密,以解密后的HTTP GET命令請求進行base64解碼。優選的,所述第二解析模塊,具體用于將DNS服務器返回的DNS應答作為GET應答的內容,進行加密和base64編碼。優選的,所述域名解析請求中還包括客戶端請求序列號參數和校驗碼參數;所述方法域名解析代理服務器還包括認證模塊,用于在所述第二解析模塊依據解析得到的域名參數,向DNS服務器發起DNS查詢請求前,根據所述校驗碼參數,確認客戶端是否為可信連接發起者,若是,則參照所述客戶端請求序列號參數及檢驗碼參數生成一個消息摘要;節點插入模塊,用于以該消息摘要作為關鍵字,將相應客戶端作為連接節點插入待響應DNS應答map中;所述第二解析模塊包括查詢單元,用于通過查詢消息摘要關鍵字,找到該客戶端的連接節點;拷貝單元,用于將加密和base64編碼后的DNS相應數據拷貝給該連接節點;及
刪除單元,用于從待響應DNS應答map中刪除該連接節點。優選的,所述域名解析請求中還包括查詢信息或者超時信息;其中,所述查詢信息包括遞歸查詢或者非遞歸查詢,所述超時信息表示客戶端得至Ij DNS應答的最大時間。另一方面,本發明還公開了一種域名解析代理系統,包括客戶端、DNS服務器及連接在所述客戶端和DNS服務器之間的域名解析代理服務器,其中,所述域名解析代理服務器包括接收模塊,用于接收客戶端發起的基于HTTP協議的域名解析請求,所述域名解析請求中包括域名參數;第一解析模塊,用于從所述域名解析請求中解析域名參數; 查詢模塊,用于依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;第二解析模塊,用于解析DNS服務器返回的DNS應答;及返回模塊,用于將所述DNS應答返回給客戶端。優選的,所述客戶端包括判斷模塊,用于判斷所述域名解析代理服務器返回的DNS應答;應答解析模塊,用于在該DNS應答的HTTP狀態碼為200時,解析所述DNS應答;及返回模塊,用于在該DNS應答的HTTP狀態碼不為200時,返回錯誤,并結束本次查詢請求。優選的,所述應答解析模塊,包括獲取單元,用于獲取HTTP響應信息數據載荷;解碼解密單元,用于將數據載荷進行base64解碼,并解密,得到DNS解析數據。優選的,所述應答解析模塊,還包括字段解析單元,用于解析所述DNS解析數據的字段,得到相應的數據結構;申請單元,用于為所述數據結構申請動態內存;及插入單元,用于將該動態內存插入緩存系統。優選的,所述系統還包括記錄模塊,用于在該DNS應答的HTTP狀態碼為200時,記錄所述域名解析代理服務器的游標位置,以所述游標位置作為下次域名解析的定向依據。與現有技術相比,本發明具有以下優點首先,本發明采用基于HTTP協議的DNS代理解析技術進行域名解析,由于基于HTTP協議的DNS代理解析技術無需調用任意Windows應用層網絡API,而是通過DNS報文代理服務,所以不受LSP惡意代碼對DNS協議的篡改、攔截、過濾、重定向等影響,不受hosts文件篡改等攻擊影響;因此,相對于現有域名解析方法,能夠有效防止域名解析過程中惡意代碼的攻擊,從而提高域名解析的安全性;其次,本發明還可以將域名解析請求中的域名參數進行加密后發送給域名解析代理服務器,這樣,即使惡意代碼劫持HTTP通訊,也無法解密。因此,能夠避免基于域名過濾的網絡攻擊;再者,本發明還可以在客戶端記錄當前成功解析的域名解析代理服務器所在的游標位置,以便在下次解析時,定向到前一個成功域名解析代理服務器;
另外,本發明還可以由客戶端指定域名解析的超時時間,以便客戶端程序在指定的時間內得到成功或失敗的響應;進一步,本發明還可以由客戶端指定請求序列號參數和校驗碼參數,以確保多客戶端多服務器情況下的解析同步匹配算法;這樣,域名解析代理服務器可以根據客戶端的請求序列號參數和校驗碼參數,把DNS服務器返回的DNS解析信息打包給相應的客戶端,保證正確送達到客戶端,從而提高域名解析的成功率;更進一步,相對于現有技術Windows客戶端一般僅支持非遞歸方式查詢的缺陷,本發明能夠支持遞歸方式DNS查詢以及非遞歸方式DNS查詢;總之,本發明能夠實現基于HTTP協議的安全域名解析,能夠提高DNS解析的成功率,防止惡意代碼針對Windows網絡應用層及DNS協議本身的攻擊;本發明可應用于眾多安全產品中,以起到防范應用層惡意代碼攻擊DNS的作用,從而面向應用程序提供安全的DNS解析代理服務。
圖I是本發明一種域名解析代理方法實施例I的流程圖;圖2是本發明一種域名解析代理服務器與客戶端和DNS服務器之間的關系示意圖;圖3是本發明一種域名解析代理方法實施例2的流程圖;圖4是本發明一種域名解析代理方法實施例3的流程圖;圖5是本發明一種域名解析代理方法實施例4的流程圖;圖6是本發明一種域名解析代理服務器實施例的結構圖;圖7是本發明一種域名解析代理系統實施例的結構圖。
具體實施例方式為使本發明的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和具體實施方式
對本發明作進一步詳細的說明。現有域名解析方法被惡意代碼攻擊的根本原因是,其需要調用Windows應用層API,而Windows應用層API不僅允許正常程序過濾和修改Windows網絡協議,而且更令惡意程序有機可乘。本專利發明人注意了這一點,因此創造性地提出了本發明實施例的核心構思之一,也即,采用基于HTTP協議的DNS代理解析技術進行域名解析,由于基于HTTP協議的DNS代理解析技術無需調用任意Windows應用層網絡API,而是通過DNS報文代理服務,所以不受LSP惡意代碼對DNS協議的篡改、攔截、過濾、重定向等影響,不受hosts文件篡改等攻擊影響;因此,相對于現有域名解析方法,能夠有效防止域名解析過程中惡意代碼的攻擊,從而提高域名解析的安全性。參照圖1,示出了本發明域名解析代理方法實施例I的流程圖,具體可以包括步驟101、接收客戶端發起的基于HTTP協議的域名解析請求,所述域名解析請求中可以包括域名參數;本發明實施例中,所述客戶端可以為Windows客戶端,也可以為Linux客戶端,這里僅以Windows客戶端為例進行說明,其它系統的客戶端相互參照即可。HTTP協議定義了與服務器交互的不同方法,最基本的方法是GET和POST。事實上GET適用于多數請求,而保留POST僅用于更新站點。根據HTTP規范,GET用于信息獲取,而且應該是安全的和冪等的。在本發明的一種優選實施例中,為了提高域名解析的安全性,所述客戶端可以通過GET方法發起域名解析請求子步驟Al、將需要解析的域名參數進行base64編碼,并封裝到HTTPGET命令請求的包頭中;子步驟A2、向域名解析代理服務器發送所述HTTP GET命令請求。當然,除了 GET外,本領域技術人員還可以根據實際需要,采用其他請求,如POST等,本發明對此不加以限制。 為了更有效避免基于域名過濾的網絡攻擊,在本發明的一種優選實施例中,在將需要解析的域名參數進行base64編碼前,所述客戶端發起域名解析請求的步驟,還可以包括子步驟A3、將需要解析的域名參數進行加密,以加密后的域名參數進行base64編碼。將域名參數通過加密方式發送給域名解析代理服務器,即使惡意代碼劫持HTTP通訊,也無法解密。因此,能夠避免基于域名過濾的網絡攻擊。步驟102、從所述域名解析請求中解析主機參數;參照圖2,示出了域名解析代理服務器與客戶端和DNS服務器之間的關系示意圖,其中,客戶端應用程序可直接通過IP連接該域名解析代理服務器,相對于現有技術客戶端與DNS服務器進行之間通信交互,本實施例采用域名解析代理服務器作為代理媒介,用于分別實現與客戶端和DNS服務器之間的通信一方面,其可以基于HTTP協議安全解析來自客戶端的域名解析請求,并基于DNS協議傳輸給DNS服務器;另一方面,其可以基于DNS協議安全解析來自DNS服務器的DNS應答,并基于HTTP協議返回給客戶端。在本發明的一種優選實施例中,域名解析代理服務器可以指定CGI程序處理來自客戶端的HTTP GET命令請求,相應地,域名解析代理服務器可以通過如下步驟從所述域名解析請求中解析域名參數子步驟BI、所述域名解析代理服務器的CGI程序接收所述HTTP GET命令請求;子步驟B2、所述CGI程序通過對所述HTTP GET命令請求進行base64解碼,解析出所述域名參數。CGI (通用網關接口,Common Gate Interface)程序,通常運行在服務器上,提供與客戶端應用程序(如瀏覽器)之間的接口。CGI程序通常被用來解釋處理來自表單的輸入信息,并在服務器產生相應的處理,或將相應的信息反饋給瀏覽器。CGI程序處理請求的原理通常為通過Internet把用戶請求送到服務器;服務器接收用戶請求并交給CGI程序處理;CGI程序把處理結果傳送給服務器;服務器把結果送回到用戶。依據上述原理,步驟102-步驟104均由CGI程序來完成。對應于客戶端加密主機域名的情形,在本發明的一種優選實施例中,在所述CGI程序對所述HTTP GET命令請求進行base64解碼前,所述從域名解析請求中解析域名參數的步驟,還可以包括對所述HTTP GET命令請求進行解密,以解密后的HTTP GET命令請求進行base64解碼。步驟103、依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;
步驟104、解析DNS服務器返回的DNS應答,并返回給客戶端。在本發明的一種優選實施例中,所述步驟104具體可以包括將DNS服務器返回的DNS應答作為GET應答的內容,進行加密和base64編碼后,返回給客戶端。總之,由于本發明域名解析的過程無需調用Windows應用層網絡API,而是通過DNS報文代理服務,所以不受LSP惡意代碼對DNS協議的篡改、攔截、過濾、重定向等影響,不受hosts文件篡改等攻擊影響。概括而言,本發明能夠實現基于HTTP DNS代理的安全DNS域名解析,從而能夠提高域名解析的成功率,防止惡意代碼針對Windows網絡應用層及DNS協議本身的攻擊。在實際中,本發明可以應用于眾多安全產品(例如,“360衛士”的系統急救箱、木馬云查殺引擎、主機防御系統等產品)中,從而可以防范應用層惡意代碼攻擊DNS的作用,并且能夠面向Windows客戶端應用程序提供安全的DNS解析服務。參照圖3,示出了本發明域名解析代理方法實施例2的流程圖,具體可以包括步驟301、接收客戶端發起的基于HTTP協議的域名解析請求,所述域名解析請求中可以包括域名參數、客戶端請求序列號參數和校驗碼參數;步驟302、從所述域名解析請求中解析域名參數;步驟303、根據所述校驗碼參數,確認客戶端是否為可信連接發起者,若是,則參照所述客戶端請求序列號參數及檢驗碼參數生成一個消息摘要;步驟304、以該消息摘要作為關鍵字,將相應客戶端作為連接節點插入待響應DNS應答map中;步驟305、依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;步驟306、將DNS服務器返回的DNS應答作為GET應答的內容,進行加密和base64編碼;步驟307、通過查詢消息摘要關鍵字,找到該客戶端的連接節點;步驟308、將加密和base64編碼后的DNS相應數據拷貝給該連接節點;步驟309、從待響應DNS應答map中刪除該連接節點。相對于實施例1,本實施例可由客戶端指定請求序列號參數和校驗碼參數,以確保多客戶端多服務器情況下的解析同步匹配算法。首先,域名解析代理服務器可以根據校驗碼參數對客戶端進行認證,只有在確認客戶端為可信連接發起者時,才會進行域名參數的解析;其次,域名解析代理服務器可以根據請求序列號參數,把DNS服務器返回的DNS應答打包給相應的客戶端,以保證正確送達到客戶端;本實施中主要通過在待響應DNS應答map設置連接節點的方式來實現。對于實施例2而言,由于其與實施例I基本相似,所以描述的比較簡單,相關之處參見實施例I的部分說明即可。
參照圖4,示出了本發明域名解析代理方法實施例3的流程圖,具體可以包括步驟401、接收客戶端發起的基于HTTP協議的HTTP GET命令請求,所述HTTP GET命令請求中可以包括域名參數;步驟402、域名解析代理服務器的CGI程序接收所述HTTP GET命令請求;步驟403、所述CGI程序通過對所述HTTP GET命令請求進行base64解碼,解析出所述域名參數;步驟404、所述CGI程序依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;
步驟405、解析DNS服務器返回的DNS應答,并返回給客戶端;步驟406、所述客戶端判斷所述域名解析代理服務器返回的DNS應答,若該DNS應答的HTTP狀態碼為200,則解析所述DNS應答;步驟407、若該DNS應答的HTTP狀態碼不為200,則返回錯誤,并結束本次查詢請求。相對于實施例1,本實施例可由客戶端根據域名解析代理服務器返回的HTTP狀態碼,判斷之前發送的HTTP GET命令請求是否被域名解析代理服務器成功接收,這些的判斷遵從HTTP協議。在本發明的一種優選實施例中,所述解析所述DNS應答的步驟,具體可以包括子步驟Cl、獲取HTTP響應信息數據載荷;子步驟C2、將數據載荷進行base64解碼,并解密,得到DNS解析數據。在本發明另一種優選實施例中,所述解析所述DNS應答的步驟,還可以包括子步驟D1、解析所述DNS解析數據的字段,得到相應的數據結構;子步驟D2、為所述數據結構申請動態內存,并將該動態內存插入緩存系統。本優選實施例在客戶端中設置緩存系統,并且將查詢歷史記錄插入該緩存系統,以便客戶端再次查詢相同的域名時,直接查詢該緩存系統以提高查詢效率。在具體實現中,為所述數據結構申請動態內存的步驟具體可以包括子步驟E1、遞歸釋放成員變量m_pHost (數據類型為Phostent_Cache_t);子步驟E2、動態分配數據結構類型為hostent_Cache_t并賦值給成員變量m_pHost ;子步驟E3、若分配成功,則清零,否則返回FALSE ;子步驟E4、動態申請數據結構類型為struct hostent并賦值給m—pHost- >host ;子步驟E5、若分配成功,則清零,否則返回FALSE ;子步驟E6、長度和地址類型相應賦值為sizeof (unsigned long)和AF—INET ;m—pHost- > host- > h_length = sizeof (unsigned long);m—pHost- > host- > h_addrtype = AF—INET ;子步驟E7、獲取OfficialName字段長度,分配長度加I的字符串數組,并將OfficialName 賦值給 m—pHost- > host- > h—name ;子步驟E8、申請類型為char*的指針數組,并賦值給m—pHost- > host- > h_addr_list
m_pHost- > host- > h_addr_list = new char*[Dff_DNS_MAX_IP];子步驟E9、若分配成功,則清零,否則返回FALSE ;子步驟E10、循環賦值解析后的IP地址給m_pHost- > host- > h_addr_list數組;子步驟ElI、將 TTL 賦值給 m_pHost- > m_ttl ;子步驟E12、調用SetInsertCacheTime (m_pHost),設置插入緩存時的時間戳。子步驟E13、返回TRUE。需要說明的是,上述TTL(生存時間,Time To Live)生存時間可由DNS服務器根據實際情況指定;這樣,只有在TTL未過期的情況下,該緩存系統中的動態內存才能被使用。
總之,本優選實施例可以通過在Windows客戶端構造DNS解析的數據結構,來得到提供相同語義的編程接口,這樣,就可以不受本地域名服務緩存毒害(DNS Cachepoisoning)的影響。在本發明的另一優選實施例中,所述方法還可以包括在該DNS應答的HTTP狀態碼為200時,記錄所述域名解析代理服務器的游標位置,以所述游標位置作為下次域名解析的定向依據。本優選實施例通過記錄當前成功解析域名解析代理服務器游標位置,下次解析時,定向到前一個成功域名解析代理服務器。另外,本發明還可以支持編程接口級設置自定義的域名解析代理服務器并且設置訪問優先順序。參照圖5,示出了本發明域名解析代理方法實施例4的流程圖,具體可以包括步驟501、接收客戶端發起的基于HTTP協議的域名解析請求,所述域名解析請求中可以包括域名參數、查詢信息或者超時信息;其中,所述查詢信息可以包括遞歸查詢或者非遞歸查詢,所述超時信息表示客戶端得到DNS應答的最大時間;步驟502、從所述域名解析請求中解析域名參數;步驟503、依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;步驟504、解析DNS服務器返回的DNS應答,并返回給客戶端。相對于實施例1,本實施例具有如下優點I、可由客戶端指定域名解析的超時,以便客戶端應用程序在指定的時間內得到成功或失敗的響應;2、支持遞歸方式DNS查詢以及非遞歸方式DNS查詢,Windows客戶端一般僅支持非遞歸方式查詢。由于使用HTTP協議作為客戶端與域名解析代理服務器之間的通訊協議,所以不受防火墻禁止DNSP協議或對DNS協議進行特定域名字段過濾的影響,另外,由于后臺DNS服務器可使用Bind 9或其他DNS服務器,并可以配置成遞歸解析模式,從事使得解析DNS的成功率更高,解決了現有技術中Windows客戶端系統不支持遞歸解析的問題。為使本領域技術人員更好地理解本發明,以下通過具體的示例來說明本發明在實際中的應用,具體可以包括步驟SI、客戶端將自己的IP地址、CPU ID、當前線程ID、需要解析的域名、遞歸查詢方式還是非遞歸查詢方式標記、客戶端請求序列號參數和校驗碼參數等,基于HTTP協議按照一定的組合封裝成一個數據結構,這里的數據結構通常為HTTP GET命令請求;在具體實現中,域名解析代理服務器可以提供給客戶端如下接口函數函數BOOL CHttpDns: : SetOption提供了應用程序根據自身需要對DNS解析各個環節的選項設置,如單次接收、發送UDP數據報的超時時間、是否逐個遍歷域名解析代理服務器,設置自定義域名解析代理服務器等;函數 BOOL CHttpDns::gethostbyname_by_http_proxy(const char*pUrl,UINT*pIpList,)實現HTTP DNS代理請求服務的封裝;函數 struct hostent*FAR CHttpDns: : gethostbyname (const char*name)提供對CHttpDns: :gethostbyname_by_http_proxy ()返回成功后將IP地址列表填入新申請分配的struct hostent的相應域里。并將結果保存在緩存中。
其中,上述接口函數可以在現有Windows編程界面gethostbyname的基礎上實現,也即,本發明可以實現與gethostbyname語義相同的編程界面,易于調用。步驟S2、加密該數據結構,,并發送給域名解析代理服務器;步驟S3、域名解析代理服務器解密;步驟S4、根據所述校驗碼參數,確認客戶端是否為可信連接發起者,若是,則參照所述客戶端請求序列號參數及檢驗碼參數生成一個消息摘要;步驟S5、以該消息摘要作為關鍵字,將相應客戶端作為連接節點插入待響應DNS應答map中;本發明提供了一種DNS解析應答緩存節點描述符的結構示意
typedef struct ST_hostent_Cache_t {
struct hostent *host; //host
time_t m_ttl; //TTL of parsed DNS reply
time_t m_InsertCacheTime ; //Current insert cache time
DWORD m_HitCount; //Hit Count
Time_t m_LastAccessTime ; //Last access time
}hostent_Cache_t,*Phostent_Cache_t;步驟S6、依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;步驟S7、將DNS服務器返回的DNS應答作為GET應答的內容,進行加密和base64編碼;步驟S8、通過查詢消息摘要關鍵字,找到該客戶端的連接節點;步驟S9、將加密和base64編碼后的DNS相應數據拷貝給該連接節點;步驟S10、從待響應DNS應答map中刪除該連接節點。總之,本發明通過HTTP DNS的報文代理服務,即基于HTTP協議作為發起DNS請求客戶端與域名解析代理服務器之間的DNS解析代理協議,實現了 DNS的安全解析,能夠有效防止任何惡意代碼在Windows非特權環境下的DNS攻擊。
對于客戶端而言,由于其采用HTTP協議發送域名解析請求,并且解析域名解析代理服務器返回的數據載荷,所以能防范所有在客戶端攻擊DNS協議的惡意程序。另外,本發明可支持IPV4 (Internet Protocol Version 4)和 IPV6 (InternetProtocol Version 6),支持 DNS SEC (DNS 安全擴展,Domain Name System SecurityExtensions),且支持各種加解密機制。參照圖6,示出了本發明一種域名解析代理服務器實施例的結構圖,其分別連接客戶端及DNS服務器,具體可以包括接收模塊601,用于接收客戶端發起的基于HTTP協議的域名解析請求,所述域名解析請求中包括域名參數;第一解析模塊602,用于從所述域名解析請求中解析域名參數;查詢模塊603,用于依據解析得到的域名參數,向DNS服務器發起DNS查詢請求; 第二解析模塊604,用于解析DNS服務器返回的DNS應答;及返回模塊605,用于將所述DNS應答返回給客戶端。在本發明的一種優選實施例中,可指定CGI程序執行所述接收模塊601和所述第一解析模塊602的操作;此時,所述CGI程序,可具體用于接收所述HTTP GET命令請求,并通過對所述HTTPGET命令請求進行base64解碼,解析出所述域名參數。對于客戶端發起HTTP GET命令請求的過程,請參照方法實施例的相關說明,在此不作贅述。在本發明的另一種優選實施例中,所述CGI程序還可用于,在對所述HTTP GET命令請求進行base64解碼前,對所述HTTP GET命令請求進行解密,以解密后的HTTP GET命令請求進行base64解碼。在本發明實施例中,優選的是,所述第二解析模塊604,可具體用于將DNS服務器返回的DNS應答作為GET應答的內容,進行加密和base64編碼。在本發明的一種優選實施例中,所述域名解析請求中還可以包括客戶端請求序列號參數和校驗碼參數;相應地,所述方法域名解析代理服務器還可以包括認證模塊,用于在所述第二解析模塊依據解析得到的域名參數,向DNS服務器發起DNS查詢請求前,根據所述校驗碼參數,確認客戶端是否為可信連接發起者,若是,則參照所述客戶端請求序列號參數及檢驗碼參數生成一個消息摘要;節點插入模塊,用于以該消息摘要作為關鍵字,將相應客戶端作為連接節點插入待響應DNS應答map中;此時,所述第二解析模塊604具體可以包括查詢單元,用于通過查詢消息摘要關鍵字,找到該客戶端的連接節點;拷貝單元,用于將加密和base64編碼后的DNS相應數據拷貝給該連接節點;及刪除單元,用于從待響應DNS應答map中刪除該連接節點。在本發明的再一種優選實施例中,所述域名解析請求中還可以包括查詢信息或者超時信息;其中,所述查詢信息包括遞歸查詢或者非遞歸查詢,所述超時信息表示客戶端得至Ij DNS應答的最大時間。
對于域名解析代理服務器實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。參照圖7,示出了本發明一種域名解析代理系統實施例的結構圖,具體可以包括客戶端701、DNS服務器703及連接在所述客戶端和DNS服務器之間的域名解析代理服務器702,其中,所述域名解析代理服務器702具體可以包括接收模塊721,用于接收客戶端發起的基于HTTP協議的域名解析請求,所述域名解析請求中包括域名參數;第一解析模塊722,用于從所述域名解析請求中解析域名參數;查詢模塊723,用于依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;第二解析模塊724,用于解析DNS服務器返回的DNS應答;及返回模塊725,用于將所述DNS應答返回給客戶端。 在本發明的一種優選實施例中,所述客戶端701具體可以包括判斷模塊,用于判斷所述域名解析代理服務器返回的DNS應答;應答解析模塊,用于在該DNS應答的HTTP狀態碼為200時,解析所述DNS應答;及返回模塊,用于在該DNS應答的HTTP狀態碼不為200時,返回錯誤,并結束本次查詢請求。在本發明的另一種優選實施例中,所述應答解析模塊,可以進一步包括獲取單元,用于獲取HTTP響應信息數據載荷;解碼解密單元,用于將數據載荷進行base64解碼,并解密,得到DNS解析數據。在本發明的再一種優選實施例中,所述應答解析模塊,還可以包括字段解析單元,用于解析所述DNS解析數據的字段,得到相應的數據結構;申請單元,用于為所述數據結構申請動態內存;及插入單元,用于將該動態內存插入緩存系統。在本發明實施例中,優選的是,所述系統還可以包括記錄模塊,用于在該DNS應答的HTTP狀態碼為200時,記錄所述域名解析代理服務器的游標位置,以所述游標位置作為下次域名解析的定向依據。對于域名解析代理服務器702的具體結構,由于其與域名解析代理服務器實施例中的結構模塊類似,故在此不作贅述。對于系統實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。以上對本發明所提供的一種域名解析代理方法和系統、一種域名解析代理服務器,進行了詳細介紹,本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發明的方法及其核心思想;同時,對于本領域的一般技術人員,依據本發明的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發明的限制。
權利要求
1.一種域名解析代理方法,其特征在于,包括 客戶端發起基于HTTP協議的域名解析請求,所述域名解析請求中包括域名參數; 接收所述域名解析請求; 從所述域名解析請求中解析域名參數; 依據解析得到的域名參數,向DNS服務器發起DNS查詢請求; 解析DNS服務器返回的DNS應答,并返回給客戶端。
2.根據權利要求I所述的方法,其特征在于,所述客戶端通過如下步驟發起域名解析請求 將需要解析的域名參數進行base64編碼,并封裝到HTTP GET命令請求的包頭中; 向域名解析代理服務器發送所述HTTP GET命令請求; 所述從所述域名解析請求中解析域名參數的步驟,包括 所述域名解析代理服務器的CGI程序接收所述HTTP GET命令請求; 所述CGI程序通過對所述HTTP GET命令請求進行base64解碼,解析出所述域名參數。
3.根據權利要求2所述的方法,其特征在于,在將需要解析的域名參數進行base64編碼前,所述客戶端發起域名解析請求的步驟,還包括 將需要解析的域名參數進行加密,以加密后的域名參數進行base64編碼; 在所述CGI程序對所述HTTP GET命令請求進行base64解碼前,所述從域名解析請求中解析域名參數的步驟,還包括 對所述HTTP GET命令請求進行解密,以解密后的HTTP GET命令請求進行base64解碼。
4.根據權利要求I所述的方法,其特征在于,所述解析DNS服務器返回的DNS應答,并返回給客戶端的步驟,包括 將DNS服務器返回的DNS應答作為GET應答的內容,進行加密和base64編碼后,返回給客戶端。
5.根據權利要求4所述的方法,其特征在于,所述域名解析請求中還包括客戶端請求序列號參數和校驗碼參數; 在依據解析得到的域名參數,向DNS服務器發起DNS查詢請求前,所述方法還包括根據所述校驗碼參數,確認客戶端是否為可信連接發起者,若是,則參照所述客戶端請求序列號參數及檢驗碼參數生成一個消息摘要; 以該消息摘要作為關鍵字,將相應客戶端作為連接節點插入待響應DNS應答map中; 所述解析DNS服務器返回的DNS應答,并返回給客戶端的步驟,還包括 通過查詢消息摘要關鍵字,找到該客戶端的連接節點; 將加密和base64編碼后的DNS相應數據拷貝給該連接節點; 從待響應DNS應答map中刪除該連接節點。
6.根據權利要求2所述的方法,其特征在于,還包括 所述客戶端判斷所述域名解析代理服務器返回的DNS應答,若該DNS應答的HTTP狀態碼為200,則解析所述DNS應答; 若該DNS應答的HTTP狀態碼不為200,則返回錯誤,并結束本次查詢請求。
7.根據權利要求6所述的方法,其特征在于,所述解析所述DNS應答的步驟,包括 獲取HTTP響應信息數據載荷;將數據載荷進行base64解碼,并解密,得到DNS解析數據。
8.根據權利要求7所述的方法,其特征在于,所述解析所述DNS應答的步驟,還包括 解析所述DNS解析數據的字段,得到相應的數據結構; 為所述數據結構申請動態內存,并將該動態內存插入緩存系統。
9.根據權利要求6所述的方法,其特征在于,還包括 在該DNS應答的HTTP狀態碼為200時,記錄所述域名解析代理服務器的游標位置,以所述游標位置作為下次域名解析的定向依據。
10.根據權利要求I所述的方法,其特征在于,所述域名解析請求中還包括查詢信息或者超時信息; 其中,所述查詢信息包括遞歸查詢或者非遞歸查詢,所述超時信息表示客戶端得到DNS應答的最大時間。
11.一種域名解析代理服務器,其特征在于,其分別連接客戶端及DNS服務器,包括 接收模塊,用于接收客戶端發起的基于HTTP協議的域名解析請求,所述域名解析請求中包括域名參數; 第一解析模塊,用于從所述域名解析請求中解析域名參數; 查詢模塊,用于依據解析得到的域名參數,向DNS服務器發起DNS查詢請求; 第二解析模塊,用于解析DNS服務器返回的DNS應答;及 返回模塊,用于將所述DNS應答返回給客戶端。
12.根據權利要求11所述的域名解析代理服務器,其特征在于,所述接收模塊和所述第一解析模塊為CGI程序; 所述CGI程序,具體用于接收所述HTTP GET命令請求,并通過對所述HTTP GET命令請求進行base64解碼,解析出所述域名參數。
13.根據權利要求12所述的域名解析代理服務器,其特征在于,所述CGI程序還用于,在對所述HTTP GET命令請求進行base64解碼前,對所述HTTP GET命令請求進行解密,以解密后的HTTP GET命令請求進行base64解碼。
14.根據權利要求11所述的域名解析代理服務器,其特征在于,所述第二解析模塊,具體用于將DNS服務器返回的DNS應答作為GET應答的內容,進行加密和base64編碼。
15.根據權利要求14所述的域名解析代理服務器,其特征在于,所述域名解析請求中還包括客戶端請求序列號參數和校驗碼參數; 所述方法域名解析代理服務器還包括 認證模塊,用于在所述第二解析模塊依據解析得到的域名參數,向DNS服務器發起DNS查詢請求前,根據所述校驗碼參數,確認客戶端是否為可信連接發起者,若是,則參照所述客戶端請求序列號參數及檢驗碼參數生成一個消息摘要; 節點插入模塊,用于以該消息摘要作為關鍵字,將相應客戶端作為連接節點插入待響應DNS應答map中; 所述第二解析模塊包括 查詢單元,用于通過查詢消息摘要關鍵字,找到該客戶端的連接節點; 拷貝單元,用于將加密和base64編碼后的DNS相應數據拷貝給該連接節點 '及 刪除單元,用于從待響應DNS應答map中刪除該連接節點。
16.根據權利要求11所述的域名解析代理服務器,其特征在于,所述域名解析請求中還包括查詢信息或者超時信息; 其中,所述查詢信息包括遞歸查詢或者非遞歸查詢,所述超時信息表示客戶端得到DNS應答的最大時間。
17.—種域名解析代理系統,其特征在于,包括客戶端、DNS服務器及連接在所述客戶端和DNS服務器之間的域名解析代理服務器,其中,所述域名解析代理服務器包括 接收模塊,用于接收客戶端發起的基于HTTP協議的域名解析請求,所述域名解析請求中包括域名參數; 第一解析模塊,用于從所述域名解析請求中解析域名參數; 查詢模塊,用于依據解析得到的域名參數,向DNS服務器發起DNS查詢請求; 第二解析模塊,用于解析DNS服務器返回的DNS應答;及 返回模塊,用于將所述DNS應答返回給客戶端。
18.根據權利要求17所述的域名解析代理系統,其特征在于,所述客戶端包括 判斷模塊,用于判斷所述域名解析代理服務器返回的DNS應答; 應答解析模塊,用于在該DNS應答的HTTP狀態碼為200時,解析所述DNS應答;及 返回模塊,用于在該DNS應答的HTTP狀態碼不為200時,返回錯誤,并結束本次查詢請求。
19.根據權利要求18所述的域名解析代理系統,其特征在于,所述應答解析模塊,包括 獲取單元,用于獲取HTTP響應信息數據載荷; 解碼解密單元,用于將數據載荷進行base64解碼,并解密,得到DNS解析數據。
20.根據權利要求19所述的域名解析代理系統,其特征在于,所述應答解析模塊,還包括 字段解析單元,用于解析所述DNS解析數據的字段,得到相應的數據結構; 申請單元,用于為所述數據結構申請動態內存 '及 插入單元,用于將該動態內存插入緩存系統。
21.根據權利要求18所述的域名解析代理系統,其特征在于,還包括 記錄模塊,用于在該DNS應答的HTTP狀態碼為200時,記錄所述域名解析代理服務器的游標位置,以所述游標位置作為下次域名解析的定向依據。
全文摘要
本發明提供了一種域名解析代理方法和系統、一種域名解析代理服務器,其中的域名解析代理方法具體包括客戶端發起基于HTTP協議的域名解析請求,所述域名解析請求中包括域名參數;接收所述域名解析請求;從所述域名解析請求中解析域名參數;依據解析得到的域名參數,向DNS服務器發起DNS查詢請求;解析DNS服務器返回的DNS應答,并返回給客戶端。本發明能夠基于HTTP協議的DNS代理解析技術進行域名解析,從而提高域名解析的安全性。
文檔編號H04L29/12GK102790807SQ20111012640
公開日2012年11月21日 申請日期2011年5月16日 優先權日2011年5月16日
發明者李釗, 董斌雁 申請人:奇智軟件(北京)有限公司