1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #import <arpa/inet.h> #import <ifaddrs.h> + (NSString *)getIPAddress { struct ifaddrs *interfaces = NULL; struct ifaddrs *temp_addr = NULL; NSString *wifiAddress = nil; NSString *cellAddress = nil; if(!getifaddrs(&interfaces)) { temp_addr = interfaces; while(temp_addr != NULL) { sa_family_t sa_type = temp_addr->ifa_addr->sa_family; if(sa_type == AF_INET || sa_type == AF_INET6) { NSString *name = [NSString stringWithUTF8String:temp_addr->ifa_name]; NSString *addr = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; NSLog(@"NAME: \"%@\" addr: %@", name, addr); if([name isEqualToString:@"en0"]) { wifiAddress = addr; } else if([name isEqualToString:@"pdp_ip0"]) { cellAddress = addr; } } temp_addr = temp_addr->ifa_next; } freeifaddrs(interfaces); } NSString *addr = wifiAddress ? wifiAddress : cellAddress; return addr ? addr : @"0.0.0.0"; }
|