如何为Android或Flutter应用设置自定义DNS



我想在我的android或flutter应用程序中添加自定义IPV4 dns,如1.1.1.1这意味着我的应用程序(如firebase/glide/retrofit)的所有流量都必须从我的自定义dns

路由。我应该如何实现这个?

我已经在NDK中尝试了一些方法来为整个android设备设置DNS但是我不想碰android的DNS,只是我的应用程序应该使用那个DNS

你想达到什么目的?

这看起来像一个XY问题。你可能试图实现一些我们不知道的自定义DNS(比如用不同的服务器替换对某个主机的请求),但我们不确定,因为你认为改变DNS服务器到你的应用程序将是一个更好的解决方案,无论你有什么问题,但事实是,这是非常困难的。

虽然技术上可行,但极具挑战性。

不可能仅为一个应用程序更改DNS,因为DNS配置对设备是全局的,因此任何网络请求都会默认使用设备的DNS服务器。

实现这一点的唯一可能的方法是重新发明轮子:使用DnsResolver手动查询每个目标主机的DNS服务器,然后向特定的IP地址发出请求。

但是使用HTTP,你会发现,如果你向IP地址发出请求,该IP地址将是原始标头而不是域名,唯一的解决方案是使用裸套接字并手动实现所有HTTP有效负载和标头以提供不同的源。

它不能与Firebase和其他闭源sdk一起工作,因为你不能修改它们。它只适用于由您自己的代码发送的请求,或者允许您更改服务器地址的sdk。

最新更新