iOS開(kāi)發(fā)下獲取設(shè)備的網(wǎng)絡(luò)ip地址

一、導(dǎo)入

#import ?<sys/socket.h>

#import ?<sys/sockio.h>

#import ?<sys/ioctl.h>

#import ?<net/if.h>

#import ?<arpa/inet.h>

二、調(diào)用函數(shù)方法

例如: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;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容