使用localhost 53或给定的dns服务器上的socket发送反向dns请求

时间:2013-06-26 15:48:53

标签: c linux sockets dns

我正在尝试获取IPV4地址的反向DNS结果。通过挖掘,dig -x 1.2.3.4很简单。但是我必须在Linux C环境中使用套接字获得相同的结果。最终,我应该在recv*函数中开始授权。我尝试将IP 1.2.3.4更改为4.3.2.1.in-addr.arpa,将其在缓冲区中发送到DNS服务器。首先我做了简单的DNS,我得到了正确的DNS响应(与dig foobar.com相同)。我认为我的主要麻烦是在-x中发送dig -x 1.2.3.4,因为dig foobar.com我可以做的事情......

2 个答案:

答案 0 :(得分:1)

您需要将其发送到特定的名称服务器,还是仅使用正常的系统名称解析行为?如果是后者,则标准接口为getnameinfo。它不是普通C的一部分(普通C实际上没有网络概念),但它在POSIX和IETF RFC中都是标准化的。如果您已经有struct sockaddr引用地址:

char buf[256];
getnameinfo(sa, sa_len, buf, sizeof buf, 0, 0, 0);

是基本用法。如果您还没有sockaddr格式的地址,请使用:

struct addrinfo ai;
char buf[256];
getaddrinfo(ip_string, 0, 0, &ai);
getnameinfo(ai->ai_addr, ai->ai_addrlen, buf, sizeof buf, 0, 0, 0);
freeaddrinfo(ai);

当然,您还应该检查错误的返回值。

答案 1 :(得分:0)

执行“反向”查找(给定IP地址,查找域名)时,您需要使用PTR查询类型而不是A。这是dig -x所做的一部分。