Objective-C:DNS TXT 记录

标签 objective-c dns dig

我已经搜索了一段时间但没有成功,我该如何在 Objective-C 中获取某个域的 DNS TXT 记录?

我的目标是获得与以下内容相同的输出:dig -t txt google.com +short

PS:请不要使用 NSTask/pipping! (我目前正在这样做,但这很糟糕)。代码可以用C编写,稍后我将编写一个包装器。我不关心 AppStore 规则。

谢谢!

最佳答案

dns_sd.h中使用DNSServiceQueryRecord:

#import <dns_sd.h>

// ...

DNSServiceRef serviceRef;

DNSServiceQueryRecord(&serviceRef, 0, 0, "hmspl.de", kDNSServiceType_TXT,
                      kDNSServiceClass_IN, queryCallback, NULL);

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(@"%@", theTXT);
    }
}

参见https://developer.apple.com/library/mac/#documentation/Networking/Reference/DNSServiceDiscovery_CRef/Reference/reference.html#//apple_ref/doc/c_ref/DNSServiceQueryRecord

关于Objective-C:DNS TXT 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17330816/

相关文章:

objective-c - #import 和@class 之间有什么区别,什么时候应该使用一个而不是另一个?

python - 如何在 Python 3 中使用 DNS 解析器?

bash - 使用 dig 检查 bash 中的域可用性

linux - 使用 XenServer 内的 CentOS 5 无法解析主机名但 IP 地址的问题

linux - 挖掘查询 ID 如何工作?

networking - 解析 gmail.com 邮件服务器

ios - 将整数值从一个 ViewController 传递到另一个 ViewController 并将其显示在 UITextField 中

objective-c - 在 finder 同步扩展和 XPC 之间通信

iphone - 某些应用程序如何在其应用程序中以编程方式打开设置应用程序

dns - virtualbox:--natdnsproxy1 和--natdnshostresolver1 有什么区别?