You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Python脚本区分可解析与无DNS解析的服务器

解决方案

你的代码存在几个影响功能的问题:

  • 未导入socket模块,调用socket.gethostbyname会直接报错
  • break语句会让循环仅执行一次,无法遍历所有服务器
  • 直接打开文件后未手动关闭,存在资源泄漏风险,建议用with语句自动管理
  • 捕获所有Exception不够精准,DNS解析失败对应的是socket.gaierror专属异常
  • 从文件读取的服务器名会带有换行符,需要先清理才能正常解析

下面是修正后的代码,能将两类服务器分别归类存储:

import socket

# 初始化两个列表用于分类存储服务器
resolvable_servers = []
unresolvable_servers = []

# 使用with语句安全读取文件,无需手动关闭
with open("test2.txt", 'r') as servers_file:
    for server in servers_file:
        # 去除服务器名首尾的空白字符(换行符、空格等)
        server_name = server.strip()
        # 跳过文件中的空行
        if not server_name:
            continue
        
        try:
            # 尝试解析服务器的DNS
            ip_address = socket.gethostbyname(server_name)
            # 解析成功,将服务器名和对应IP存入列表
            resolvable_servers.append((server_name, ip_address))
        except socket.gaierror:
            # DNS解析失败,存入不可解析列表
            unresolvable_servers.append(server_name)

# 输出分类结果
print("可正常解析的服务器:")
for name, ip in resolvable_servers:
    print(f"{name} → {ip}")

print("\n无法解析的服务器(已从DNS移除):")
for name in unresolvable_servers:
    print(name)

关键说明:

  • with语句会在代码块结束后自动关闭文件,避免资源泄漏
  • strip()清理服务器名的空白字符,防止因换行符导致解析失败
  • 精准捕获socket.gaierror,只处理DNS解析失败的情况,避免误捕获其他异常
  • 用两个列表分别存储两类服务器,方便后续进行写入文件、统计分析等操作
  • 跳过空行,避免处理文件中的无效空条目

内容的提问来源于stack exchange,提问作者user2091722

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:45:33