文章出處

1、前言

   最近因為工作需要判斷一個域名是否備案,實際提取的域名就是HTTP報文中的Host的內容,而判斷一個域名是否是根據根域名進行的。例如訪問www.qq.com,提取Host的內容為www.qq.com,而判斷這個域名是否備案,是通過qq.com進行,因此需要從Host內容中提取出根域名。  

遇到的問題

1、頂級域名的種類存在以下不同情況,例如 www.google.com    www.google.com.cn 頂級域名分別是.com 和.com.cn提取頂級名分別為google.com goolge.com.cn

2、Host的長度不一,例如 api.best.com   upload.api.best.com 提取的根域名都為best.com

解決思路:  

   由于程序是用C語言實現,所以就寫一個C語言的lib庫了。首先頂級域名是公開的,可以參考維基百科https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E9%A1%B6%E7%BA%A7%E5%9F%9F%E5%88%97%E8%A1%A8 使用hash表將頂級域名存儲起來,方便后面查找頂級域名在O(1)時間內找出來。

解析Host, 例如 api.upload.qq.com 大概的思路如下:

1、先計算出域名中每個點(.)在字符串中的位置

2、然后根據Host中點個個數提取出頂級域名,判斷頂級域名是否在hash表

3、找到頂級域名后,再提取頂級域名的根域名,組合起來就組成了最終的結果

實現代碼放在了github上:https://github.com/FatAnker/domain_parser

測試結果如下圖所示:

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()