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
測試結果如下圖所示:
文章列表