获取手机的ip地址

之前项目中需要用到获取手机的ip地址 在网上搜集的资料 在这里记录一下:

首先需要导入系统头文件:





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

}

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

推荐阅读更多精彩内容