如何在iOS上执行DNS查询

我想执行一些DNS查询,例如为了获取特定域名的IPlogging,我正在寻找一个首选的方式或一些有用的片段,这在iOS 3.2 + SDK上。 thanx提前

部分来自其他片段,我发现这个代码

Boolean result; CFHostRef hostRef; NSArray *addresses; NSString *hostname = @"apple.com"; hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname); if (hostRef) { result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed if (result == TRUE) { addresses = (NSArray*)CFHostGetAddressing(hostRef, &result); } } if (result == TRUE) { [addresses enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSString *strDNS = [NSString stringWithUTF8String:inet_ntoa(*((struct in_addr *)obj))]; NSLog(@"Resolved %d->%@", idx, strDNS); }]; } else { NSLog(@"Not resolved"); } 

但是这是产生相同的IP为每个主机解决0-> 220.120.64.1任何帮助?

找出这个片段中的变化使其工作

 if (result == TRUE) { NSMutableArray *tempDNS = [[NSMutableArray alloc] init]; for(int i = 0; i < CFArrayGetCount(addresses); i++){ struct sockaddr_in* remoteAddr; CFDataRef saData = (CFDataRef)CFArrayGetValueAtIndex(addresses, i); remoteAddr = (struct sockaddr_in*)CFDataGetBytePtr(saData); if(remoteAddr != NULL){ // Extract the ip address //const char *strIP41 = inet_ntoa(remoteAddr->sin_addr); NSString *strDNS =[NSString stringWithCString:inet_ntoa(remoteAddr->sin_addr) encoding:NSASCIIStringEncoding]; NSLog(@"RESOLVED %d:<%@>", i, strDNS); [tempDNS addObject:strDNS]; } } } 

兄弟有一个更简单的方法! 感谢iOS是一个unix系统,您将成为一个拥有无限权力和资源的上帝! 我呈现优雅。

 - (NSString*)lookupHostIPAddressForURL:(NSURL*)url { // Ask the unix subsytem to query the DNS struct hostent *remoteHostEnt = gethostbyname([[url host] UTF8String]); // Get address info from host entry struct in_addr *remoteInAddr = (struct in_addr *) remoteHostEnt->h_addr_list[0]; // Convert numeric addr to ASCII string char *sRemoteInAddr = inet_ntoa(*remoteInAddr); // hostIP NSString* hostIP = [NSString stringWithUTF8String:sRemoteInAddr]; return hostIP; }