iOS开发-获取设备IP
Posted sunshine-zzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发-获取设备IP相关的知识,希望对你有一定的参考价值。
获取设备IP的具体方法
1.导入头文件
#import <sys/socket.h> #import <sys/sockio.h> #import <sys/ioctl.h> #import <net/if.h> #import <arpa/inet.h>2.具体实现方法
- ( NSString *)getDeviceIPIpAddressesint sockfd = socket ( AF_INET , SOCK_DGRAM , 0 ); // if (sockfd <</span> 0) return nil; 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 ]; myIP = deviceIP; NSLog ( @"deviceIP========%@" ,deviceIP); return deviceIP;
以上是关于iOS开发-获取设备IP的主要内容,如果未能解决你的问题,请参考以下文章