您的位置:首页 > 理论基础 > 计算机网络

iOS 下获取设备的网络IP

2016-01-14 15:46 281 查看
iOS下创建一个类 调用类(IPHelper)方法得到当前IP

#import <Foundation/Foundation.h>

@interface IPHelper :NSObject

+ (NSString *)getIPAddress:(BOOL)isIPv4;

@end

#import "IPHelper.h"

#include <ifaddrs.h>

#include <arpa/inet.h>

#include <net/if.h>

#define IOS_CELLULAR @"pdp_ip0"

#define IOS_WIFI @"en0"

#define IP_ADDR_IPv4 @"ipv4"

#define IP_ADDR_IPv6 @"ipv6"

@interface IPHelper ()

@property (nonatomic,strong)NSString *IpStr;

@end

@implementation IPHelper

+ (NSString *)getIPAddress:(BOOL)isIPv4
{
NSArray *searchArray = isIPv4 ?

@[IOS_WIFI
@"/"IP_ADDR_IPv4,
IOS_WIFI@"/"
IP_ADDR_IPv6, IOS_CELLULAR@"/"
IP_ADDR_IPv4, IOS_CELLULAR@"/"
IP_ADDR_IPv6 ] :

@[IOS_WIFI
@"/"IP_ADDR_IPv6,
IOS_WIFI@"/"
IP_ADDR_IPv4, IOS_CELLULAR@"/"
IP_ADDR_IPv6, IOS_CELLULAR@"/"
IP_ADDR_IPv4 ] ;

NSDictionary *addresses = [selfgetIPAddresses];

__block
NSString *address;
[searchArrayenumerateObjectsUsingBlock:^(NSString *key,NSUInteger idx,
BOOL *stop)
{
address = addresses[key];
if(address) *stop =
YES;
} ];
return address ? address :
@"0.0.0.0";
}

+ (NSDictionary *)getIPAddresses
{

NSMutableDictionary *addresses = [NSMutableDictionarydictionaryWithCapacity:8];

struct
ifaddrs *interfaces;
if(!getifaddrs(&interfaces)) {

struct
ifaddrs *interface;
for(interface=interfaces; interface; interface=interface->ifa_next) {
if(!(interface->ifa_flags &IFF_UP) || (interface->ifa_flags
&IFF_LOOPBACK)) {

continue;// deeply nested code harder to read
}
const
structsockaddr_in *addr = (conststruct
sockaddr_in*)interface->ifa_addr;
if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6))
{
NSString *name = [NSStringstringWithUTF8String:interface->ifa_name];
char addrBuf[INET6_ADDRSTRLEN];
if(inet_ntop(addr->sin_family, &addr->sin_addr,
addrBuf,sizeof(addrBuf))) {
NSString *key = [NSStringstringWithFormat:@"%@/%@",
name, addr->sin_family ==AF_INET ?
IP_ADDR_IPv4 :IP_ADDR_IPv6];
addresses[key] = [NSStringstringWithUTF8String:addrBuf];
}
}
}

freeifaddrs(interfaces);
}

return [addresses
count] ? addresses :
nil;
}

找个位置调用一下

NSString *str = [IPHelpergetIPAddress:YES];

NSLog(@"%@",str);

下载地址:https://github.com/shanzhiliu/-IP.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: