如何使用 DnsQuery 指定要查询的特定 DNS 服务器
How does one specify a specific DNS server to query using DnsQuery?
DnsQuery没有参数来指定要查询的服务器。另一方面,我看到了此示例,它似乎在 MSDN 文档中标记为"保留且必须为 0"的参数中传递了一个 IP。
有没有办法查询特定的服务器(就像nslookup一样?还是我必须编写自己的DNS客户端(或者当然要找到一个库(?
DnsQuery PVOID pExtra
的第 4 个参数接受包含要查询的特定 DNS 服务器的PIP4_ARRAY
。这与DNS_QUERY_BYPASS_CACHE的第3个参数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 版本支持,请参阅以下参考资料
- 域名服务 (DNS(
- Windows Vista 中的域名系统客户端行为 Windows
- Vista 和 Windows Server 2008 中对 IPv6 的更改
在未来的Windows版本中,我相信IPV6的正确方法是使用。 DnsQueryEx
,其第一个参数PDNS_QUERY_REQUEST pQueryRequest
包含成员PDNS_ADDR_ARRAY pDnsServerList;
,其中包含指定 DNS 服务器 IP 地址类型的成员WORD Family;
。
DnsQuery 是否已经支持指向PDNS_ADDR_ARRAY的指针作为PVOID pExtra
的参数,或者将在未来的 Windows 版本中进行修改以执行此操作,我不确定,但欢迎您尝试查看。
如你已发现的示例代码,请参阅如何使用 DnsQuery 函数通过 Visual C++ .NET 解析主机名和主机地址。
另请参阅以下类似的 SO 问题。
它有一个函数:
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 是服务器名称。
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 从服务器传输到客户端的消息不会出现
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- OpenSSL TLS服务器-使用客户端证书白名单
- 我正在开发服务器,ip作为参数传递不起作用
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 如何在 Minecraft 服务器上执行命令
- 使用并行中的主 DNS 服务器和辅助 DNS 服务器进行名称解析
- 是否可以在C 中以编程方式查询不同的DNS名称服务器,从而忽略系统设置
- 如何在Qt中获取主DNS服务器和辅助DNS服务器
- 查找 DNS 服务器和网关的 IP 和 MAC 地址
- 如何使用 DnsQuery 指定要查询的特定 DNS 服务器
- 使用winsock解析DNS,服务器位于路由器后面
- 通过编程方式获取主机的DNS IPv6服务器
- BIND设置root-delegation-only而不带exclude选项时,DNS服务器崩溃
- 如何在c区获得DNS服务器