我正在尝试从getaddrinfo获取当前主机名的主机ip。由于/etc/hosts
已解析为127.0.1.1
,因此在Debian中不起作用。
是否有一种方法可以强制呼叫进行DNS查询,而不是仅依靠/etc/hosts
?或者也许有办法解决?我发现使用getsockname
来获取用于套接字的ip的建议,但这对我不起作用,因为我没有固定的远程节点可以一直连接。
这是一个简单的代码段供参考:
void print_host_ip(const char *hostname)
{
struct addrinfo *addr_info = NULL;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
assert(getaddrinfo(hostname, nullptr, &hints, &addr_info) == 0);
char hostip[64] = {0};
for (struct addrinfo *it = addr_info; it; it = it->ai_next) {
struct sockaddr_in *sai = (struct sockaddr_in *) it->ai_addr;
fprintf(stdout, "ip is %s\n", inet_ntop(AF_INET, (void *) &sai->sin_addr, hostip, 64));
}
}