获取INET4与INET6的信息
参考书籍:
本人封装的源码:
//// IPAddressInfo.h// YXNETWORK//// http://www.cnblogs.com/YouXianMing///// Copyright (c) 2014年 Y.X. All rights reserved.//#import@interface IPAddressInfo : NSObject+ (NSDictionary *)net4Info;@end
//// IPAddressInfo.m// YXNETWORK//// http://www.cnblogs.com/YouXianMing///// Copyright (c) 2014年 Y.X. All rights reserved.//#import "IPAddressInfo.h"#import#import #import #import #include #include static NSMutableDictionary *net4 = nil;static NSMutableDictionary *net6 = nil;@implementation IPAddressInfo+ (void)initialize{ if (self == [IPAddressInfo class]) { net4 = [NSMutableDictionary new]; net6 = [NSMutableDictionary new]; }}+ (NSDictionary *)net4Info{ [self updataInfo]; return net4;}+ (void)updataInfo{ struct ifaddrs *interfaces = NULL; struct ifaddrs *temp_addr = NULL; int success = 0; // 从当前接口中获取信息 success = getifaddrs(&interfaces); if (success == 0) { // 遍历接口 temp_addr = interfaces; for (temp_addr = interfaces; temp_addr != NULL; temp_addr = temp_addr->ifa_next) { if(temp_addr->ifa_addr->sa_family == AF_INET) { NSMutableDictionary *tmp = [NSMutableDictionary new]; // INET4 char naddr[INET_ADDRSTRLEN]; char nmask[INET_ADDRSTRLEN]; char ngate[INET_ADDRSTRLEN]; inet_ntop(AF_INET,&((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr,naddr,INET_ADDRSTRLEN); inet_ntop(AF_INET,&((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr,nmask,INET_ADDRSTRLEN); inet_ntop(AF_INET,&((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr,ngate,INET_ADDRSTRLEN); NSString *interfaceName = [NSString stringWithUTF8String:temp_addr->ifa_name]; NSString *address = [NSString stringWithUTF8String:naddr]; NSString *netmask = [NSString stringWithUTF8String:nmask]; NSString *gateway = [NSString stringWithUTF8String:ngate]; [tmp setObject:address forKey:@"address"]; [tmp setObject:netmask forKey:@"netmask"]; [tmp setObject:gateway forKey:@"gateway"]; [net4 setObject:tmp forKey:interfaceName]; } else if(temp_addr->ifa_addr->sa_family == AF_INET6) { // INET6 char naddr[INET6_ADDRSTRLEN]; char ngate[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6,&((struct sockaddr_in6 *)temp_addr->ifa_addr)->sin6_addr,naddr,INET6_ADDRSTRLEN); NSString *tmpGateway = nil; if ((struct sockaddr_in6 *)temp_addr->ifa_dstaddr != NULL) { inet_ntop(AF_INET6,&((struct sockaddr_in6 *)temp_addr->ifa_dstaddr)->sin6_addr,ngate,INET6_ADDRSTRLEN); tmpGateway = [NSString stringWithUTF8String:ngate]; } else { tmpGateway = @" "; } // NSString *interfaceName = [NSString stringWithUTF8String:temp_addr->ifa_name];// NSString *address = [NSString stringWithUTF8String:naddr];// NSString *netmask = @" ";// NSString *gateway = tmpGateway;// // NSLog(@"%@", interfaceName);// NSLog(@"%@", address);// NSLog(@"%@", netmask);// NSLog(@"%@", gateway); } else { continue; } } } // 释放资源 freeifaddrs(interfaces);}@end
使用情况: