iOS开发时如何获取当前设备的ip地址以及ip参数
来源:互联网 发布:淘宝我的空间 编辑:程序博客网 时间:2024/06/05 20:07
1.首先必不可少的肯定是引头文件
#include <ifaddrs.h>#include <arpa/inet.h>#include <net/if.h>#define IOS_CELLULAR @"pdp_ip0"#define IOS_WIFI @"en0"//#define IOS_VPN @"utun0"#define IP_ADDR_IPv4 @"ipv4"#define IP_ADDR_IPv6 @"ipv6"
可command+点击进入.h查看方法。
2.获取ip地址和参数的方法
在这里有两个方法:
第一个或获取ip地址的,第二个是获取参数的。可根据需要自取所需
//获取设备当前网络IP地址- (NSString *)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 *stop) { address = addresses[key]; if(address) *stop = YES; } ]; return address ? address : @"0.0.0.0";}
//获取所有相关IP信息- (NSDictionary *)getIPAddresses{ NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8]; // retrieve the current interfaces - returns 0 on success struct ifaddrs *interfaces; if(!getifaddrs(&interfaces)) { // Loop through linked list of 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 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 memory freeifaddrs(interfaces); } return [addresses count] ? addresses : nil;}
注:用的swift写的,但是在OC中也可以,将就着用吧
3.调用方法
调用的时请看清参数和返回类型就好,哪里需要可在哪里调用。
4.结果
下面是我调用出来数据:
“awdl0/ipv6” = “fe80::ec8a:90ff:fea4:6208”;
“en0/ipv4” = “192.168.0.107”;
“en0/ipv6” = “fe80::b6:dbd1:c383:273f”;
“lo0/ipv4” = “127.0.0.1”;
“lo0/ipv6” = “fe80::1”;
“utun0/ipv6” = “fe80::bc3d:bce1:faf2:16ec”;
“utun1/ipv6” = “fe80::ac92:61d7:da25:cc6c”;
0 0
- iOS开发时如何获取当前设备的ip地址以及ip参数
- 获取iOS设备当前ip地址
- 获取iOS设备当前ip地址
- 获取iOS设备当前ip地址
- 获取 iOS 设备当前 ip 地址
- IOS 获取当前设备IP地址
- 获取iOS设备当前ip地址
- 获取iOS设备当前ip地址
- 获取iOS设备当前ip地址
- 获取iOS设备当前ip地址
- iOS 得到当前设备的IP地址
- [绍棠] iOS开发:获取设备IP地址
- 获取ios设备的ip地址
- iOS 获取苹果设备的IP地址
- ios 获取设备的ip地址
- 获取iOS当前IP地址
- iOS 获取当前IP地址
- 如何获取Android设备的IP地址
- Qt 调用gio.h
- 关于nginx笔记
- 405. Convert a Number to Hexadecimal
- bootstrap table
- RabbitMQ基础概念详细介绍
- iOS开发时如何获取当前设备的ip地址以及ip参数
- 如何求环的长度,入口点,链表的长度
- opencv提取外部轮廓并在外部加矩形框
- 自定义Dialog设置全屏显示和背景透明
- [C++排序模版]陶陶抢苹果
- Android LCM特殊分辨率时,360camera预览异常分析
- 注意的地方
- 仿微信朋友圈动态的时间显示
- 文章标题