首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用DnsQuery指定要查询的特定DNS服务器?

如何使用DnsQuery指定要查询的特定DNS服务器?
EN

Stack Overflow用户
提问于 2012-01-20 03:10:00
回答 2查看 5.9K关注 0票数 6

DnsQuery没有指定要查询的服务器的参数。另一方面,我看到了this sample,在MSDN文档中,它似乎在标记为“保留且必须为0”的参数中传递了一个IP。

是否有某种方法可以查询特定的服务器(如nslookup所做的?)或者我必须编写自己的DNS客户端(当然也可以找到一个库)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-09 10:53:59

DNS PVOID pExtra的第4个参数接受包含要查询的特定DnsQuery服务器的PIP4_ARRAY。它与DNS_QUERY_BYPASS_CACHE的第三个参数DWORD Options结合使用,以绕过解析器缓存。

这在Windows2000之后就开始起作用了,在Windows中,DnsQuery调用名为privateNarrowToWideQuery的函数(在dnsapi.dll中),并接受pExtra参数is作为PIP4_ARRAY。

MSDN在这方面是不准确的,导致这是一个未记录的功能。在旧版本的DnsQuery应用程序接口调用中,pExtra通常被称为aipServers

关于IPV6 AAAA记录的DNS,您可以尝试使用第二个参数WORD wType作为DNS_TYPE_AAAA,第五个参数PDNS_RECORD *ppQueryResultsSet作为指向DNS_AAAA_DATA的指针的函数。但这仍然会强制您传入IPV4 IP地址数组,而不是IPV6。

关于Windows版本对IPV6查询的支持,请参阅以下参考资料

在未来的Windows版本中,我相信为IPV6做这件事的正确方法是使用DnsQueryEx,它的第一个参数是PDNS_QUERY_REQUEST pQueryRequest,它包含一个成员PDNS_ADDR_ARRAY pDnsServerList;,它包含成员WORD Family;,它指定DNS服务器是哪种类型的IP地址。

我不确定DnsQuery是否已经支持将指向PDNS_ADDR_ARRAY的指针作为PVOID pExtra的参数,或者将在未来的版本中进行修改以实现这一点,但欢迎您尝试查看。

正如您已经发现的,有关示例代码,请参阅How to use the DnsQuery function to resolve host names and host addresses with Visual C++ .NET

另请参阅以下similar SO Question

票数 8
EN

Stack Overflow用户

发布于 2019-01-13 21:43:50

它有一个函数:

代码语言:javascript
运行
复制
        PCSTR       pszName = machine.c_str(); 

        DWORD       Options = NULL; 

        PVOID       pExtra = NULL; 

        PDNS_RECORD ppQueryResults; 

        PVOID       *pReserved = NULL; 



DNS_STATUS DNS_stat = DnsQuery_A(
                pszName,
                DNS_TYPE_A,
                Options,
                pExtra,
                &ppQueryResults,
                pReserved
            );

其中pszName是serverName。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8931824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档