获取内网IP地址
//获取ip地址+(NSString *)getIPaddress{ //获取内网IP NSString *address = @"error"; struct ifaddrs * ifaddress = NULL; struct ifaddrs * temp_address = NULL; int success = 0; success = getifaddrs(&ifaddress); if(success == 0) { temp_address = ifaddress; while(temp_address != NULL) { if(temp_address->ifa_addr->sa_family == AF_INET) { if([[NSString stringWithUTF8String:temp_address->ifa_name] isEqualToString:@"en0"]) { address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_address->ifa_addr)->sin_addr)]; } } temp_address = temp_address->ifa_next; } } NSLog(@"获取到的IP地址为:%@",ip); return ip;}
获取外网IP地址
//获取外网 ip地址+(NSString *)getIPaddress{ NSError *error; NSURL *ipURL = [NSURL URLWithString:@"http://pv.sohu.com/cityjson?ie=utf-8"]; NSMutableString *ip = [NSMutableString stringWithContentsOfURL:ipURL encoding:NSUTF8StringEncoding error:&error]; //判断返回字符串是否为所需数据 if ([ip hasPrefix:@"var returnCitySN = "]) { //对字符串进行解决,而后进行json解析 //删除字符串多余字符串 NSRange range = NSMakeRange(0, 19); [ip deleteCharactersInRange:range]; NSString * nowIp =[ip substringToIndex:ip.length-1]; //将字符串转换成二进制进行Json解析 NSData * data = [nowIp dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; DLog(@"%@",dict); return dict[@"cip"] ? dict[@"cip"] : @""; } return @"";}
备注:
也有网友举荐这两种,亲测不靠谱,有时会特地慢或获取不到IP
//获取外网 ip地址+(NSString *)getIPaddress{ //办法一:【不靠谱】 NSError *error; NSURL *ipURL = [NSURL URLWithString:@"http://ifconfig.me/ip"]; NSString *ip = [NSString stringWithContentsOfURL:ipURL encoding:NSUTF8StringEncoding error:&error]; //办法二:【不靠谱办法二】 /* http://ipof.in/json http://ipof.in/xml http://ipof.in/txt If you want HTTPS you can use the same URLs with https prefix. The advantage being that even if you are on a Wifi you will get the public address. */ NSError *error; NSURL *ipURL = [NSURL URLWithString:@"http://ipof.in/txt"]; NSString *ip = [NSString stringWithContentsOfURL:ipURL encoding:NSUTF8StringEncoding error:&error]; NSLog(@"获取到的IP地址为:%@",ip); return ip;}