之前项目中需要用到获取手机的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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)