iPhone设备当前IP和SSID的获取

#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

 

posted @ 2014-11-07 20:54  狂灬的草人  阅读(357)  评论(0编辑  收藏  举报