Python3.7实现nslookup批量查询域名列表代码报错求解决方案
问题排查与解决方案
原代码核心问题
- 域名处理错误:将换行符替换为空格后,域名末尾携带多余空格,导致DNS解析请求失败,应直接删除首尾空白字符而非替换为空格。
- 路径拼接不规范:硬编码Windows路径分隔符
\\,在Linux/macOS系统下无法运行,应使用os.path.join做跨平台路径拼接。 - 文件资源未安全管理:输出文件
Domain_check.txt未使用上下文管理器,程序异常时可能出现文件内容未写入、资源未释放的问题。 - 输出格式不符合要求:没有添加域名与IP的分隔符、换行符,所有结果会拼接成无意义的连续字符串。
- 缺少异常处理逻辑:遇到无法解析的域名时程序会直接崩溃,无法完成所有域名的遍历查询。
- 变量名语义不明:用
date类变量名表示域名,不利于代码排查调试。 - Python3.7适配问题:最新版
dnspython库不再支持Python3.7,需要安装兼容的指定版本。
修复后可运行代码
import dns.resolver import os # 输出文件也用上下文管理器管理 with open("Domain_check.txt", "w", encoding="utf-8") as new_txt: # 跨平台拼接域名文件路径 domain_path = os.path.join(os.getcwd(), "Domains.txt") with open(domain_path, "r", encoding="utf-8") as f: for domain in f: # 去除首尾的换行、空白字符,得到干净的域名 domain_clean = domain.strip() # 跳过空行 if not domain_clean: continue try: # 执行A记录查询 answers = dns.resolver.resolve(domain_clean, 'A') for ip in answers: # 按指定格式写入,域名和IP用空格分隔,每行一条结果 new_txt.write(f"{domain_clean} {ip}\n") except Exception as e: # 解析失败时写入错误信息,避免程序中断 new_txt.write(f"{domain_clean} 解析失败:{str(e)}\n")
使用前准备
- 先安装适配Python3.7的
dnspython版本,执行命令:pip install dnspython==2.2.1 - 把待查询的域名按每行一个的格式,存入和脚本同目录的
Domains.txt文件中 - 运行脚本后,结果会自动写入同目录的
Domain_check.txt文件,每条域名对应一条或多条解析结果
内容的提问来源于stack exchange,提问作者Hsin
相关产品推荐
相关产品推荐

