- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
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/
当我使用这段代码时此处引用:http://support.microsoft.com/kb/831226 我可以编译成功,但是当我用它做一些 dns 查询时,返回地址很奇怪,例如:176.20.31.
我需要将主机名转换为 IPv4 地址。例如,“google.com”到其 IPv4 地址 172.217.15.78。 正确的函数是什么? 最佳答案 由于您只需要解析主机名,因此请使用 getaddr
DnsQuery没有参数来指定要查询的服务器。另一方面,我见过 this sample ,它似乎在 MSDN 文档中标记为“保留且必须为 0”的参数中传递了一个 IP。 有没有什么方法可以查询特定的服
我是一名优秀的程序员,十分优秀!