iOS 获取本机的IP地址

直接获取本地所访问网络的IP地址,话不多说,直接上代码


- (NSString*)getDeviceIPAddress

{
    
    int sockfd =socket(AF_INET,SOCK_DGRAM,0);
    
    // if (sockfd < 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];
            
        }
        
    }
    
    return deviceIP;
    
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容