获取手机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];

}

}

return deviceIP;

}

//获取手机ip地址,外网

- (NSString *) whatismyipdotcom

{

NSError *error;

NSURL *ipURL = [NSURL URLWithString:@"http://ifconfig.me/ip"];

NSString *ip = [NSString stringWithContentsOfURL:ipURL encoding:NSUTF8StringEncoding error:&error];

return ip;

}


话说获取内网地址有什么用。。。

话说这种方式获取外网地址靠谱么。。。

你可能感兴趣的:(获取手机IP地址)