获取本地IP(wifi 和蜂窝数据都可以正常获取)

- (NSString *)getCurentLocalIP {
    struct ifaddrs *ifa, *ifa_tmp;
    char addr[50];
    int success = getifaddrs(&ifa);
    if (success != 0) {
        return @"0.0.0.0";
    }
    NSString *WIFIaddress = nil;
    NSString *PDPaddress = nil;
    ifa_tmp = ifa;
    while (ifa_tmp) {
        if ((ifa_tmp->ifa_addr) && ((ifa_tmp->ifa_addr->sa_family == AF_INET) ||
                                    (ifa_tmp->ifa_addr->sa_family == AF_INET6))) {
            if (ifa_tmp->ifa_addr->sa_family == AF_INET) {
                // create IPv4 string
                struct sockaddr_in *in = (struct sockaddr_in*) ifa_tmp->ifa_addr;
                inet_ntop(AF_INET, &in->sin_addr, addr, sizeof(addr));
            } else { // AF_INET6
                // create IPv6 string
                struct sockaddr_in6 *in6 = (struct sockaddr_in6*) ifa_tmp->ifa_addr;
                inet_ntop(AF_INET6, &in6->sin6_addr, addr, sizeof(addr));
            }
            NSString *name = [NSString stringWithFormat:@"%s",ifa_tmp->ifa_name];
            NSString *address = [NSString stringWithFormat:@"%s",addr];
            
            // en0 wifi    pdp_ip0 蜂窝移动数据
            if (address.length <= 15) { // 排除 fe80::10fb:284:1d52:9ef6
                if ([name isEqualToString:@"en0"]) { // wifi
                    WIFIaddress = address;
                    break;
                }
                if ([name isEqualToString:@"pdp_ip0"]) { // 蜂窝移动数据
                    PDPaddress = address;
                }
            }
            
        }
        ifa_tmp = ifa_tmp->ifa_next;
    }
    freeifaddrs(ifa);
    return WIFIaddress ?: PDPaddress;
}

推荐阅读更多精彩内容