【问题标题】:How might I perform DNS lookups using C/C++ on Linux?如何在 Linux 上使用 C/C++ 执行 DNS 查找?
【发布时间】:2010-11-10 20:01:34
【问题描述】:

如何使用 c api(或任何其他语言)获得与 host 命令类似的功能?我需要更多信息,而不仅仅是gethostbyname() 提供的 IP 地址;特别是与 SMTP 相关的数据。

【问题讨论】:

标签: c linux smtp dns


【解决方案1】:

如果阻塞(同步)查询没问题,只需使用res_query(),并将您的程序与-lresolv 链接。

 len = res_query(host, C_IN, T_MX, &answer, sizeof(answer));

【讨论】:

    【解决方案2】:

    我建议FireDNS。这是一个非常快速的 C 库,适用于各种 dns 查询。

    【讨论】:

    • 该项目看起来已被废弃(最后一次发布于 2004 年),不幸的是下载链接不起作用(firestuff.org)...
    【解决方案3】:

    我知道这个问题很老了,但我早就搜索了一个 dns 库,这里的所有答案都让我很困惑。我认为像 adns/udns 这样的库不是为人类编写的。而且FireDNS很长时间都没有下载链接。

    我发现poslib 是最好的 dns 库,界面非常简单。

    【讨论】:

      【解决方案4】:

      我喜欢adns,因为它允许异步请求

      【讨论】:

      • ps,我更喜欢 FireDns,因为它更容易、更清晰:D
      【解决方案5】:

      我认为 C 标准库中没有此功能,但许多脚本语言确实“内置”了此功能。例如,Perl 有 Net::DNS 包:

      use Net::DNS;
      my @mx = mx("example.com");
      foreach $host (@mx) {
        print $host;
      }
      

      如果您需要在 C 中执行此操作,可以快速搜索一下 google 显示一些您可以使用的 C 库:

      【讨论】:

        【解决方案6】:

        我还要补充一点,除非您正在编写邮件中继,否则您几乎肯定不应该查找 MX 记录 - 您应该将邮件传递给用户配置的邮件中继。

        【讨论】:

          【解决方案7】:

          您也可以尝试 c-ares 库 https://c-ares.haxx.se/,它允许发送异步 DNS 查询。它还带有 adig - 它自己的用于查询 DNS 的 dig 实用程序版本。您可以查看它以查看如何解析 DNS 回复:adig.c source

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-16
            相关资源
            最近更新 更多