iOS获得当前设备的IP最方便最好的方法 (分IPv4 & IPv6)

来源:互联网 发布:sql创建日期型字段 编辑:程序博客网 时间:2024/06/06 01:33


IPv4:

#import <ifaddrs.h>#import <arpa/inet.h>// Get IP Address- (NSString *)getIPAddress {        NSString *address = @"error";    struct ifaddrs *interfaces = NULL;    struct ifaddrs *temp_addr = NULL;    int success = 0;    // retrieve the current interfaces - returns 0 on success    success = getifaddrs(&interfaces);    if (success == 0) {        // Loop through linked list of interfaces        temp_addr = interfaces;        while(temp_addr != NULL) {            if(temp_addr->ifa_addr->sa_family == AF_INET) {                // Check if interface is en0 which is the wifi connection on the iPhone                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {                    // Get NSString from C String                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];                               }            }            temp_addr = temp_addr->ifa_next;        }    }    // Free memory    freeifaddrs(interfaces);    return address;} 

IPv6:

- (NSString *)getIPAddress{        struct ifaddrs *interfaces = NULL;    struct ifaddrs *temp_addr = NULL;    NSString *wifiAddress = nil;    NSString *cellAddress = nil;    // retrieve the current interfaces - returns 0 on success    if(!getifaddrs(&interfaces)) {        // Loop through linked list of 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)]; // pdp_ip0                     NSLog(@"NAME: \"%@\" addr: %@", name, addr); // see for yourself                if([name isEqualToString:@"en0"]) {                    // Interface is the wifi connection on the iPhone                    wifiAddress = addr;                    } else                if([name isEqualToString:@"pdp_ip0"]) {                    // Interface is the cell connection on the iPhone                    cellAddress = addr;                    }            }            temp_addr = temp_addr->ifa_next;        }        // Free memory        freeifaddrs(interfaces);    }    NSString *addr = wifiAddress ? wifiAddress : cellAddress;    return addr ? addr : @"0.0.0.0";} 



原创粉丝点击