获取手机的ip地址

获取手机的ip地址,第1张

之前项目中需要用到获取手机的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;

ifcifc_len = BUFFERSIZE;

ifcifc_buf = buffer;

if (ioctl(sockfd,SIOCGIFCONF, &ifc) >= 0){

for (ptr = buffer; ptr < buffer + ifcifc_len; ){

ifr = (struct ifreq )ptr;

int len =sizeof(struct sockaddr);

if (ifr->ifr_addrsa_len > len) {

len = ifr->ifr_addrsa_len;

}

ptr += sizeof(ifr->ifr_name) + len;

if (ifr->ifr_addrsa_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 ((ifrcopyifr_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 < ipscount; i++)

{

if (ipscount >0)

{

deviceIP = [NSString stringWithFormat:@"%@",ipslastObject];

}

}

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

return deviceIP;

}

- (void)viewDidLoad {

[super viewDidLoad];

[self getDeviceIPIpAddresses];

}

能,能查到你连接路由器IP,因你的拓扑是手机---WIFI-----无线路由器-----Internet

明白了吧,最终的数据是通过有线发出去的,也就是你路由器WAN口的公网IP。

看你连的是哪里的网,如果是WIFI,WIFI得到的WAN口IP,也不一定是公网IP,有的是上级代理商分配的IP,就等于一个公网IP是给好几户人家使用的,一般家里动态的IP,不会是给你一个人用的。

用移动数据流量的话没有公网IP的说法

真正的公网IP是企业申请的固定IP

以上就是关于获取手机的ip地址全部的内容,包括:获取手机的ip地址、手机用wifi上网,能查到IP吗、手机用SIM卡上网时获取的ip是公网ip还是内网ip等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9497177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存