获取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是一个可以获取完整的系统和硬件详情信息的命令行工具, ...
随机推荐
- java-多线程future等待返回
多线程中需要返回值, java中有个fork/join模型, 没有细研究, 简单实用callable进行了返回 Thread1 package com.iwhere.easy.travel.test. ...
- java的逻辑与和短路与
逻辑与 --& 短路与 -- && 只说一个最大的区别,平时我们用的最多的是 短路与来进行逻辑判断: 短路与(或)会从左往右逐个判断式子,只要能得出结果后面的式子不再判断.逻辑 ...
- HDU 5253 连接的管道(Kruskal算法求解MST)
题目: 老 Jack 有一片农田,以往几年都是靠天吃饭的.但是今年老天格外的不开眼,大旱.所以老 Jack 决定用管道将他的所有相邻的农田全部都串联起来,这样他就可以从远处引水过来进行灌溉了.当老 J ...
- 一张图看懂Sprint Planning Meeting
本文主要参考<Scrum精髓>这本书的内容 每个Sprint都是从Sprint Planning Meeting开始,Scrum团队成员聚集在一起商定下个Sprint目标,并且确定在Spr ...
- hadoop学习笔记(四):HDFS
一.HDFS体系结构 1 HDFS假设条件 数据流访问 大数据集 简单相关模型 移动计算比移动数据便宜 多种软硬件平台中的可移植性 2 HDFS的设计目标 非常巨大的分布式文件系统 运行于普通硬件上 ...
- C语言中内存管理规范
一.内存申请 1.建议使用calloc申请内存,尽量不要使用malloc. calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据. 2.申请内存大 ...
- elasticsearch java使用
本文将介绍如何使用java调用elasticsearch的api 1.获取client连接 package com.test.elasticsearch; import java.net.InetAd ...
- PHP中关于时间(戳)、时区、本地时间、UTC时间等的梳理
PHP中关于时间(戳).时区.本地时间.UTC时间等的梳理 在PHP开发中,我们经常会在时间问题上被搞糊涂,比如我们希望显示一个北京时间,但是当我们使用date函数进行输出时,却发现少了8个小时.几乎 ...
- MyBatis和Hibernate的优缺点对比。
Hibernate的优点: 1.hibernate是全自动,hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql. 2.功能强 ...
- hdu 1226
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...