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

Spring Boot应用中从指定URL获取IP地址的方法

在Spring Boot应用中通过域名获取IP地址(非从请求中获取)

需求示例

https://google.com ==> 142.251.40.142

实现方案

直接使用Java原生的java.net.InetAddress类即可完成域名解析,无需额外依赖,Spring Boot应用中可直接复用该逻辑。

1. 基础单IP解析工具类

该工具类会自动去除域名中的http://或https://前缀,然后解析对应IP:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class DomainIpResolver {

    public static String getSingleIpFromDomain(String domain) {
        // 清理域名中的协议前缀
        String cleanDomain = domain.replaceAll("^(https?://)", "");
        try {
            InetAddress address = InetAddress.getByName(cleanDomain);
            return address.getHostAddress();
        } catch (UnknownHostException e) {
            // 处理域名不存在或解析失败的场景
            e.printStackTrace();
            return "无法解析目标域名的IP";
        }
    }

    // 测试方法
    public static void main(String[] args) {
        String domain = "https://google.com";
        System.out.println(domain + " ==> " + getSingleIpFromDomain(domain));
    }
}

2. 获取域名对应的所有IP

部分域名会绑定多个IP(如负载均衡场景),可使用getAllByName()方法获取全部IP:

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

public class DomainIpResolver {

    public static List<String> getAllIpsFromDomain(String domain) {
        String cleanDomain = domain.replaceAll("^(https?://)", "");
        List<String> ipList = new ArrayList<>();
        try {
            InetAddress[] addresses = InetAddress.getAllByName(cleanDomain);
            for (InetAddress addr : addresses) {
                ipList.add(addr.getHostAddress());
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return ipList;
    }
}

3. 在Spring Boot组件中使用

将工具类封装到Service中,方便在业务逻辑中调用:

import org.springframework.stereotype.Service;

@Service
public class DomainResolveService {

    public String getDomainIp(String domain) {
        return DomainIpResolver.getSingleIpFromDomain(domain);
    }

    public List<String> getDomainAllIps(String domain) {
        return DomainIpResolver.getAllIpsFromDomain(domain);
    }
}

注意事项

  • InetAddress会优先读取本地DNS缓存,若需要强制刷新DNS解析结果,可调整JVM参数sun.net.inetaddr.ttl控制缓存时长(单位:秒)。
  • 若域名存在CNAME跳转,getByName()会自动解析到最终的A记录IP,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:21:17