【问题标题】:How to implement a custom local DNS service in Java?如何在 Java 中实现自定义本地 DNS 服务?
【发布时间】:2012-04-12 17:27:45
【问题描述】:

我有一个 Java 桌面应用程序(部署在 Windows 上),它需要了解一堆不同的主机名/IP。我更喜欢在软件中使用主机名,因为它比输入 IP 地址更具描述性/不那么脆弱。但是,这意味着 Windows 机器需要了解此映射。

桌面应用程序和与之通信的服务器软件都部署在专用网络中。网络上没有我可以利用的现有 DNS 服务。

桌面与之通信的服务器软件已经有一个包含所有这些信息的主机文件。过去,我在桌面安装程序中包含了这个主机文件,基本上破坏了 Windows 机器的主机文件。这很丑陋,我不想再这样做了。我希望我基本上可以在我的桌面应用程序中部署我的主机文件,并在使用主机文件信息填充的应用程序内运行某种名称服务。这样我就不会影响其他应用程序,也不会弄乱桌面的主机文件。

我发现 this article 描述了实现您自己的 NameService 类。这是我一直在寻找的解决方案,但是,它使用内部 Sun 类(我可以在这里逃脱,但我宁愿不必这样做)。此外,这篇文章很旧(2006 年)。在Java 7 API 中,不再列出文章提到的网络属性。有没有更好/更现代的方法来做到这一点?

【问题讨论】:

  • 听起来你在做一些非常笨拙/笨拙的事情。如果我是你,我会选择最快的解决方案,而不用担心它是否脏:)

标签: java networking dns


【解决方案1】:

尝试像JDNSS 这样的项目。

但是,如果您在网络上搜索,您会发现很多关于此主题的链接。

【讨论】:

  • 然而,我并不真正想要一个成熟的 DNS 服务器。我只想让我的应用程序知道一组固定的主机名/IP 映射。我不想弄乱其他应用程序,或运行额外的进程。
  • 那么,如果您的需求如此简单,为什么不更新您的 /etc/hosts 文件呢?
  • 问题出在我运行 Windows 的客户端计算机上。我无法完全控制这些机器,因此更新它们的主机文件充其量是不礼貌的行为,如果另一个应用程序更改主机文件并删除我的条目,则可能是灾难性的。
【解决方案2】:

我不了解替换 NameServer 类等的复杂性。如果您只需要一对主机名-IP 映射,请拥有一个包含主机名和 IP 的数组,并在该数组中查找您的名称。或者有一个类似主机格式的文件,将文件放在您的应用程序文件夹中,然后从该文件中填充上述数组。

好的解决方案是拥有一个本地 DNS 服务器,例如 DNSMASQ 或 BIND。

【讨论】:

  • 是的,这基本上就是我最终要做的。
猜你喜欢
  • 2011-09-22
  • 1970-01-01
  • 2010-10-05
  • 2017-06-29
  • 2014-06-27
  • 1970-01-01
  • 2019-12-14
  • 2017-03-26
  • 1970-01-01
相关资源
最近更新 更多