获取INET4与INET6的信息
获取INET4与INET6的信息

参考书籍:

本人封装的源码:
//
// IPAddressInfo.h
// YXNETWORK
//
// http://www.cnblogs.com/YouXianMing/
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import <Foundation/Foundation.h> @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 <sys/types.h>
#import <sys/socket.h>
#import <netdb.h>
#import <arpa/inet.h>
#include <ifaddrs.h>
#include <arpa/inet.h> 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 = ; // 从当前接口中获取信息
success = getifaddrs(&interfaces);
if (success == )
{
// 遍历接口
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
使用情况:

获取INET4与INET6的信息的更多相关文章
- ASP.NET获取客户端、服务器端的信息
ASP.NET获取客户端.服务器端基础信息 1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取客户端电脑名: ...
- asp.net获取服务端和客户端信息
asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...
- Python中获取异常(Exception)信息
异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置.下面介绍几种python中获取异常信息的方法,这里获取异常(Exception)信息采用try...except...程序 ...
- win7下用python3.3获取cable modem的设备信息
毕业一年多了,一直做cable modem的测试,总是觉得在国内这一行的人才很少,想找个师傅真的很不容易. 苦闷了许久之后,终于决定,自己去写点东西,万一就找到同行了呢? 下面就是本小姐写的第一篇博客 ...
- html5+ 获取当前设备的加速度信息
getCurrentAcceleration 获取当前设备的加速度信息 void plus.accelerometer.getCurrentAcceleration( successCB, error ...
- linux中使用top获取进程的资源占用信息
在linux中使用top获取进程的资源占用信息: Cpu(s): 1.0%us, 0.0%sy, 0.0%ni, 98.3%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0 ...
- php反射机制获取未知类的详细信息
使用ReflectionClass就可以获取未知类的详细信息 demo: require("hello.php"); $class = new ReflectionClass(&q ...
- [C语言](二)01 获取Windows图形构件大小信息
SYSMETS.c #include <windows.h> #include "SYSMETS.H"//自定义的单元,所以用"",不是用<& ...
- Inxi:获取Linux系统和硬件信息的神器
导读 在这篇文章里,我们将看到如何使用inxi来获取这些详情信息.在论坛技术支持中,它可以作为调试工具,迅速确定用户的系统配置和硬件信息. Inxi是一个可以获取完整的系统和硬件详情信息的命令行工具, ...
随机推荐
- 解惑《你必须知道的.net》——C#继承关系中【方发表】的创建和调用
前言: 现在正在读<你必须知道的.net>(第二版)一书,看到IL语言那一章,将call.callvirt和calli时候,书中举了一个例子,是一个三层继承的例子,我一开始看的时候就有点懵 ...
- 在Ubuntu16.04上使用Autofs
在Solaris上,autofs是默认安装的,可以通过/net/<NFS server>很方便地访问远程的共享目录.但在Linux上(例如Fedora或者Ubuntu),使用autofs则 ...
- java面试③Web部分
2.2.1 讲一下http get和post请求的区别 get和post请求都是http的请求方式,用户通过不同的http请求方式完成对资源(url)的不同操作,具体点来讲get一般用于获取/查询资源 ...
- 怎么掌握微信小程序的取值、传值、数据存储
小程序界面设定如下 父级页面:A界面 子级页面:B界面 异级页面:C界面 一.本页面取值(A界面→A界面) a.例如:input输入文字获取到value(键盘输入时触发) wxml: <inpu ...
- AOE网与AOV网
因为有人无端怀疑此博客为抄袭, 且作者写作此博客时仅为应试之用,今毕业已久此文章已无用处 故删除文章,不想再无故受到打扰 祝好
- Window环境配置Mongodb
Mongodb这几天也了解了一下,今天配置了下环境,从今天开始学下Mongodb数据库. 一.下载 在这个网址中选择要下载的开发环境https://www.mongodb.com/download-c ...
- 马尔科夫随机场(Markov Random Field)
马尔可夫随机场(Markov Random Field),它包含两层意思:一是什么是马尔可夫,二是什么是随机场. 马尔可夫过程可以理解为其当前的状态只与上一刻有关而与以前的是没有关系的.X(t+1)= ...
- 微信小程序、微信公众号、H5之间相互跳转
转自慕课网 一.小程序和公众号 答案是:可以相互关联. 在微信公众号里可以添加小程序. 图片有点小,我把文字打出来吧: 可关联已有的小程序或快速创建小程序.已关联的小程序可被使用在自定义菜单和模版消息 ...
- Jsp&Servlet入门级项目全程实录第7讲
惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 1.获取搜索条件值 function searchStudent(){ $('#dg').datagrid('load ...
- HwUI下载地址
下载地址:HwUI.0.0.1.zip