您的位置:首页 > 移动开发 > IOS开发

iOS开发-获取设备IP

2017-08-24 08:51 302 查看
获取设备IP的具体方法

1.导入头文件

#import<sys/socket.h>
#import<sys/sockio.h>
#import<sys/ioctl.h>
#import<net/if.h>
#import<arpa/inet.h>

2.具体实现方法

- (NSString *)getDeviceIPIpAddresses

{
   

   
int sockfd =socket(AF_INET,SOCK_DGRAM,0);
   

   
//    if (sockfd <</span> 0) return nil;
   

   
NSMutableArray *ips = [NSMutableArrayarray];
   

   

   

   
int BUFFERSIZE =4096;
   

   
structifconf
ifc;
   

   
char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ],
*cptr;
   

   
structifreq
*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 = [NSStringstringWithFormat:@"%s",inet_ntoa(((structsockaddr_in
*)&ifr->ifr_addr)->sin_addr)];
           
            [ipsaddObject:ip];
           
        }
       

    }
   

   
close(sockfd);
   

   

   

   

   

   
NSString *deviceIP =@"";
   

   
for (int
i=0; i < ips.count;
i++)
       

    {
       

       
if (ips.count
>0)
           
        {
           
            deviceIP = [NSStringstringWithFormat:@"%@",ips.lastObject];
           
           
           
        }
       

    }
   
myIP = deviceIP;
   
NSLog(@"deviceIP========%@",deviceIP);
   
return deviceIP;
   

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: