iOS获取手机的IP地址

来源:互联网 发布:淘宝新店如何刷单 编辑:程序博客网 时间:2024/06/06 09:03

1.添加这五个库(在联网的情况下)

#import <sys/socket.h>#import <sys/sockio.h>#import <sys/ioctl.h>#import <net/if.h>#import <arpa/inet.h>

2.写一个方法

- (NSString *)getDeviceIPIpAddresses{    int sockfd =socket(AF_INET,SOCK_DGRAM, 0);//    if (sockfd <</span> 0) return nil;    NSMutableArray *ips = [NSMutableArrayarray];    int BUFFERSIZE =4096;    structifconf ifc;    char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ], *cptr;    structifreq *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 = (structifreq *)ptr;            int len =sizeof(structsockaddr);            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(((structsockaddr_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 = [NSStringstringWithFormat:@"%@",ips.lastObject];            }    }    NSLog(@"deviceIP========%@",deviceIP);    return deviceIP;}

stackoverflow上找到一种方法,能实时获取IP

#include <ifaddrs.h>#include <arpa/inet.h>#include <net/if.h>#define IOS_CELLULAR    @"pdp_ip0"#define IOS_WIFI        @"en0"//#define IOS_VPN       @"utun0"#define IP_ADDR_IPv4    @"ipv4"#define IP_ADDR_IPv6    @"ipv6"- (NSString *)getIPAddress:(BOOL)preferIPv4{    NSArray *searchArray = preferIPv4 ?                            @[ /*IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6,*/ IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :                            @[ /*IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4,*/ IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;    NSDictionary *addresses = [self getIPAddresses];    NSLog(@"addresses: %@", addresses);    __block NSString *address;    [searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)        {            address = addresses[key];            if(address) *stop = YES;        } ];    return address ? address : @"0.0.0.0";}- (NSDictionary *)getIPAddresses{    NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];    // retrieve the current interfaces - returns 0 on success    struct ifaddrs *interfaces;    if(!getifaddrs(&interfaces)) {        // Loop through linked list of interfaces        struct ifaddrs *interface;        for(interface=interfaces; interface; interface=interface->ifa_next) {            if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {                continue; // deeply nested code harder to read            }            const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;            char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];            if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {                NSString *name = [NSString stringWithUTF8String:interface->ifa_name];                NSString *type;                if(addr->sin_family == AF_INET) {                    if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {                        type = IP_ADDR_IPv4;                    }                } else {                    const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;                    if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {                        type = IP_ADDR_IPv6;                    }                }                if(type) {                    NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];                    addresses[key] = [NSString stringWithUTF8String:addrBuf];                }            }        }        // Free memory        freeifaddrs(interfaces);    }    return [addresses count] ? addresses : nil;}

第三种方法

//获取公网IP非局域网IP
<span class="hljs-built_in" style="color: rgb(38, 139, 210); font-size: 12px;">直接访问此网址 NSString</span><span style="font-size: 12px; background-color: transparent;"> *url = </span><span class="hljs-string" style="color: rgb(42, 161, 152); font-size: 12px;">@"http://ip.taobao.com/service/getIpInfo.php?ip=myip"</span><span style="font-size: 12px; background-color: transparent;">;</span>
<span style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px; background-color: transparent;">网址返回的JSON数据段</span><pre class="hljs objectivec" name="code" style="white-space: pre-wrap; word-wrap: normal; padding: 9.5px; background: rgb(253, 246, 227); margin-top: 0px; margin-bottom: 20px; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; line-height: 20px; word-break: break-all; overflow: auto;"><code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 12px; border: none; background-color: transparent;"><span style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;">    {</span><span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold; font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;">"code"</span><span style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;">:</span><span class="json_number" style="color: rgb(37, 170, 226); font-weight: bold; font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;">0</span><span style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;">,</span><br style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;" /><span style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;">    </span><span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold; font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;">"data"</span><span style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;">:</span><span style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;"><span class="fa fa-minus-square-o"></span>{        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"country"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"中国"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"country_id"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"CN"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"area"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"华东"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"area_id"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"300000"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"region"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"上海市"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"region_id"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"310000"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"city"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"上海市"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"city_id"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"310100"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"county"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"浦东"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"county_id"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"334115"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"isp"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"电信"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"isp_id"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"100227"</span>,        <span class="json_key" style="color: rgb(146, 39, 143); font-weight: bold;">"ip"</span>:<span class="json_string" style="color: rgb(58, 181, 74); font-weight: bold;">"126.231.115.34"</span>    }</span><br style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;" /><span style="color: rgb(85, 85, 85); font-family: Menlo, Monaco, Consolas, "Helvetica Neue", Helvetica, "Courier New", 微软雅黑, monospace, Arial, sans-serif, 黑体; font-size: 14px;">}</span></code>
<pre class="hljs objectivec" name="code" style="white-space: pre-wrap; word-wrap: normal; padding: 9.5px; background: rgb(253, 246, 227); margin-top: 0px; margin-bottom: 20px; line-height: 20px; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; word-break: break-all; overflow: auto;"><p class="p1" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s1">- (</span><span class="s2">void</span><span class="s1">)urlRequestOperation{</span></p><p class="p2" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s3">    </span><span class="s1">dispatch_async</span><span class="s3">(</span><span class="s1">dispatch_get_global_queue</span><span class="s3">(</span><span class="s4">DISPATCH_QUEUE_PRIORITY_BACKGROUND</span><span class="s3">, </span><span class="s5">0</span><span class="s3">), ^{</span></p><p class="p3" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s3">        </span><span class="s6">NSString</span><span class="s3"> *URLTmp1 = </span><span class="s1">@"http://1212.ip138.com/ic.asp"</span><span class="s3">;</span></p><p class="p2" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s3">        </span><span class="s6">NSString</span><span class="s3"> *URLTmp = [URLTmp1 </span><span class="s1">stringByAddingPercentEscapesUsingEncoding</span><span class="s3">:</span><span class="s1">NSUTF8StringEncoding</span><span class="s3">];</span></p><p class="p1" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s1">        </span><span class="s6">NSData</span><span class="s1"> * resData = [</span><span class="s6">NSData</span><span class="s1"> </span><span class="s7">dataWithContentsOfURL</span><span class="s1">:[</span><span class="s6">NSURL</span><span class="s1"> </span><span class="s7">URLWithString</span><span class="s1">:URLTmp]];</span></p><p class="p2" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s3">        </span><span class="s1">dispatch_async</span><span class="s3">(</span><span class="s1">dispatch_get_main_queue</span><span class="s3">(), ^{</span></p><p class="p1" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s1">            </span><span class="s2">if</span><span class="s1"> (resData) {</span></p><p class="p1" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s1">                </span><span class="s8">//</span><span class="s9">系统自带</span><span class="s8">JSON</span><span class="s9">解析</span></p><p class="p2" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s3">                </span><span class="s10">NSStringEncoding</span><span class="s3"> gbkEncoding = </span><span class="s1">CFStringConvertEncodingToNSStringEncoding</span><span class="s3">(</span><span class="s1">kCFStringEncodingGB_18030_2000</span><span class="s3">);</span></p><p class="p2" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s3">//<span style="font-family: STHeiti; font-size: 14px;">您的IP是:[122.222.122.22] 来自:上海市某某区 某某运营商</span></span></p><p class="p1" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s1">                </span><span class="s6">NSString</span><span class="s1"> *str3 = [[</span><span class="s6">NSString</span><span class="s1"> </span><span class="s7">alloc</span><span class="s1">] </span><span class="s7">initWithData</span><span class="s1">:resData </span><span class="s7">encoding</span><span class="s1">:gbkEncoding];</span></p><p class="p1" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s1">   }</span></p><p class="p1" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s1">        });</span></p><p class="p1" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s1">    });</span></p><p class="p1" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"><span class="s1">}</span></p>

<pre class="hljs objectivec" name="code" style="white-space: pre-wrap; word-wrap: normal; padding: 9.5px; background: rgb(253, 246, 227); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; margin-top: 0px; margin-bottom: 20px; line-height: 20px; word-break: break-all; overflow: auto;"><code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-comment" style="color: rgb(147, 161, 161);">//获取局域网IP地址</span>- (<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *)getIpAddresses{    <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *address = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"error"</span>;    <span class="hljs-keyword" style="color: rgb(133, 153, 0);">struct</span> ifaddrs *interfaces = <span class="hljs-literal" style="color: rgb(0, 102, 102);">NULL</span>;    <span class="hljs-keyword" style="color: rgb(133, 153, 0);">struct</span> ifaddrs *temp_addr = <span class="hljs-literal" style="color: rgb(0, 102, 102);">NULL</span>;    <span class="hljs-keyword" style="color: rgb(133, 153, 0);">int</span> success = <span class="hljs-number" style="color: rgb(42, 161, 152);">0</span>;    <span class="hljs-comment" style="color: rgb(147, 161, 161);">// retrieve the current interfaces - returns 0 on success</span>    success = getifaddrs(&interfaces);    <span class="hljs-keyword" style="color: rgb(133, 153, 0);">if</span> (success == <span class="hljs-number" style="color: rgb(42, 161, 152);">0</span>)    {        <span class="hljs-comment" style="color: rgb(147, 161, 161);">// Loop through linked list of interfaces</span>        temp_addr = interfaces;        <span class="hljs-keyword" style="color: rgb(133, 153, 0);">while</span>(temp_addr != <span class="hljs-literal" style="color: rgb(0, 102, 102);">NULL</span>)        {            <span class="hljs-keyword" style="color: rgb(133, 153, 0);">if</span>(temp_addr->ifa_addr->sa_family == AF_INET)            {                <span class="hljs-comment" style="color: rgb(147, 161, 161);">// Check if interface is en0 which is the wifi connection on the iPhone</span>                <span class="hljs-keyword" style="color: rgb(133, 153, 0);">if</span>([[<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> stringWithUTF8String:temp_addr->ifa_name] isEqualToString:<span class="hljs-string" style="color: rgb(42, 161, 152);">@"en0"</span>])                {                    <span class="hljs-comment" style="color: rgb(147, 161, 161);">// Get NSString from C String</span>                    address = [<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> stringWithUTF8String:inet_ntoa(((<span class="hljs-keyword" style="color: rgb(133, 153, 0);">struct</span> sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];                }            }            temp_addr = temp_addr->ifa_next;        }    }    <span class="hljs-comment" style="color: rgb(147, 161, 161);">// Free memory</span>    freeifaddrs(interfaces);    <span class="hljs-keyword" style="color: rgb(133, 153, 0);">return</span> address;}</code>

0 0