c - 使用本地主机 53 或给定 dns 服务器上的套接字发送反向 dns 请求

标签 c linux sockets dns

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

最佳答案

您需要将其发送到特定的名称服务器,还是只使用正常的系统名称解析行为?如果是后者,则标准接口(interface)是 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);

当然你也应该检查返回值是否有错误。

关于c - 使用本地主机 53 或给定 dns 服务器上的套接字发送反向 dns 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324739/

相关文章:

linux - time_after() linux 宏关于 jiffies 的回绕是否 100% 万无一失?

linux - 在保护我的网络服务器(rpi)免受外部 ssh 登录的影响后,我在我的计算机上发现了这个 perl 脚本。有人能告诉我它有什么作用吗?

sockets - 如何使用AT命令可靠地拆除和重新连接TCP/IP套接字

java - 在 Java 中通过套接字发送文件

VB.Net 正确关闭在后台工作程序上运行的异步套接字服务器

c - 从所有数组元素打印字符串

c - 将整数打印为字符数字(无数组/printf/等...)

c - While 循环中的方程式

html - 用静态 HTML 网站替换 Tomcat 服务器上的网站

c - C 中的简单 if 语句始终返回 true