//导入头文件
#include <ifaddrs.h>
#include <arpa/inet.h>
#include <net/if.h>
#import <sys/socket.h>
#import <sys/sockio.h>
#import <sys/ioctl.h>
#import <arpa/inet.h>#define IOS_CELLULAR    @"pdp_ip0"
#define IOS_WIFI        @"en0"
#define IOS_VPN         @"utun0"
#define IP_ADDR_IPv4    @"ipv4"
#define IP_ADDR_IPv6    @"ipv6"
+(NSString *)df_getIPAddress:(BOOL)preferIPv4;
+(NSString *)df_getIPAddress:(BOOL)preferIPv4
{NSArray *searchArray = preferIPv4 ?@[ IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :@[ IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;NSDictionary *addresses = [self getIPAddresses];NSLog(@"addresses: %@", addresses);__block NSString *address;[searchArray enumerateObjectsUsingBlock:^(NSString  * key, NSUInteger idx, BOOL * _Nonnull stop){address = addresses[key];//筛选出IP地址格式if([self isValidatIP:address]) *stop = YES;} ];return address ? address : @"0.0.0.0";
}
+ (BOOL)isValidatIP:(NSString *)ipAddress {if (ipAddress.length == 0) {return NO;}NSString *urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.""([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.""([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.""([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";NSError *error;NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options:0 error:&error];if (regex != nil) {NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options:0 range:NSMakeRange(0, [ipAddress length])];if (firstMatch) {NSRange resultRange = [firstMatch rangeAtIndex:0];NSString *result=[ipAddress substringWithRange:resultRange];//输出结果NSLog(@"%@",result);return YES;}}return NO;
}
+ (NSDictionary *)getIPAddresses
{NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];// retrieve the current interfaces - returns 0 on successstruct ifaddrs *interfaces;if(!getifaddrs(&interfaces)) {// Loop through linked list of interfacesstruct 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 struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {NSString *name = [NSString stringWithUTF8String:interface->ifa_name];NSString *type;if(addr->sin_family == AF_INET) {if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {type = IP_ADDR_IPv4;}} else {const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {type = IP_ADDR_IPv6;}}if(type) {NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];addresses[key] = [NSString stringWithUTF8String:addrBuf];}}}// Free memoryfreeifaddrs(interfaces);}return [addresses count] ? addresses : nil;
}

获取当前手机的IP地址相关推荐

  1. 通过adb命令获取Android手机的IP地址

    要获取Android手机的IP地址,必须先保证你的Android手机已经连接到无线网络(此处的无线网络包括WiFi和WAPI,不包括3G或2G的移动网络). 先执行命令"adb shell ...

  2. 获取android手机当前ip地址

    public class NetWorkUtils {/*** 检查网络是否可用* * @param paramContext* @return*/public static boolean chec ...

  3. iOS 获取手机的ip地址 并传给后台(三步搞定)

    第一步 创建一个NSObject 文件 .h 文件 写 #import <Foundation/Foundation.h> @interface NSObject (GetIP) + (N ...

  4. php获取手机ip地址,获取手机的ip地址

    获取手机的ip地址 2014年10月14号 发表于:评论 () 热度:1287 随着手机功能的不断完善,手机网站的开发日趋简单,所以很多人都趋于用html不限定宽度的方式来写电脑网页.同样的,手机浏览 ...

  5. Mac开发之获取设备名字、IP地址和MAC地址

    在项目中遇到需要获取设备名字.IP地址和MAC地址信息,之前用NSHost,结果发现不是很稳定,就放弃了,另外想出了几个方法,下面记录一下: ViewController.h // // ViewCo ...

  6. 手机服务器怎么修改密码,手机服务器ip地址修改密码

    手机服务器ip地址修改密码 内容精选 换一换 云速建站企业版有独立的IP,其他版本没有,其他版本的数据分布在多台服务器上.登录云速建站控制台,在待查看帐号和密码的站点所在行,选择"更多 &g ...

  7. app怎么修改服务器IP地址,怎么修改手机服务器ip地址

    怎么修改手机服务器ip地址 内容精选 换一换 如果私钥文件丢失了,可以为服务器替换新的密钥对,并使用新的私钥文件连接云手机.以下为替换服务器密钥对的操作指导,请提前在云服务器控制台创建密钥对,并将密钥 ...

  8. 获取iPhone本机IP地址新方法

    最近在项目中要获取iphone手机本机的ip地址.在我一博客中也写到方法了.但是那种方法只适合于非3G网络.今天网上找了下一个不同以前的获取方式.特记录下.先感谢作者. 转至 http://mobil ...

  9. ipv4地址怎么设置 手机_如何设置手机的IP地址?方法很简单赶快试试吧!

    在公司.家里连接WIFI热点时移动设备多了,经常会出现无法连接的现象.出现这种现象的原因有很多,其中一种就是"IP冲突".今天小编就给大家演示一下,在手机上如何设置"静态 ...

最新文章

  1. 【Qt】Q_PROPERTY():属性系统
  2. Foreach与Random
  3. 怎么用pycharm更新python_利用PyCharm操作Github(仓库新建、更新,代码回滚)
  4. c语言查找字符串au,几个C语言词汇不懂,望老鸟们相助(俺是新手哦)
  5. 让LwIP拥有PING其他设备的能力
  6. 如果再出恶性安全事件,滴滴会有人被追究刑责吗?
  7. Python中的中文编码声明注释
  8. 如何开发python sdk调用数据_Python SDK调用示例
  9. python 3中 的subprocess
  10. MTK 驱动开发(36)---低功耗基础知识
  11. HTTP网页错误代码大全带解释
  12. Java类加载机制与反射 jvm学习
  13. 电脑用户计算机名文件夹,win7更改计算机用户名_win7更改用户名文件夹
  14. 电脑耗电,电脑耗电量大吗?
  15. Xposed框架Xposed安装器|Xposed for Android 5.0/5.1/6.0|详细安装教程
  16. hihocoder#1369 : 网络流算法的一些小结
  17. 天玑9000和苹果a15哪个好
  18. Java、JSP服装销售管理系统
  19. 恭喜EDG 夺得冠军
  20. linux 笔记本电脑_购买支持Linux的笔记本电脑

热门文章

  1. HUAWEI+Eudemon1000E+防火墙+典型配置案例
  2. 接受面试前,你还需要做什么准备?
  3. 好未来第一届PHP开源技术大会资料分享
  4. 一加X 手机变砖过程
  5. 星载InSAR技术在地质灾害监测领域的应用
  6. InSAR技术监测大坝形变1——InSAR技术产业的研究背景
  7. 软银退出自动驾驶公司Cruise:通用汽车21亿美元接盘
  8. 游戏音乐及音效的使用(附Demo)
  9. VS2008中的 fatal error C1902: 程序数据库管理器不匹配
  10. 兆易创新GD32 (四)FreeRTOS 移植 与 CMSIS OS2