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

如何实现提示用户输入IP/FQDN/主机名并完成校验与DNS解析

实现方案

你原来的代码存在两处明显错误:一是input()的参数仅支持传入提示字符串,把ipaddress.ip_address嵌套进输入参数的写法完全错误;二是没有做输入类型判断和分支处理逻辑,完整实现方式如下:


实现步骤
  • 导入依赖库:用ipaddress库做IP有效性校验,用socket库做域名解析、主机名转FQDN处理
  • 获取用户输入后先做空值、前后空格的基础校验
  • 优先尝试校验输入是否为合法IP,校验通过直接使用
  • 非IP的输入先通过socket.getfqdn()获取完整FQDN,短主机名会自动基于本地DNS配置补全后缀
  • 解析得到的FQDN再通过socket.gethostbyname()获取对应IP地址
  • 对无效输入、解析失败的场景做异常捕获和提示

完整可运行代码
import ipaddress
import socket

def process_host_input():
    # 获取用户输入
    user_input = input("Enter IP, FQDN, or Host: ").strip()
    if not user_input:
        raise ValueError("输入不能为空")
    
    # 优先判断是否为合法IP
    try:
        valid_ip = ipaddress.ip_address(user_input)
        print(f"输入为合法IP地址:{valid_ip}")
        return {"type": "ip", "raw_input": user_input, "ip": str(valid_ip)}
    except ValueError:
        # 不是IP,进入主机名/FQDN处理逻辑
        pass
    
    # 处理主机名/FQDN
    try:
        # 自动补全短主机名为完整FQDN,本身是FQDN则直接返回
        fqdn = socket.getfqdn(user_input)
        # 解析FQDN对应的IP
        resolved_ip = socket.gethostbyname(fqdn)
        if fqdn == user_input:
            print(f"输入为合法FQDN:{fqdn},解析IP为:{resolved_ip}")
            return {"type": "fqdn", "raw_input": user_input, "fqdn": fqdn, "ip": resolved_ip}
        else:
            print(f"输入为主机名:{user_input},补全FQDN为:{fqdn},解析IP为:{resolved_ip}")
            return {"type": "hostname", "raw_input": user_input, "fqdn": fqdn, "ip": resolved_ip}
    except socket.gaierror:
        raise ValueError(f"解析失败:{user_input},请检查输入或本地DNS配置")

# 调用示例
if __name__ == "__main__":
    try:
        result = process_host_input()
        # 后续业务直接读取result内的对应字段即可
        print("最终处理结果:", result)
    except Exception as e:
        print("处理错误:", e)

关键逻辑说明
  • ipaddress.ip_address原生支持IPv4、IPv6的合法性校验,无需自己写正则匹配
  • socket.getfqdn()会自动读取本地resolv.conf(Linux)或网络配置(Windows)里的DNS搜索后缀,补全短主机名,返回值和输入值一致就说明输入本身就是FQDN
  • 所有异常场景都抛出明确的错误提示,方便排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:07