从全域名中提取根域名
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
测试结果如下图所示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~