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