如何在Linux上使用C / C ++执行DNS查找?

时间:2009-07-14 22:28:12

标签: c linux smtp dns

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

7 个答案:

答案 0 :(得分:18)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我知道这个问题已经过时了,但是我一直在寻找一个dns库,而这里的所有答案都只是困扰我。我认为像adns / udns这样的图书馆不是为人而写的。而FireDNS很长一段时间没有工作下载链接。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

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

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

如果您需要在C中执行此操作,快速谷歌会显示一些您可以使用的C库: