1. 项目背景与需求分析
在日常服务器运维工作中,我们经常需要处理大量域名到IP地址的转换任务。比如在配置Nginx反向代理、设置防火墙规则、分析网络访问日志等场景下,快速获取域名的IP地址是基础且高频的操作需求。
传统的手工查询方式存在几个明显痛点:
- 需要逐个在命令行执行
ping或nslookup命令,效率低下 - 无法批量导出结构化结果,不利于后续处理
- 缺乏对IPv6地址的专门支持
- 遇到格式不规范的域名(如带http前缀)需要手动处理
这个Python脚本正是为解决这些痛点而设计。它采用socket标准库实现双栈解析,具有以下核心优势:
- 原生支持IPv4/IPv6双协议栈解析
- 自动处理各种域名格式输入
- 内置防封禁机制和错误处理
- 输出标准化CSV格式,方便导入Excel或数据库
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术实现详解
2.1 核心解析逻辑
脚本的核心解析函数get_ipv4_ipv6()采用了socket.getaddrinfo()这个Python标准库方法。相比老旧的gethostbyname_ex(),它具有以下技术优势:
python复制addr_info = socket.getaddrinfo(clean_dom, None, family=0, type=1)
参数说明:
family=0:同时查询AF_INET(IPv4)和AF_INET6(IPv6)地址type=1:限定只获取TCP协议的地址(避免返回无关的UDP地址)
返回值是一个五元组列表,其中第四个元素包含实际的IP地址。通过判断IP中是否包含冒号(:)来区分IPv4和IPv6地址。
2.2 域名清洗机制
实际工作中收集的域名往往格式混乱,常见问题包括:
- 带有
http://或https://前缀 - 包含路径参数(如
example.com/path) - 首尾有多余空格或斜杠
- 空行或无效数据
清洗函数通过以下步骤确保格式统一:
strip()去除首尾空白字符urlparse()解析URL结构提取netloc部分- 多重判空保护防止异常
python复制def clean_domain(domain):
domain
