獲取手機的ip地址

之前項目中需要用到獲取手機的ip地址 在網(wǎng)上搜集的資料 在這里記錄一下:

首先需要導入系統(tǒng)頭文件:





- (NSString *)getDeviceIPIpAddresses

{

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];

}

}

NSLog(@"deviceIP========%@",deviceIP);

return deviceIP;

}


- (void)viewDidLoad {

[super viewDidLoad];

[self getDeviceIPIpAddresses];

}

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容