日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS获取设备IP

發(fā)布時(shí)間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS获取设备IP 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

獲取iOS設(shè)備IP ?wifi和流量環(huán)境下 ? 在網(wǎng)上找的比較好的獲取ip的代碼

#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"



#pragma mark---------getipadress

+ (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";

}

+ (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;

}

使用的時(shí)候直接調(diào)用 ?: [self?getIPAddress:YES];就行了

總結(jié)

以上是生活随笔為你收集整理的iOS获取设备IP的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。