iOS获取当前设备的IP地址和MAC地址

wdfd的头像 wdfd 20 2015-03-27 20:32 0

 基本信息

× 1   

浏览数: 8760

分享时间: 3 年 前

获取当前设备的IP地址和MAC地址:

1.导入相关库文件。 

2.调用方法getIPAddress 调用方法getMacAddress。

    //  
    //  GetForIPMac.m  
    //  Eric  
    //  
    //  Created by Eric on 15-3-24.  
    //  Copyright (c) 2015年 yons. All rights reserved.  
    //  
      
    #import "GetForIPMac.h"  
      
    //Get IP 需要导入的库文件  
      
    #import <ifaddrs.h>  
      
    #import <arpa/inet.h>  
      
      
    //Get MAC 需要导入的库文件  
      
    #include <sys/socket.h> // Per msqr  
      
    #include <sys/sysctl.h>  
      
    #include <net/if.h>  
      
    #include <net/if_dl.h>  
      
      
    @interface GetForIPMac ()  
      
    @end  
      
    @implementation GetForIPMac  
      
    - (void)viewDidLoad {  
          
        [super viewDidLoad];  
        // Do any additional setup after loading the view.  
          
        //获取当前设备的IP和MAC地址  
          
        NSString *ip_str = [self getIPAddress];  
          
        NSLog(@" Get IP Address %@",ip_str);//192.168.191.5  
          
        NSString *mac_str = [self getMacAddress];  
          
        NSLog(@"Get MAC Address %@",mac_str); //B4:F0:AB:1C:05:93  
    }  
      
    #pragma mark IP  
    /** 
     *  @Author, 15-03-24 09:07:06 
     * 
     *  Get IP Address 
     * 
     *  #import <ifaddrs.h> 
     * 
     *  #import <arpa/inet.h> 
     * 
     *  @return 
     */  
      
    - (NSString *)getIPAddress {  
          
        NSString *address = @"error";  
          
        struct ifaddrs *interfaces = NULL;  
          
        struct ifaddrs *temp_addr = NULL;  
          
        int success = 0;  
          
        // retrieve the current interfaces - returns 0 on success  
          
        success = getifaddrs(&interfaces);  
          
        if (success == 0) {  
              
            // Loop through linked list of interfaces  
              
            temp_addr = interfaces;  
              
            while(temp_addr != NULL) {  
                  
                if(temp_addr->ifa_addr->sa_family == AF_INET) {  
                      
                    // Check if interface is en0 which is the wifi connection on the iPhone  
                      
                    if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {  
                          
                        // Get NSString from C String  
                          
                        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];  
                          
                    }  
                      
                }  
                  
                temp_addr = temp_addr->ifa_next;  
            }  
              
        }  
          
        // Free memory  
          
        freeifaddrs(interfaces);  
          
        return address;  
    }  
      
    #pragma mark MAC  
      
    /** 
      
     *  @Author , 15-03-24 09:07:06 
      
     * 
      
     *   #include <sys/socket.h> // Per msqr 
      
     *   #include <sys/sysctl.h> 
      
     *   #include <net/if.h> 
      
     *   #include <net/if_dl.h> 
      
     * 
      
     *   Return the local MAC addy 
      
     *   Courtesy of FreeBSD hackers email list 
      
     *   Accidentally munged during previous update. Fixed thanks to mlamb. 
      
     * 
      
     *  @return 
      
     */  
      
    - (NSString *) getMacAddress  
    {  
        int mib[6];  
          
        size_t len;  
          
        charchar *buf;  
          
        unsigned charchar *ptr;  
          
        struct if_msghdr *ifm;  
          
        struct sockaddr_dl *sdl;  
          
          
        mib[0] = CTL_NET;  
          
        mib[1] = AF_ROUTE;  
          
        mib[2] = 0;  
          
        mib[3] = AF_LINK;  
          
        mib[4] = NET_RT_IFLIST;  
          
          
        if ((mib[5] = if_nametoindex("en0")) == 0) {  
              
            printf("Error: if_nametoindex error/n");  
              
            return NULL;  
              
        }  
          
          
        if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {  
              
            printf("Error: sysctl, take 1/n");  
              
            return NULL;  
              
        }  
          
        if ((buf = malloc(len)) == NULL) {  
              
            printf("Could not allocate memory. error!/n");  
              
            return NULL;  
              
        }  
          
          
          
        if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {  
              
            printf("Error: sysctl, take 2");  
              
            return NULL;  
              
        }  
          
          
        ifm = (struct if_msghdr *)buf;  
          
        sdl = (struct sockaddr_dl *)(ifm + 1);  
          
        ptr = (unsigned charchar *)LLADDR(sdl);  
          
        NSString *outstring = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];  
          
        free(buf);  
          
        return [outstring uppercaseString];  
          
    }  
      
      
    - (void)didReceiveMemoryWarning {  
          
        [super didReceiveMemoryWarning];  
        // Dispose of any resources that can be recreated.  
          
          
    }  
      
    @end  

还没有人评论,赶快来抢沙发吧!