#import <Foundation/Foundation.h>

typedef void(^Complation)(NSString *res);

@interface WIFIManager : NSObject

+ (WIFIManager* )shareSington ;

- (void)localWIFIName:(Complation) complation;

- (void)localWiFiIPAddress:(Complation) complation;

@end

// 实现

#import "WIFIManager.h"

#import <SystemConfiguration/CaptiveNetwork.h>

#include <arpa/inet.h>

#include <netdb.h>

#include <net/if.h>

#include <ifaddrs.h>

#import <dlfcn.h>

@implementation WIFIManager

+ (WIFIManager *)sharedInstance

{

static WIFIManager* manager = nil;

static dispatch_once_t once ;

dispatch_once(&once, ^{

manager = [[WIFIManager alloc] init];

});

return manager ;

}

- (void)localWIFIName:(Complation)complation

{

dispatch_queue_t queue=dispatch_queue_create("WIFI_NAME", NULL);

dispatch_async(queue, ^{

id obj = [self fetchSSIDInfo];

dispatch_async(dispatch_get_main_queue(), ^{

if ([obj isKindOfClass:[NSDictionary class]]) {

NSDictionary *dic = obj;

complation([dic objectForKey:@"SSID"]);

}else

{

complation(nil);

}

});

});

}

- (void)localWiFiIPAddress:(Complation)complation

{

dispatch_queue_t queue=dispatch_queue_create("WIFI_IP", NULL);

dispatch_async(queue, ^{

NSString *ip = [self localWiFiIPAddress];

dispatch_async(dispatch_get_main_queue(), ^{

complation(ip);

});

});

}

- (NSString *)localWiFiIPAddress

{

BOOL success;

struct ifaddrs * addrs;

const struct ifaddrs * cursor;

success = getifaddrs(&addrs) == 0;

if (success) {

cursor = addrs;

while (cursor != NULL) {

if (cursor->ifa_addr->sa_family == AF_INET && (cursor->ifa_flags & IFF_LOOPBACK) == 0)

{

NSString *name = [NSString stringWithUTF8String:cursor->ifa_name];

if ([name isEqualToString:@"en0"])  // Wi-Fi adapter

return [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)cursor->ifa_addr)->sin_addr)];

}

cursor = cursor->ifa_next;

}

freeifaddrs(addrs);

}

return nil;

}

- (id)fetchSSIDInfo {

NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();

id info = nil;

for (NSString *ifnam in ifs) {

info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);

if (info && [info count]) { break; }

}

return info;

}

@end

iPhone设备当前IP和SSID的获取的更多相关文章

  1. ios7 以后准确获取iphone设备的MAC(物理地址)

    通过参考 钉钉 项目,知道是通过wifi拿到路由的MAC地址.那么可不可以拿到iphone 设备的MAC 地址呢? 经过一番搜索,发现所有文章都是针对 ios 7 以前 可以拿到. 而且方法也都是同一 ...

  2. C#获取设备的IP和Mac类

    /// <summary> /// 此类用于获得设备的Ip和Mac /// </summary> public class Mac { [DllImport("Iph ...

  3. 关于iPhone设备不同显示尺寸适配的一些方法

    关于iPhone设备不同显示尺寸适配的一些方法   ------关于适配的理解------ 1.什么是适配? 适配是对不同硬件和系统软件的适应,硬件包括屏幕显示,处理器,内存等等(目前主要是屏幕适配, ...

  4. ios5和ios6横竖屏支持及ipad和iphone设备的判断

    ios5和ios6横竖屏支持及ipad和iphone设备的判断 判断是ipad还是iphone设备.此定义在PayViewControllerDemo-Prefix.pch 定义如下: #define ...

  5. Android便携式热点的开启状态检测和SSID的获取

    WIFI热点的开启状态和开启后的SSID如何获取呢? 打开WifiManager.java源码,可找到 getWifiApState() 方法,惊喜的发现直接调用这个方法就能获取到热点的状态,然而在调 ...

  6. [原创]K8Cscan插件之Cisco思科设备扫描(IP、设备型号、主机名、Boot、硬件版本)

    [原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...

  7. iPhone设备及屏幕适配

    // // Common.h // 微信 // // #ifndef Common_h #define Common_h // iPhone设备及屏幕适配 //4的设备 #define KDevice ...

  8. 在局域网中查找特定设备的 IP

    如何查找特定设备的 IP 有几种方法在局域网中找到某个设备(设为设备 A)的 IP 地址: 在设备 A 上运行一段程序,该程序每隔一段时间向局域网中发送广播包(UDP 广播包),(设备 B)上运行另一 ...

  9. 同一域名对应多个IP时,PHP获取远程网页内容的函数

    同一域名对应多个IP时,PHP获取远程网页内容的函数 [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.zyan.cc/post/389 ...

随机推荐

  1. protobuf-net precompile

    之前游戏为了解决在ios自动更新的问题,想到使用了将游戏代码打包成dll,使用反射加载执行的办法.办法想好了以后,一直没有做测试.上周不知道什么原因,终于有人去测试了,结果发现报错了.我当时觉得有点意 ...

  2. 2015:WPS笔试-Android开发岗位

    题目一共三道: 一:实现一个函数,能够推断两条直线的关系:平行.重合.垂直或相交. 二:实现一个函数.能够得到随意两个日期的相隔天数. 三:针对题目一或题目二,实现一个完整的单元測试. (笔试后在网上 ...

  3. LeetCode 929. Unique Email Addresses (独特的电子邮件地址)

    题目标签:String 题目说明 有两个规则针对于 local name. 所以先把local name 和 domain name 分开. 两个规则是: rule 1:'.' 会被去除. (利用re ...

  4. atitit. 集合groupby 的实现(2)---自己定义linq查询--java .net php

    atitit.  集合groupby 的实现(2)---自己定义linq查询--java .net php 实现方式有例如以下 1. Linq的实现原理流程(ati总结) 1 2. groupby   ...

  5. mac 显示隐藏文件的命令行和快捷键

    命令行方式: 显示隐藏文件: defaults write com.apple.Finder AppleShowAllFiles YES;KillAll Finder 不显示隐藏文件: default ...

  6. git-svn for mac

    熟练使用 git ,新公司用的是 svn,这就尴尬了,为了这个习惯问题,我还是毅然坚持使用 git,但是又不与公司的 svn 冲突,所以就找到了 git 的 git-svn 插件. 在 mac 上使用 ...

  7. HDU - 3631 Shortest Path(Floyd最短路)

    Shortest Path Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u SubmitStat ...

  8. tiny4412 裸机程序 三、关闭看门狗和调用C程序【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37112779 一.原理说明 上是章中大家可能有会觉得奇怪,CPU不是有看门狗嘛?为什么CPU没有 ...

  9. StackExchange.Redis 使用资料

    在StackExchange.Redis中最重要的对象是ConnectionMultiplexer类, 它存在于StackExchange.redis命名空间中.这个类隐藏了Redis服务的操作细节, ...

  10. SpringBoot 启动定时任务

    再项目中大多会使用定时任务来定时执行一些操作,如:文件迁移,备份等等.今天就来跟大家一起学习下如何在SpringBoot中创建定时任务. 1.新建SpringBoot项目,或在原有的项目上添加(不知道 ...