博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取INET4与INET6的信息
阅读量:5113 次
发布时间:2019-06-13

本文共 3019 字,大约阅读时间需要 10 分钟。

获取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

使用情况:

 

 

 

 

 

转载于:https://www.cnblogs.com/YouXianMing/p/3812335.html

你可能感兴趣的文章
前端开发中提到的“脚手架”到底指什么,CLI?gulp 和 gulp-cli有什么区别
查看>>
iis7规范URL及利用web.config进行重定向
查看>>
【Linux】入门篇 环境搭建
查看>>
poj2569
查看>>
使用mmap在内存中读写文件
查看>>
使用pygal_maps_world.i18n中数据画各大洲地图
查看>>
sql server必知多种日期函数时间格式转换
查看>>
ListView如何获取点击单元格内容
查看>>
jQuery EasyUI 的下拉选择combobox后台动态赋值
查看>>
(转)游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
查看>>
timeline时间轴进度“群英荟萃”
查看>>
python map函数用法
查看>>
编码命名规范
查看>>
耿丹16-1上半学期助教总结
查看>>
python if else elif statement
查看>>
网络编程
查看>>
文本隐藏(图片代替文字)
查看>>
three.map.control
查看>>
二叉树的深度
查看>>
java面试题
查看>>