我正在尝试使用裸主机名(例如_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下有这方面的经验?
感谢您的任何建议, 罗伯特
答案 0 :(得分:2)
它在nslookup下工作的原因是Windows正在使用配置的域后缀执行所有搜索。要查看此操作,请启动nslookup,然后发出“set debug”命令。现在执行搜索,您将看到计算机发送和接收的请求和响应。在添加并匹配其中一个配置的域后缀之前,“裸主机名”将会有一个未解决的问题。
希望这会有所帮助。
Jonathan
以下是一个免费的DNS客户端库,可用于查询DNS以查找不同类型的查询:http://www.simpledns.com/dns-client-lib.aspx还http://arsofttoolsnet.codeplex.com