前言
因工作需要频繁变更hosts, 故须自己实现一个动态管理器, 市面上其实已经有了类似的软件,比如switchhosts!
但因为不好集成其他功能(如远程连接KVM),所以还是决定自己开发一套。
原理
使用之前强烈建议先阅读本文了解原理:
Java实现实时生效hosts文件修改
准备
使用java
实现的话, alibaba
实际上已经开源了一个叫java-dns-cache-manipulator的项目, 使用起来非常简单, 但是未使用java17
进行测试过。
由于与网络相关, 我们同时引入okhttp
和java-dns-cache-manipulator
的最新版本:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dns-cache-manipulator</artifactId>
<version>RELEASE</version>
</dependency>
需求
我有一个NAS
,可以通过http://192.168.31.6:5000
进行访问, 我希望动态修改域名nas.y4d.com
映射到192.168.31.6
。
使用
dns-cache.properties
nas.y4d.com=192.168.31.66
DnsCache.kt
fun main() {
DnsCacheManipulator.loadDnsCacheConfig()
val okHttpClient = OkHttpClient()
val request =
Request.Builder().get().header("Accept-Language", "zh-CN,zh;q=0.9").url("http://nas.y4d.com:5000").build()
val response = okHttpClient.newCall(request).execute()
println(response.body.string())
}
此时如果直接使用java17
运行会报错:
VM options
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens
可以添加多个, 都是一对一, 比如--add-opens java.base/java.lang=ALL-UNNAMED java.base/java.net=ALL-UNNAMED
参考
- 解决JDK9以上的非法反射访问警告