【问题标题】:C++ Program to update Bind9 DNSC++程序更新Bind9 DNS
【发布时间】:2019-05-02 13:26:03
【问题描述】:

刚刚更新了我的帖子以澄清我使用 Bind9/命名 DNS。我找到了库,但大多数都实现了自己的 DNS,所以我不能使用它们。 我想做一个 c++ 程序(在 linux/debian 上运行)来使用带有新记录的 bind9 更新本地 DNS,然后传播信息,以便其他节点可以更新他们的本地 DNS。 实际上我有一个解决方案,但我想知道是否有更合适的方法(例如使用一些库),然后创建新类型的记录而不仅仅是 NAPTR。

我有包含各种信息(服务/域)的消息,并且我已经在使用这些信息来创建 NAPTR 记录,但是该方法非常难看。我将我需要的所有 nsupdate 命令写入一个 txt 文件,例如:

std::ofstream nsupdateCommand("/tmp/nsupdate.txt", std::ofstream::out | std::ofstream::trunc);
nsupdateCommand << "update add" << enumName << "." << zone << ". "<< ttl << " NAPTR ";
[...]
nsupdateCommand << "send";
nsupdateCommand.close();
system("nsupdate -l -v /tmp/nsupdate.txt")

我想知道是否有更好的方法在 c++ 中更新 DNS,可能使用套接字或库?

任何帮助将不胜感激。

【问题讨论】:

  • 查看您选择的语言的 DNS 库:一个好的库应该为您提供与 nsupdate 相同的功能,它只是创建一个适当的 DNS 数据包以发送到权威名称服务器,因此库也可以这样做。
  • 我找到了一些,但我不知道该使用哪一个,因为我根本不熟悉库。而且大多数使用的是 C 而不是 C++。

标签: c++ dns debian bind named


【解决方案1】:
ldd `which nsupdate` |grep dns
        libdns.so.81 => /usr/lib64/libdns.so.81 (0x000000348b000000)
rpm -qf /usr/lib64/libdns.so.81
bind-libs-9.8.2-0.62.rc1.el6_9.5.x86_64

在 CentOS 上,您需要安装 bind-devel 以获取 bind-libs 的头文件。其他发行版可能会以稍微不同的名称打包它们。

【讨论】:

  • 感谢您的回答,但我找不到它与我的问题之间的联系
  • 许多命令行程序只是为实现逻辑的库提供用户交互。 nsupdate 就是一个例子,但我展示的方法对于查找许多类似情况的编程接口很有用。
猜你喜欢
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 2014-07-13
  • 2017-11-04
  • 2011-02-03
  • 2021-03-24
  • 2021-05-06
  • 2022-01-05
相关资源
最近更新 更多