技巧杂烩 · 

自定义 DNS 解析以请求特定 IP 地址的域名

如何在 Java 中实现自定义 DNS 解析,以便请求绑定到特定 IP 地址的域名。本内容详细介绍了通过 Java 编程方法绕过常规 DNS 查找过程的步骤,使开发者能够精确控制网络请求的目标地址。


域名使用了 CDN,请求出现异常,没法检查源站服务器的情况下,这里通过指定 DNS 解析 IP 地址来判断源站状态。

修改 hosts 文件,会存在 DNS 缓存且修改调试不方便,下面在 Java 中实现该功能。

这里使用 www.baidu.com 进行说明,指定访问的服务器 ip 为 1.0.0.1 ,实际上百度不是这个结果

添加 okhttp3 依赖

<dependency>
	<groupId>com.squareup.okhttp3</groupId>
	<artifactId>okhttp</artifactId>
	<version>${okhttp3.version}</version>
</dependency>

自定义 DNS 解析

Dns customDns = new Dns() {
	@Override
	public List<InetAddress> lookup(String s) throws UnknownHostException {
		if ("www.baidu.com".equals(s)) {
			return Collections.singletonList(InetAddress.getByName("1.0.0.1"));
		}
		return Dns.SYSTEM.lookup(s);
	}
};

创建 OkHttpClient

OkHttpClient client = new OkHttpClient.Builder()
	.dns(customDns)
	.build();

创建 Request

Request request = new Request.Builder()
	.url("https://www.baidu.com")
	.build();

发送请求,输出响应内容

Response response = client.newCall(request).execute();
System.out.println(response.body().string());