iOS 获取设备信息,mac地址,IP地址,设备名称
#import "DeviceInfoUtil.h" #import "GlobleData.h" #import "sys/utsname.h" #import <AdSupport/AdSupport.h> #import <ifaddrs.h> #import <arpa/inet.h> #import <sys/sockio.h> #import <sys/ioctl.h> #include <sys/socket.h> // Per msqr #include <sys/sysctl.h> #include <net/if.h> #include <net/if_dl.h> #define IOS_CELLULAR @"pdp_ip0" #define IOS_WIFI @"en0" //#define IOS_VPN @"utun0" #define IP_ADDR_IPv4 @"ipv4" #define IP_ADDR_IPv6 @"ipv6" @implementation DeviceInfoUtil // Return the local MAC addy // Courtesy of FreeBSD hackers email list // Accidentally munged during previous update. Fixed thanks to mlamb. - (NSString *) macaddress { int mib[6]; size_t len; char *buf; unsigned char *ptr; struct if_msghdr *ifm; struct sockaddr_dl *sdl; mib[0] = CTL_NET; mib[1] = AF_ROUTE; mib[2] = 0; mib[3] = AF_LINK; mib[4] = NET_RT_IFLIST; if ((mib[5] = if_nametoindex("en0")) == 0) { printf("Error: if_nametoindex error/n"); return NULL; } if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) { printf("Error: sysctl, take 1/n"); return NULL; } if ((buf = malloc(len)) == NULL) { printf("Could not allocate memory. error!/n"); return NULL; } if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) { printf("Error: sysctl, take 2"); return NULL; } ifm = (struct if_msghdr *)buf; sdl = (struct sockaddr_dl *)(ifm + 1); ptr = (unsigned char *)LLADDR(sdl); NSString *outstring = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)]; // NSString *outstring = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)]; NSLog(@"outString:%@", outstring); free(buf); return [outstring uppercaseString]; } //获取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; } - (NSString *)getMacAddress { int mib[6]; size_t len; char *buf; unsigned char *ptr; struct if_msghdr *ifm; struct sockaddr_dl *sdl; mib[0] = CTL_NET; mib[1] = AF_ROUTE; mib[2] = 0; mib[3] = AF_LINK; mib[4] = NET_RT_IFLIST; if ((mib[5] = if_nametoindex("en0")) == 0) { printf("Error: if_nametoindex error/n"); return NULL; } if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) { printf("Error: sysctl, take 1/n"); return NULL; } if ((buf = malloc(len)) == NULL) { printf("Could not allocate memory. error!/n"); return NULL; } if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) { printf("Error: sysctl, take 2"); return NULL; } ifm = (struct if_msghdr *)buf; sdl = (struct sockaddr_dl *)(ifm + 1); ptr = (unsigned char *)LLADDR(sdl); NSString *outstring = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)]; free(buf); return [outstring uppercaseString]; } - (void)getDeviceInfo { // 这个方法后面会列出来 NSString *deviceName = [self getDeviceName]; NSLog(@"设备型号-->%@", deviceName); NSString *iPhoneName = [UIDevice currentDevice].name; NSLog(@"iPhone名称-->%@", iPhoneName); NSString *appVerion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; NSLog(@"app版本号-->%@", appVerion); NSString *appSign = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleSignature"]; NSLog(@"app签名信息-->%@",appSign); CGFloat batteryLevel = [[UIDevice currentDevice] batteryLevel]; NSLog(@"电池电量-->%f", batteryLevel); NSString *localizedModel = [UIDevice currentDevice].localizedModel; NSLog(@"localizedModel-->%@", localizedModel); NSString *systemName = [UIDevice currentDevice].systemName; NSLog(@"当前系统名称-->%@", systemName); NSString *systemVersion = [UIDevice currentDevice].systemVersion; NSLog(@"当前系统版本号-->%@", systemVersion); NSString *uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; NSLog(@"唯一识别码uuid-->%@", uuid); struct utsname systemInfo; uname(&systemInfo); NSString *device_model = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; NSLog(@"device_model-->%@", device_model); // 这个方法后面会单独列出 NSString *macAddress = [self getMacAddress]; NSLog(@"macAddress-->%@", macAddress); // 这个方法后面会单独列出 NSString *deviceIP = [self getDeviceIPAddresses]; NSLog(@"deviceIP-->%@", deviceIP); } - (NSString *)getOSInfo { NSString *versionStr = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey]; return nil; } // 获取设备型号然后手动转化为对应名称 - (NSString *)getDeviceName { // 需要#import "sys/utsname.h" #warning 题主呕心沥血总结!!最全面!亲测!全网独此一份!! struct utsname systemInfo; uname(&systemInfo); NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; if ([deviceString isEqualToString:@"iPhone3,2"]) return @"iPhone 4"; if ([deviceString isEqualToString:@"iPhone3,3"]) return @"iPhone 4"; if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; if ([deviceString isEqualToString:@"iPhone5,1"]) return @"iPhone 5"; if ([deviceString isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)"; if ([deviceString isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)"; if ([deviceString isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus"; if ([deviceString isEqualToString:@"iPhone7,2"]) return @"iPhone 6"; if ([deviceString isEqualToString:@"iPhone8,1"]) return @"iPhone 6s"; if ([deviceString isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus"; if ([deviceString isEqualToString:@"iPhone8,4"]) return @"iPhone SE"; // 日行两款手机型号均为日本独占,可能使用索尼FeliCa支付方案而不是苹果支付 if ([deviceString isEqualToString:@"iPhone9,1"]) return @"国行、日版、港行iPhone 7"; if ([deviceString isEqualToString:@"iPhone9,2"]) return @"港行、国行iPhone 7 Plus"; if ([deviceString isEqualToString:@"iPhone9,3"]) return @"美版、台版iPhone 7"; if ([deviceString isEqualToString:@"iPhone9,4"]) return @"美版、台版iPhone 7 Plus"; if ([deviceString isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G"; if ([deviceString isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G"; if ([deviceString isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G"; if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G"; if ([deviceString isEqualToString:@"iPod5,1"]) return @"iPod Touch (5 Gen)"; if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad"; if ([deviceString isEqualToString:@"iPad1,2"]) return @"iPad 3G"; if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)"; if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2"; if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)"; if ([deviceString isEqualToString:@"iPad2,4"]) return @"iPad 2"; if ([deviceString isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)"; if ([deviceString isEqualToString:@"iPad2,6"]) return @"iPad Mini"; if ([deviceString isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)"; if ([deviceString isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPad3,3"]) return @"iPad 3"; if ([deviceString isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)"; if ([deviceString isEqualToString:@"iPad3,5"]) return @"iPad 4"; if ([deviceString isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)"; if ([deviceString isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)"; if ([deviceString isEqualToString:@"iPad4,4"]) return @"iPad Mini 2 (WiFi)"; if ([deviceString isEqualToString:@"iPad4,5"]) return @"iPad Mini 2 (Cellular)"; if ([deviceString isEqualToString:@"iPad4,6"]) return @"iPad Mini 2"; if ([deviceString isEqualToString:@"iPad4,7"]) return @"iPad Mini 3"; if ([deviceString isEqualToString:@"iPad4,8"]) return @"iPad Mini 3"; if ([deviceString isEqualToString:@"iPad4,9"]) return @"iPad Mini 3"; if ([deviceString isEqualToString:@"iPad5,1"]) return @"iPad Mini 4 (WiFi)"; if ([deviceString isEqualToString:@"iPad5,2"]) return @"iPad Mini 4 (LTE)"; if ([deviceString isEqualToString:@"iPad5,3"]) return @"iPad Air 2"; if ([deviceString isEqualToString:@"iPad5,4"]) return @"iPad Air 2"; if ([deviceString isEqualToString:@"iPad6,3"]) return @"iPad Pro 9.7"; if ([deviceString isEqualToString:@"iPad6,4"]) return @"iPad Pro 9.7"; if ([deviceString isEqualToString:@"iPad6,7"]) return @"iPad Pro 12.9"; if ([deviceString isEqualToString:@"iPad6,8"]) return @"iPad Pro 12.9"; if ([deviceString isEqualToString:@"i386"]) return @"Simulator"; if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator"; return deviceString; } - (NSString *)getDeviceIPAddresses { int sockfd = socket(AF_INET, SOCK_DGRAM, 0); NSMutableArray *ips = [NSMutableArray array]; int BUFFERSIZE = 4096; struct ifconf ifc; char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ], *cptr; struct ifreq *ifr, ifrcopy; ifc.ifc_len = BUFFERSIZE; ifc.ifc_buf = buffer; if (ioctl(sockfd, SIOCGIFCONF, &ifc) >= 0){ for (ptr = buffer; ptr < buffer + ifc.ifc_len; ){ ifr = (struct ifreq *)ptr; int len = sizeof(struct sockaddr); if (ifr->ifr_addr.sa_len > len) { len = ifr->ifr_addr.sa_len; } ptr += sizeof(ifr->ifr_name) + len; if (ifr->ifr_addr.sa_family != AF_INET) continue; if ((cptr = (char *)strchr(ifr->ifr_name, ':')) != NULL) *cptr = 0; if (strncmp(lastname, ifr->ifr_name, IFNAMSIZ) == 0) continue; memcpy(lastname, ifr->ifr_name, IFNAMSIZ); ifrcopy = *ifr; ioctl(sockfd, SIOCGIFFLAGS, &ifrcopy); if ((ifrcopy.ifr_flags & IFF_UP) == 0) continue; NSString *ip = [NSString stringWithFormat:@"%s", inet_ntoa(((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr)]; [ips addObject:ip]; } } close(sockfd); NSString *deviceIP = @""; for (int i=0; i < ips.count; i++) { if (ips.count > 0) { deviceIP = [NSString stringWithFormat:@"%@",ips.lastObject]; } } return deviceIP; } //获取登陆用户id - (NSString *)getUserid { GlobleData *shared = [GlobleData sharedInstance]; NSString *userid = shared.userid; return userid; } //获取登陆用户手机号 - (NSString *)getPhoneNum { NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults]; NSString *uid = [userDefaultes objectForKey:@"usr.loginid"]; return uid; } //获取设备惟一标示符 - (NSString *)getUUID { NSString *uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; NSLog(@"唯一识别码uuid-->%@", uuid); return uuid; } //获取app版本号 - (NSString *)getVersion { NSString *appVerion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; return appVerion; } //获取用户手机号,uuid,手机型号,版本号,签名,平台(ios/android) - (NSDictionary *)getAppInfo { NSMutableDictionary *appInfoDict = [[NSMutableDictionary alloc] init]; NSString *phonenum = [self getPhoneNum]; NSString *uuid = [self getUUID]; NSString *deviceType = [self getDeviceName]; NSString *version = [self getVersion]; NSString *appsign = @"B"; NSString *platform = @"1"; NSString *userid = [self getUserid]; [appInfoDict setObject:userid forKey:WLY_USER_ID]; [appInfoDict setObject:phonenum forKey:WLY_PHONE_NUM]; [appInfoDict setObject:uuid forKey:WLY_UUID]; [appInfoDict setObject:version forKey:WLY_APP_VERSION]; [appInfoDict setObject:deviceType forKey:WLY_PHONE_TYPE]; [appInfoDict setObject:appsign forKey:WLY_APP_SIGN]; [appInfoDict setObject:platform forKey:WLY_OS_TYPE]; NSLog(@"getAppInfo:%@",appInfoDict); return appInfoDict; }
iOS 获取设备信息,mac地址,IP地址,设备名称的更多相关文章
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- js获取本机的网络IP地址
JavaScript是一门脚本语言,是不能操作文件,读取本地信息的,所以想要获取IP,还需要借助后端技术.方法如下: //获取本机的网络ip地址 function jsonpCallback(res) ...
- Java获取请求客户端的真实IP地址
整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...
- HttpServletRequest -- 获取请求主机真实的IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实 ...
- Java Web项目获取客户端和服务器的IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- java 获取的是本地的IP地址
1 public static void main(String[] args) { 2 try { 3 InetAddress address = InetAddress.getLocalHost( ...
- 彻底明白IP地址——IP地址的介绍
彻底明白IP地址——IP地址的介绍 [ 作者:担子 转贴自:赛迪网 点击数:9692 更新时间:2004-12-22 ] IP地址的介绍 1.IP地址的表示方法 IP地址 = ...
- vc++获取系统网卡列表及IP地址信息
#include "stdafx.h" #include <Windows.h> #include <IPHlpApi.h> #include <io ...
- java 获取请求客户端的真实IP地址
转载自:http://leiyongping88.iteye.com/blog/1545930 用request.getRemoteAddr();方法获取的IP地址是:127.0.0.1或192.16 ...
- asp.net和脚本获取当前的URL、IP地址
介绍一下ASP.NET取得当前页面的完整URL 的方放,icech做成了函数,直接用吧! private string GetPath() { string strPath = "http: ...
随机推荐
- 如何删除当前正在使用的SQLLite文件?
从网上搜索一大堆,套路几乎相同,但自己就是不行,怎么也不行,为什么不行呢?不行的话别人肯定不来坑博友了呀.然后放了一会,去拿下午茶回来,再次来看,恍然大悟,What?这么简单. 一开始代码如下: he ...
- When Startup Disk is Full
参考自What To Do When Your Mac's Startup Disk is Almost Full Delet——Empty Trash
- hdu4336 Card Collector
Problem Description In your childhood, do you crazy for collecting the beautiful cards in the snacks ...
- 海外 App 的推送服务,试试 FCM 吧!!!
> **版权声明:** > > **本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有.** > > **每周会统一更新到这里,如果喜欢,可关注公 ...
- Ext.Ajax.request
function create(){ var itstate = $("#myselect").val(); Ext.Ajax.request({ url: '/servlet/A ...
- django下进行项目的部署
-------------------Django下进行对应的服务器配置1.服务器购买 本人在阿里云购买了一个服务器,操作系统为windows server2008/Linux(ubuntu) 2.服 ...
- Visual Studio2017数据库数据比较
一.前言 上一篇文章我们介绍了如何使用VS2017对SSMS数据库进行架构比较.这一篇文章我们将继续介绍如何对SSMS数据库的数据进行比较.数据的比较也是很常见的,比如我们要比较当前版本的数据库相对上 ...
- 汇编指令-str存储指令(4)
str -(Store Register)存储指令 格式:str{条件} 源寄存器,<存储器地址>将源寄存器中数据存到存储器地址中. 实例1: str r1,[r2] ...
- poj 1986LCA离线dfs+并查集
题意,给出边和权值,求出两个点间的最短距离. 用离线算法的时候有个地方不知道怎么处理了.在线的本来想用倍增的,但发现倍增算法貌似需要预处理深度而不是权值,不知道怎么处理.套一个rmq的模板吧,用来处理 ...
- 媒体查询media参数以及其兼容性问题
一.设置meta标签 在使用媒体查询media之前我们需要先设置meta标签,对设备的缩放等参数进行设定. <!--设置缩放和绘制--> <meta name="viewp ...