我已经搜索了一段时间没有任何成功,我应该如何TXT
在 Objective-C 中获取域的 DNS 记录?
我的目标是获得与以下相同的输出:dig -t txt google.com +short
PS:NSTask
请不要/pipping!(我目前正在这样做,但这很糟糕)。代码可以用 C 编写,稍后我将编写一个包装器。我不关心 AppStore 规则。
谢谢!
我已经搜索了一段时间没有任何成功,我应该如何TXT
在 Objective-C 中获取域的 DNS 记录?
我的目标是获得与以下相同的输出:dig -t txt google.com +short
PS:NSTask
请不要/pipping!(我目前正在这样做,但这很糟糕)。代码可以用 C 编写,稍后我将编写一个包装器。我不关心 AppStore 规则。
谢谢!
用于:DNSServiceQueryRecord
_dns_sd.h
#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);
}
}
可以使用这样的代码删除\x02 \x03,我删除\0x12 \0x17 使用$man ascii 检查字符结果[256]={0}; dn_expand(rdata, rdata + rdlen, rdata, 结果, 256);
NSMutableData *txtData = [NSMutableData dataWithCapacity:rdlen];
char *p=(char*)rdata;
for (uint16_t i = 0; i < rdlen; i++) {
DLog(@"%c\n",*p);
if (*p > 0x20) {
[txtData appendBytes:p length:1];
}
p++;
}