iOS获取当前设备的IP地址和MAC地址详解手机开发

获取当前设备的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  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5185.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论