app中总会用到客户端下载量数据统计,一般都是用的设备的唯一码作为标示,以下是获取mac地址的代码片段,记录备份。


android获取mac地址


1.<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE">

2.privateStringgetLocalMacAddress(){

WifiManagerwifi=(WifiManager)getSystemService(Context.WIFI_SERVICE);

WifiInfoinfo=wifi.getConnectionInfo();

returninfo.getMacAddress();

}


android获取IMEI数据


publicstaticStringgetIMEI(Contextcontext){

return((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();

}


ios获得mac地址


+(NSString*)getLocalMacAddress

{

intmib[6];

size_tlen;

char*buf;

unsignedchar*ptr;

structif_msghdr*ifm;

structsockaddr_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_nametoindexerror/n");

returnNULL;

}

if(sysctl(mib,6,NULL,&len,NULL,0)<0){

//printf("Error:sysctl,take1/n");

returnNULL;

}

if((buf=malloc(len))==NULL){

//printf("Couldnotallocatememory.error!/n");

returnNULL;

}

if(sysctl(mib,6,buf,&len,NULL,0)<0){

//printf("Error:sysctl,take2");

returnNULL;

}

ifm=(structif_msghdr*)buf;

sdl=(structsockaddr_dl*)(ifm+1);

ptr=(unsignedchar*)LLADDR(sdl);

//NSString*outstring=[NSStringstringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5)];

NSString*outstring=[NSStringstringWithFormat:@"%02x%02x%02x%02x%02x%02x",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5)];

free(buf);

return[outstringuppercaseString];

}


ios获取时候所需包含的头文件


#include<sys/socket.h>


#include<sys/sysctl.h>
#include<net/if.h>
#include <net/if_dl.h>

- (NSString *) macaddress{

int mib[6];
size_t len;
char *buf;
unsignedchar *ptr;
structif_msghdr *ifm;
structsockaddr_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 errorn");
return NULL;
}

if(sysctl(mib, 6, NULL, &len, NULL, 0)< 0) {
printf("Error: sysctl, take 1n");
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");
free(buf);
return NULL;
}

ifm =(struct if_msghdr *)buf;
sdl =(struct sockaddr_dl *)(ifm + 1);
ptr =(unsigned char *)LLADDR(sdl);
NSString*outstring = [NSString stringWithFormat:@"X:X:X:X:X:X",
*ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
free(buf);

returnoutstring;
}
- (NSString *)getMacAddress
{
int mgmtInfoBase[6];
char *msgBuffer = NULL;
size_t length;
unsignedchar macAddress[6];
structif_msghdr *interfaceMsgStruct;
structsockaddr_dl *socketStruct;
NSString *errorFlag = NULL;

// Setup themanagement Information Base (mib)
mgmtInfoBase[0] =CTL_NET; // Request network subsystem
mgmtInfoBase[1] =AF_ROUTE; // Routing table info
mgmtInfoBase[2] =0;
mgmtInfoBase[3] =AF_LINK; // Request link layer information
mgmtInfoBase[4] = NET_RT_IFLIST; // Request allconfigured interfaces

// With allconfigured interfaces requested, get handleindex
if((mgmtInfoBase[5] = if_nametoindex("en0")) ==0)
errorFlag = @"if_nametoindex failure";
else
{
// Get the size of the data available (store inlen)
if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0)< 0)
errorFlag = @"sysctl mgmtInfoBase failure";
else
{
// Alloc memory based on above call
if ((msgBuffer = malloc(length)) == NULL)
errorFlag = @"buffer allocation failure";
else
{
// Get system information, store in buffer
if (sysctl(mgmtInfoBase, 6, msgBuffer, &length,NULL, 0) < 0)
errorFlag = @"sysctl msgBuffer failure";
}
}
}

// Beforgoing any further...
if(errorFlag != NULL)
{
NSLog(@"Error: %@", errorFlag);
return errorFlag;
}

// Mapmsgbuffer to interface message structure
interfaceMsgStruct = (struct if_msghdr *)msgBuffer;

// Map tolink-level socket structure
socketStruct= (struct sockaddr_dl *) (interfaceMsgStruct +1);

// Copy linklayer address data in socket structure to anarray
memcpy(&macAddress,socketStruct->sdl_data +socketStruct->sdl_nlen, 6);

// Read fromchar array into a string object, into traditional Mac addressformat
NSString*macAddressString = [NSStringstringWithFormat:@"X:X:X:X:X:X",
macAddress[0], macAddress[1],macAddress[2],
macAddress[3], macAddress[4],macAddress[5]];
NSLog(@"MacAddress: %@", macAddressString);

// Releasethe buffer memory
free(msgBuffer);

returnmacAddressString;
}

在这儿有两个概念UUID与UDID.

UUID是Universally Unique Identifier 通用唯一标识码

UDID是Unique Device Identifier 设备唯一标识码

UDID只是UUID的一个子集而已。

  1. -(NSString*)uuid
  2. {
  3. CFUUIDRefpuuid=CFUUIDCreate(nil);
  4. CFStringRefuuidString=CFUUIDCreateString(nil,puuid);
  5. NSString*result=(NSString*)CFStringCreateCopy(NULL,uuidString);
  6. CFRelease(puuid);
  7. CFRelease(uuidString);
  8. return[resultautorelease];
  9. }

- (NSString *)uuid
{
CFUUIDReftheUUID = CFUUIDCreate(NULL);
CFStringRefstring = CFUUIDCreateString(NULL, theUUID);
NSMakeCollectable(theUUID);
return(NSString *)string;
}



更多相关文章

  1. android系统属性获取及设置
  2. Android获取SD卡中选中图片的路径(URL)
  3. 网络图片浏览器
  4. Mac配置Adb环境变量
  5. Android(安卓)Path
  6. Android(安卓)5.1 启动有线网卡并为其分配静态IP地址
  7. Android(安卓)实现ListView异步加载图片
  8. SharePreferences
  9. 开发中最常用的GitHub上 优秀的 Android(安卓)开源项目整理(精品)

随机推荐

  1. 在windows主机安装mysql(安装包和安装步骤
  2. mysql数据库笔记
  3. linux中mysql如何创建存储过程
  4. Nutz框架学习之一连接sqlserver数据库进
  5. win8安装sql server2005方法
  6. sqoop简单操作-从mysql导入导出数据
  7. vs2012利用MFC开发基于对话框的小软件指
  8. 访问SqlServer时需要先登录服务器windows
  9. SQL问题 ,要连接两个无直接关联表
  10. 1)如何用语句来查看一个表内是否建了索引