美文网首页iOS技术交流收藏
iOS获取客户端ip地址

iOS获取客户端ip地址

作者: zhanglizzy | 来源:发表于2017-07-10 11:43 被阅读143次

    直接上代码:

    #import "ViewController.h"
    #import <sys/socket.h>
    #import <sys/sockio.h>
    #import <sys/ioctl.h>
    #import <net/if.h>
    #import <arpa/inet.h>
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self getDeviceIPAddresses];
    }
    
    - (NSString *)getDeviceIPAddresses {
        
        int sockfd =socket(AF_INET,SOCK_DGRAM, 0);
        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;
    }
    @end
    
    

    相关文章

      网友评论

        本文标题:iOS获取客户端ip地址

        本文链接:https://www.haomeiwen.com/subject/mguyhxtx.html