#import <arpa/inet.h> - (BOOL)resolveHost:(NSString *)hostname { Boolean result; CFHostRef hostRef; CFArrayRef addresses; NSString *ipAddress = nil; hostRef = CFHostCreateWithName(kCFAllocatorDefault, (__bridge CFStringRef)hostname); CFStreamError *error = NULL; if (hostRef) { result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, error); if (result) { addresses = CFHostGetAddressing(hostRef, &result); } } if (result) { CFIndex index = 0; CFDataRef ref = (CFDataRef) CFArrayGetValueAtIndex(addresses, index); int port=0; struct sockaddr *addressGeneric; NSData *myData = (__bridge NSData *)ref; addressGeneric = (struct sockaddr *)[myData bytes]; switch (addressGeneric->sa_family) { case AF_INET: { struct sockaddr_in *ip4; char dest[INET_ADDRSTRLEN]; ip4 = (struct sockaddr_in *)[myData bytes]; port = ntohs(ip4->sin_port); ipAddress = [NSString stringWithFormat:@"%s", inet_ntop(AF_INET, &ip4->sin_addr, dest, sizeof dest)]; } break; case AF_INET6: { struct sockaddr_in6 *ip6; char dest[INET6_ADDRSTRLEN]; ip6 = (struct sockaddr_in6 *)[myData bytes]; port = ntohs(ip6->sin6_port); ipAddress = [NSString stringWithFormat:@"%s", inet_ntop(AF_INET6, &ip6->sin6_addr, dest, sizeof dest)]; } break; default: ipAddress = nil; break; } } NSLog(@"%@", ipAddress); if (ipAddress) { return YES; } else { return NO; } } [self resolveHost:@"google.com"]
source share