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
#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
相关文章推荐
- HttpClient之可恨的Expect(C# http 请求卡住的解决办法)
- Android中如何使用HttpURLConnection实现GET POST JSON数据与下载图片
- HttpURLConnection的流式输出的缺陷和解决方法
- HTTPS_SSL配置的步骤以及原理说明
- iOS网络-NSURLConnection简单介绍
- 安装HTTP压力性能测试工具ABSender
- 【HttpClient4.5中文教程】【第二章 :连接管理】2.1---2.3
- Http网络请求库框架的使用
- 【转】iOS学习笔记(八)——iOS网络通信http之NSURLConnection
- 使用tcpdump观察DNS通信过程
- https来临
- 【总结】Http和服务服务器负载均衡
- 基于HttpClient实现网络爬虫~以百度新闻为例
- TCP拥塞控制
- C#使用post提交http请求
- 什么是网络连接状态指示器NCSI
- route命令详解与使用实例
- 扣丁学堂——Apache HTTP Client
- 网络游戏同步法则
- 网络效应,安装基础与微软的阴谋