文档章节

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

sfandy
 sfandy
发布于 2014/11/25 13:14
字数 421
阅读 168
收藏 0

//

//  ViewController.m

//  CKGet_mac_ip

//

//  Created by CK on 14-11-25.

//  Copyright (c) 2014 _CK_SL. All rights reserved.

//


#import "ViewController.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 ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad

{

    [super viewDidLoad];

    

    //获取当前设备的ipmac地址

    

    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

}


/**

 *  @Author, 14-11-25 10:11:35

 *

 *  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 , 14-11-25 10:11:11

 *

 *   #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;

    char *buf;

    unsigned char *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 char *)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];

    

}



@end


本文转载自:

sfandy
粉丝 3
博文 21
码字总数 3368
作品 0
深圳
高级程序员
私信 提问
网络抓包源代码

转自:http://hi.baidu.com/wuxiaoming1733/blog/item/d2b5b738e4094bddd4622570.html 在进行iOS开发过程中,经常会遇到各种各样的网络访问问题,以前苦于没有抓包工具,很多网络问题解决起来...

长平狐
2013/01/11
587
0
移动设备(手机)的唯一ID有哪些

在移动广告领域,设备的ID 是用来追踪一个人的最重要的标识。 对于APP自身产品而言,使用设备唯一ID可以追踪到用户从下载到激活、注册、使用、流失、回归的全流程数据,对产品运营工作非常有...

IVAN_jsjwk
2018/05/29
0
0
ios下获取所有实体/虚拟网卡的信息,并以此判断设备所处的网络状态

一直在做移动设备网络方面的开发,最近项目需要解决ios设备判断是否打开个人热点。 经过网上搜索,找到一个比较笨的办法,就是通过获取status bar高度是否等于40来判断热点状态。当有其他设备...

luan.ma
2013/10/17
0
2
实战分享,教你蓝牙在小程序中的应用

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:朱胜 导语 蓝牙在日常生活中广泛使用的一项技术,小程序给了我们前端工程师一个控制蓝牙的方法,带上你的设备,来看看怎...

腾讯云开发者社区
2017/10/23
0
0
UDID是什么 如何获取iOS设备UDID-之udid获取篇

UDID是什么? UDID 是由子母和数字组成的40个字符串的序号,用来区别每一个唯一的iOS设备,包括 iPhones, iPads, 以及 iPod touches,这些编码看起来是随机的,实际上是跟硬件设备特点相联系...

qiyu123
2016/01/29
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
今天
4
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
2
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
3
0
Java设计模式之外观模式(门面模式)

什么是外观模式   外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口...

须臾之余
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部