清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
获取当前设备的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