3

ここでこのコード参照を使用する場合: http://support.microsoft.com/kb/831226

私は成功を収めることができますが、それを使用していくつかのDNSクエリを実行すると、返信アドレスが奇妙になります。たとえば、176.20.31.0(これは有効なアドレスではありません)

ここに私の出力があります:

C:\dnsq\Debug>dnsq.exe -n tw.media.blizzard.com -t A -s 8.8.8.8
The IP address of the host tw.media.blizzard.com is 176.20.31.0

しかし、実際には tw.media.blizzard.com は次のようになります: (nslookup で照会します)

# nslookup tw.media.blizzard.com 8.8.8.8
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
tw.media.blizzard.com   canonical name = tw.media.blizzard.com.edgesuite.net.
tw.media.blizzard.com.edgesuite.net     canonical name = a1479.g.akamai.net.
Name:   a1479.g.akamai.net
Address: 23.14.93.167
Name:   a1479.g.akamai.net
Address: 23.14.93.157

私の質問は、一部の FQDN で dnsquery が機能しないのはなぜですか? どんな提案もいただければ幸いです:)

4

2 に答える 2

1

問題が見つかりました。

invlid アドレスにつながる FQDN の場合、一般的なのは、DNS レコード タイプがすべて DNS_TYPE_A ではなく「DNS_TYPE_CNAME」であることです。

そのため、PDNS_RECORD 全体を解析して DNS_TYPE_A 情報を取得する必要があります。


ここに変更を投稿します。

MS からの元のコード:

    if(wType == DNS_TYPE_A) {
        //convert the Internet network address into a string
        //in Internet standard dotted format.
        ipaddr.S_un.S_addr = (pDnsRecord->Data.A.IpAddress);
        printf("The IP address of the host %s is %s \n", pOwnerName,inet_ntoa(ipaddr));

        // Free memory allocated for DNS records. 
        DnsRecordListFree(pDnsRecord, freetype);
    }

ここで私の変更:

    if(wType == DNS_TYPE_A) {
        //convert the Internet network address into a string
        //in Internet standard dotted format.
        PDNS_RECORD cursor;

        for (cursor = pDnsRecord; cursor != NULL; cursor = cursor->pNext) {
            if (cursor->wType == DNS_TYPE_A) {
                ipaddr.S_un.S_addr = (cursor->Data.A.IpAddress);
                printf("The IP address of the host %s is %s \n", pOwnerName,inet_ntoa(ipaddr));                 
            }
        }

        // Free memory allocated for DNS records. 
        DnsRecordListFree(pDnsRecord, freetype);
    }       
于 2012-12-13T03:51:20.210 に答える