获取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是一个可以获取完整的系统和硬件详情信息的命令行工具, ...
随机推荐
- 使用Visual Studio Code搭建PHP调试环境
1.需要安装的软件 Visual Studio Code. WAMP(包括Apache.MySQL.PHP.以及最关键的XDebug) 2.下载软件 Visual Studio Code,光看名字就知 ...
- SSL编程(1) 概述
文章来自本园马若望 SSL是TCP/IP环境上的标准的安全加密传输协议.SSL的全称是安全的 Socket层,它具有与Socket类似的客户端/服务器体制.常见的https即http+ssl,从安全的 ...
- Web服务的调用
1.创建服务引用 例如:天气预报 2.在代码添加引用空间 TvProgram.ChinaTVprogramWebService tp = new TvProgram.ChinaTVprogramWeb ...
- 浅谈angular2与angularJS的区别
简介 大家好,今天给大家介绍一下angular,相信做过前端的小伙伴们都知道angular的大名,angularJS自2012年发布起就受到了大家的广泛关注.他首次提出了双向绑定概念让所有人都耳目一新 ...
- Java并发常见问题
ConcurrentHashMap源码分析,参考:http://blog.csdn.net/do_smile/article/details/46911727 HashMap源码分析,参考:http: ...
- [LeetCode] Next Permutation(一种巧妙的解题方法)
Next Permutation Implement next permutation, which rearranges numbers into the lexicographically nex ...
- wamp 安装monggo扩展
1.下载对应的monggo扩展 http://pecl.php.net/package/mongo 2. 找对应的版本 放在D:\program\wamp\bin\php\php5.5.12\ext ...
- 最简单的socket通信
服务器端程序 import socket # 套接字 sk = socket.socket() # 先买一部手机 # sk.bind(('192.168.13.2',9000)) # 绑定一个电话卡 ...
- AJAX-XMLHttpRequest和本地文件
网页中可以使用相对URL的能力通常意味着我们能使用本地文件系统来开发和测试HTML,并避免对Web服务器进行不必要的部署. 然而当使用XMLHttpRequest进行Ajax编程时,这通常是不行的. ...
- 快速 图片颜色转换迁移 Color Transfer Opencv + Python
Super fast color transfer between images About a month ago, I spent a morning down at the beach, w ...