gpt4 book ai didi

c - gcc/cygwin如何获取DNS服务器?

转载 作者:太空狗 更新时间:2023-10-29 17:03:43 26 4
gpt4 key购买 nike

我有一些在 cygwin(使用 GCC)下成功使用 gethostbyname() 的代码;但是,当我尝试直接使用解析器检索 DNS 服务器的 IP 地址时,它失败了(nsaddr_list[] 中的所有条目均为空,nscount 为 -1)。如果 gethostbyname() 正常工作,那么显然它能够连接到 DNS 服务器。
这段代码...

    if (res_init() == -1) {
fprintf(stderr,"res_init() failed\n");
exit(1);
}

if (_res.nscount <= 0) {
fprintf(stderr,"nscount = %d\n",_res.nscount);
}
else {
for(i=0;i<_res.nscount;i++) {
fprintf(stderr, "dnssrvr: %d.%d.%d.%d\n",
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff) >> 0,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff00) >> 8,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff0000) >> 16,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff000000) >> 24);
}
}

适用于 unix/linux,但在 cygwin 上返回 nscount=-1。使用 cygwin/gcc 时获取 DNS 服务器有什么技巧吗?

最佳答案

res_init不一定填充 _res.nsaddr_list .相反,在 Windows 上它指示解析器使用 DnsQuery_A除非您有 resolv.conf文件,在这种情况下,使用来自该文件的 DNS 服务器。

查看来源 here , 文件 minires.cminires-os-if.c .

如果你需要知道你的 DNS 服务器,你可能必须使用 DnsQueryConfigGetNetworkParams .

注意:_res没有记录,不应使用。

更新 显然“较新”(ca 2010 及更高版本)的 cygwin 版本填充了 _res.nsaddr_list , 通过调用 get_dns_info然后 get_registry_dns .您可能需要确保您拥有最新的 cygwin,如果问题仍然存在,请尝试使用调试版本并跟踪对上述函数的调用。

更新 2 否,_res没有人口,我的错误。

关于c - gcc/cygwin如何获取DNS服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10523828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com