iOS 获取手机ip地址

需要在联网的情况下才能获取到

首先需要导入头文件


#import 
#import 
#import 
#import 
#import 

第一种方法 亲测有用

- (NSString *)getDeviceIPIpAddresses{   
 int sockfd = socket(AF_INET, SOCK_DGRAM, 0); 
   if (sockfd <>0){   
     returning;   
 } 
   NSMutableArray *ips = [NSMutableArrayarray];   
 int BUFFERSIZE = 4096; 
   strut 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 = (structifreq *)ptr;     
       int len = sizeof(structsockaddr); 
     
      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(((structsockaddr_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 = [NSStringstringWithFormat:@"%@",ips.lastObject];        }   
 } 
   return deviceIP;
}


你可能感兴趣的:(iOS 获取手机ip地址)