iOS开发下获取设备的网络ip地址

一、导入

#import  <sys/socket.h>

#import  <sys/sockio.h>

#import  <sys/ioctl.h>

#import  <net/if.h>

#import  <arpa/inet.h>

二、调用函数方法

例如:NSString*deviceIP_01 = [selfgetDeviceIPIpAddresses];

         NLLog(@"deviceIP_01: %@",deviceIP_01);


- (NSString*)getDeviceIPIpAddresses

{

intsockfd =socket(AF_INET,SOCK_DGRAM,0);

// if (sockfd < 0) return nil;

NSMutableArray*ips = [NSMutableArrayarray];

intBUFFERSIZE =4096;

structifconfifc;

charbuffer[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;

intlen =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(inti=0; i < ips.count; i++)

{

if(ips.count>0)

{

deviceIP = [NSStringstringWithFormat:@"%@",ips.lastObject];

}

}

returndeviceIP;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容