我正在Windows †中实现DNS缓存,我需要知道缓存否定响应的时间。 RFC 2308说要使用我收到的SOA记录的TTL,但是尽管SOA记录是通过线路发送给我的(正如tcpdump所证实的),DnsQuery不会将它暴露给我。例如,运行以下C ++代码没有输出:
PDNS_RECORDA data = nullptr;
DNS_STATUS rv = dnsQuery("www.google.com", DNS_TYPE_SOA, DNS_QUERY_STANDARD,
nullptr, &data, nullptr);
if (data != nullptr) {
cout << "Yippee" << endl;
}
我已经尝试了0
和0xFF
之间的每个值作为第二个参数,但我从来没有给过SOA记录(尽管其他几个记录很好,例如A,AAAA和CNAME) 。有谁知道如何让它表现出来?
第三个参数接受各种标志。我尝试DNS_QUERY_RETURN_MESSAGE
看起来很有前途,但似乎没有明显的效果(我在Windows 7上,所以应该支持每the docs)。我也在绝望中试过各种其他的旗帜。即DNS_QUERY_BYPASS_CACHE
,DNS_QUERY_RETURN_MESSAGE | DNS_QUERY_BYPASS_CACHE
,DNS_QUERY_WIRE_ONLY
和DNS_QUERY_DONT_RESET_TTL_VALUES
。我已经阅读了entire list of query options并没有看到任何看起来非常有希望的东西。请注意,对于每个标记,我尝试将0
和0xFF
之间的每个值作为第二个参数,并在结果类型为DNS_TYPE_SOA
的列表中查找任何内容。
†我知道Windows有一个非常好的DNS缓存。