2017-06-23 129 views
0

我已经能够从主机名获得IP地址,反之亦然使用CFHost类,但无法从主机名获得CNAME。如何获得主机名/ IP地址的CNAME

任何人都不知道如何解析主机名以获取其CNAME。

+0

你不能轻易获得CNAME记录;没有“反向”记录指向A记录中的CNAME – Paulw11

+0

@ Paulw11我找到了使用DNSService的解决方案。 –

+0

@VarunMehta发布一个正确的,完整的答案显示你的解决方案或删除这个问题。 – rmaddy

回答

0

我找到了解决方案。希望它可以帮助别人找它:

+ (void) getCNAME { 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    DNSServiceRef serviceRef; 

    DNSServiceErrorType error; 

    error = DNSServiceQueryRecord(&serviceRef, 0, 0, "apple.com", kDNSServiceType_CNAME, 

            kDNSServiceClass_IN, queryCallback, NULL); 

    if (error != kDNSServiceErr_NoError){ 

     NSLog(@"DNS Service error"); 

    } 



    DNSServiceProcessResult(serviceRef); 

    DNSServiceRefDeallocate(serviceRef); 

});} 

static void queryCallback(DNSServiceRef sdRef, 

         DNSServiceFlags flags, 

         uint32_t interfaceIndex, 

         DNSServiceErrorType errorCode, 

         const char *fullname, 

         uint16_t rrtype, 

         uint16_t rrclass, 

         uint16_t rdlen, 

         const void *rdata, 

         uint32_t ttl, 

         void *context) { 



if (errorCode == kDNSServiceErr_NoError && rdlen > 1) { 

    NSMutableData *txtData = [NSMutableData dataWithCapacity:rdlen]; 



    for (uint16_t i = 1; i < rdlen; i += 256) { 

     [txtData appendBytes:rdata + i length:MIN(rdlen - i, 255)]; 

    } 



    NSString *theTXT = [[NSString alloc] initWithBytes:txtData.bytes length:txtData.length encoding:NSASCIIStringEncoding]; 

    NSLog(@"CNAME: %@", theTXT); 

}}