我正在尝试获取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
我可以做的事情......
答案 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
所做的一部分。