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
相关产品推荐
相关产品推荐

