gpt4 book ai didi

c++ - 如何使用 DnsQuery 指定特定的 DNS 服务器进行查询?

转载 作者:可可西里 更新时间:2023-11-01 13:24:18 27 4
gpt4 key购买 nike

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

有没有什么方法可以查询特定的服务器(如 nslookup 那样?)还是我必须编写自己的 DNS 客户端(当然也可以找一个库)?

最佳答案

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

这从 Windows 2000 开始有效,在 Windows XP 中 DnsQuery 调用该函数称为 privateNarrowToWideQuery(在 dnsapi.dll 中)并采用 pExtra 参数作为 PIP4_ARRAY。

MSDN 在这方面不准确,导致这是一个未记录的功能。在旧版本的 DnsQuery API 中,调用 pExtra 曾经被称为 aipServers

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

关于 IPV6 查询的 Windows 版本支持请参阅以下引用资料

在未来的 Windows 版本中,我相信为 IPV6 执行此操作的正确方法是使用DnsQueryEx ,其第一个参数为 PDNS_QUERY_REQUEST pQueryRequest 其中包含成员 PDNS_ADDR_ARRAY pDnsServerList;,其中包含成员 WORD Family;,指定 DNS 服务器的 IP 地址类型。

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

参见 How to use the DnsQuery function to resolve host names and host addresses with Visual C++ .NET对于示例代码,正如您已经发现的那样。

另见以下 similar SO Question .

关于c++ - 如何使用 DnsQuery 指定特定的 DNS 服务器进行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8931824/

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