を使用しませんNSHost
が、Bonjour-APIを使用し、希望どおりに機能するようです。
#import <Cocoa/Cocoa.h>
#import <dns_sd.h>
#import <resolv.h>
static void callback(DNSServiceRef serviceRef, 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) {
char result[1024] = {0};
dn_expand(rdata, rdata + rdlen, rdata, result, 1024);
NSLog(@"Found: %s", result);
}
int main(int argc, char const *argv[]) {
DNSServiceRef reverseLookupService = NULL;
DNSServiceErrorType error = kDNSServiceErr_NoError;
error = DNSServiceQueryRecord(&reverseLookupService, kDNSServiceFlagsForceMulticast,
kDNSServiceInterfaceIndexAny, "5.1.168.192.in-addr.arpa.",
kDNSServiceType_PTR, kDNSServiceClass_IN,
callback, NULL);
if (error != kDNSServiceErr_NoError) {
NSLog(@"Error: %d", error);
exit(1);
}
error = DNSServiceProcessResult(reverseLookupService);
DNSServiceRefDeallocate(reverseLookupService);
return 0;
}
重要な部分はで使用DNSServiceQueryRecord
することkDNSServiceFlagsForceMulticast
です。この関数の詳細については、 https://developer.apple.com/library/mac/#documentation/Networking/Reference/DNSServiceDiscovery_CRef/dns_sd_h/index.html#//apple_ref/c/func/DNSServiceQueryRecordを参照してください。
IPアドレスを自分でin-addr.arpa.-formatに変換する必要がありますが、それは難しいことではありません(オクテットは、最後に「in-addr.arpa。」が付いた逆引きです。IPv6もおそらく似ていますが、私はテストしていません)。
インポートresolv.h
します(そしてlibresolvにリンクする必要があります)が、。のみですdn_expand
。コールバックに渡されるデータは圧縮され、dn_expand
人間が読める形式の表現を作成します。