iOS 下获取设备的网络IP

 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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值