小编zer*_*Dev的帖子

JVM和OS DNS缓存

我正面临着JVM和DNS的问题.

我正在阅读的所有内容(包括文档此内容)都说我可以使用networkaddress.cache.ttl可以设置的JVM DNS缓存java.security.Security.setProperties,但是可以通过使用系统属性的标准方法来设置.我已成功将其更改为0,因此我的JVM中不再有缓存.

但是现在,在每次调用时InetAddress.getByName("mytest.com"),似乎我的JVM正在使用系统 DNS缓存(在我的情况下是Windows 8).实际上,在方法的两次调用之间,我已经更改了"mytest.com"的BIND9属性,但IP返回仍然是相同的.这是工作流程:

  1. setCachePolicyInJVM(0) 在我的Java代码中.
  2. 设置mytest.com为192.168.1.在BIND9中188,重启.
  3. InetAddress.getByName("mytest.com").getHostAddress(); - > 192.168.1.188
  4. 设置mytest.com- > 192.168.1.在BIND9 160,重启.
  5. InetAddress.getByName("mytest.com").getHostAddress(); - > 192.168.1.188(如果没有缓存,则应为160).
  6. 刷新Windows DNS
  7. InetAddress.getByName("mytest.com").getHostAddress(); - > 192.168.1.160

我已多次读过JVM不使用系统缓存,但这是错误的:它显然是这样.

我们如何绕过操作系统 DNS缓存强制每次调用新的DNS解析?

java dns caching jvm

12
推荐指数
1
解决办法
8555
查看次数

在JVM中清理DNS服务器

在我处理DNS的第一篇文章之后,仍未解决:JVM和OS DNS缓存 ,我正面临一个新问题.

首先是我的用例:我想检查我的私有DNS是否还活着.如果不是,我想使用一般DNS(例如8.8.8.8).

我的私有DNS(ubuntu上的bind9与192.168.1.188)作为特定记录:test.testdnd.fr - > 192.168.1.100

所以我想我能做到这一点:

if(InetAddress.getByAddress(my_dns_ip_in_byte).isReachable()){
    System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
    System.setProperty("sun.net.spi.nameservice.nameservers", 192.168.1.188);
}else{
    System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
    System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8");
}
 InetAddress.getHostByAddress(test.testdnd.fr) -> unknow host exception
Run Code Online (Sandbox Code Playgroud)

但如果我只做:

System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
System.setProperty("sun.net.spi.nameservice.nameservers", 192.168.1.188);
InetAddress.getHostByAddress(test.testdnd.fr) -> 192.168.1.100
Run Code Online (Sandbox Code Playgroud)

因此,一旦我在设置system.property之前调用了InetAddress方法,似乎system.property没有任何效果.也许是因为JVM在调用InetAddress方法时加载系统DNS值,即使它不使用DNS解析.

这是JVM中的标准行为还是我失去了什么?

欢迎任何帮助,

java dns jvm

3
推荐指数
1
解决办法
3925
查看次数

使用Innosetup在我安装的软件上激活UAC

我正在使用inno setup安装我的软件(myprog.exe),我想强制用户启动myprog.exe作为管理员,但我无法弄清楚!我的exe在图标上没有uac盾牌,它可以在没有"右键单击"的情况下启动 - "以管理员身份运行"

我为安装程序设置了PrivilegesRequired = admin,但我只是为了安装阶段.

事实上,我想告诉Windows"嘿,我的程序是危险的,allays要求以管理员身份运行它"

有任何想法吗?

windows uac inno-setup

1
推荐指数
1
解决办法
1972
查看次数

标签 统计

dns ×2

java ×2

jvm ×2

caching ×1

inno-setup ×1

uac ×1

windows ×1