1

我正在尝试使用裸主机名(例如_service._proto)查询一组 SRV 记录,但是除非我还包括域名,否则这会失败。这很奇怪,因为其他工具(例如 nslookup)可以正常工作,并且使用相同的 API 调用来查询 A 记录也可以很好地处理裸主机名。

dsRet = DnsQuery("_service._udp",DNS_TYPE_SRV,DNS_QUERY_STANDARD,NULL,&pQueryResultsSet,NULL);//==DNS_ERROR_RCODE_NAME_ERROR
dsRet = DnsQuery("_service._udp",DNS_TYPE_TEXT,DNS_QUERY_STANDARD,NULL,&pQueryResultsSet,NULL);//==DNS_ERROR_RCODE_NAME_ERROR
dsRet = DnsQuery("_service._udp.example.com",DNS_TYPE_SRV,DNS_QUERY_STANDARD,NULL,&pQueryResultsSet,NULL);//==ERROR_SUCCESS
dsRet = DnsQuery("_service._udp.example.com",DNS_TYPE_TEXT,DNS_QUERY_STANDARD,NULL,&pQueryResultsSet,NULL);//==ERROR_SUCCESS
dsRet = DnsQuery("collector",DNS_TYPE_A,DNS_QUERY_STANDARD,NULL,&pQueryResultsSet,NULL); //==ERROR_SUCCESS

我当然可以查询系统以获取主域名,甚至可能是所有已配置的搜索域,但我很确定我不应该这样做。我几乎找不到对 Windows DNS API 的引用,所以我想知道是否有更好的方法来查询 TXT 和 SRV 记录。有没有人在 Windows 下有这方面的经验?

感谢您的任何建议,罗伯特

4

1 回答 1

2

它在 nslookup 下工作的原因是 windows 正在使用它配置的域后缀执行所有搜索。要查看实际情况,请启动 nslookup,然后发出“set debug”命令。现在执行搜索,您将看到您的机器发送和接收的请求和响应。在附加和匹配配置的域后缀之一之前,“裸主机名”将有一个未答复的主机名。

希望这会有所帮助。

乔纳森

这是一个免费的 DNS 客户端库,您可以使用它来查询不同类型的查询的 DNS:http ://www.simpledns.com/dns-client-lib.aspx也http://arsofttoolsnet.codeplex.com

于 2011-06-22T09:13:25.413 回答