Created a utility class for finding IP addresses. Minimalist approach. You can expand it by using additional conditions or by checking regular expressions.
NSLog(@"Addresses: %@", [[NSHost currentHost] addresses]);
This is the list returned by NSHost.
"fe80::1610:9fff:fee1:8c2f%en0", "192.168.212.61", "fe80::2829:3bff:fee6:9133%awdl0", "fe80::e54b:8494:bbc8:3989%utun0", "fd68:cc16:fad8:ded9:e54b:8494:bbc8:3989", "10.11.51.61", "::1", "127.0.0.1", "fe80::1%lo0"
Testing method
- (void)testHost { NSLog(@"Addresses: %@", [[NSHost currentHost] addresses]); for (NSString *s in [[NSHost currentHost] addresses]) { IPAddress *addr = [[IPAddress alloc] initWithString:s]; if (![addr isLocalHost] && [addr isIPV4]) {
IPAddress.h
IPAddress.m
#import "IPAddress.h" @implementation IPAddress - (id)initWithString:(NSString *)ipaddress { self = [super init]; if (self) { self.IPAddress = ipaddress; } return self; } - (BOOL)isLocalHost { if (self.IPAddress == nil) return NO; if ([@"127.0.0.1" compare:self.IPAddress options:NSCaseInsensitiveSearch] == NSOrderedSame) { return YES; } if ([@"localhost" compare:self.IPAddress options:NSCaseInsensitiveSearch] == NSOrderedSame) { return YES; } if ([@"::1" compare:self.IPAddress options:NSCaseInsensitiveSearch] == NSOrderedSame) { return YES; } return NO; } - (BOOL) isIPV4 { NSArray *ar = [self.IPAddress componentsSeparatedByString:@"."]; if (ar.count == 4) { return YES; } return NO; } - (BOOL) isIPV6 { if (![self isIPV4]) { if ([self.IPAddress rangeOfString:@":"].location != NSNotFound) { return YES; } } return NO; } @end
karim
source share