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

使用情况:

 

时间: 2024-09-29 17:03:20

获取INET4与INET6的信息的相关文章

odi 接口 会话-请问各位大神,想要获取ODI里面的“会话”信息,该利用什么接口?

问题描述 请问各位大神,想要获取ODI里面的"会话"信息,该利用什么接口? 如题,有人做过这方面相关的研究吗?如果有可否共享下接口代码,由于现在急用又还找不到..

C#获取WAVE文件文件头信息

C#获取WAVE文件文件头信息 前些日子在论坛里问了,没人回答,今天有空自己写了一下 文件格式依据网站 http://www.moon-soft.com/program/FORMAT/ using System; using System.IO; using System.Text; namespace WAV { /// <summary> /// Summary description for Wav. /// </summary> public class Wav { pub

PHP获取音频文件的相关信息

  这篇文章主要介绍了PHP获取音频文件的相关信息的相关资料,非常的实用,有需要的小伙伴可以参考下. 项目需求:现在有一个音频文件上传的功能,在上传后PHP需要获取这个音频文件的相关信息,例如:时长等,由于这个文件是放在买的空间上的,没有像ffmpeg这样的扩展来处理,那么PHP能不能获取到这些信息? 下面是之前在项目中用到的一个用PHP进行音频文件头部信息的读取与写入操作的实现,主要针对 WMA 和 MP3 两种格式,供参考. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1

JS使用ajax方法获取指定url的head信息中指定字段值的方法

 这篇文章主要介绍了JS使用ajax方法获取指定url的head信息中指定字段值的方法,实例分析了Ajax操作URL中head信息的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JS使用ajax方法获取指定url的head信息中指定字段值的方法.分享给大家供大家参考.具体分析如下: 下面的JS代码用来获取ajax_info.txt的head信息中的Last modified属性,最后修改时间 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1

Javascript和Java获取各种form表单信息的简单实例

 本篇文章主要是对Javascript和Java获取各种form表单信息的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 大家都知道我们在提交form的时候用了多种input表单.可是不是每一种input表单都是很简单的用Document.getElementById的方式就可以获取到的.有一些组合的form类似于checkbox或者radio或者select我们如何用javascript获取和在服务器中获取提交过来的参数呢?多说无用.上代码:   Jsp-html代码:  

如何获取U盘的型号信息

怎么查看U盘的具体芯片类型呢?下面教你几种办法: 一.可以使用工具软件Chipgenius来查看你的U盘型号信息,比如显示:芯片制造商Phison(群联)芯片型号;UP12,就知道用Phison量产工具来量产了,就找Phison UP12的量产工具.但使用时可能用这个软件无法得到那两个信息,那么就要先用checkudisk查看U盘ID,类似于 Vid_13fe&Pid_1d00,再到网址http://www.linux-USB.org下的USB Vendor/Device IDs list来查找

api-查询药品电子监管码,获取药品和药品去向信息。有谁知道有没有这种开放的接口?

问题描述 查询药品电子监管码,获取药品和药品去向信息.有谁知道有没有这种开放的接口? 查询药品电子监管码,获取药品和药品去向信息.有谁知道有没有这种开放的接口? 解决方案 上中国电子药品监管平台上问问,肯定有开放的api,也肯定得申请授权.药品监管码不是被叫停了吗 解决方案二: 估计是被停了,打客服也没人接电话了,开放的api也找不到.

淘宝买家信息-如何获取淘宝买家相关信息

问题描述 如何获取淘宝买家相关信息 目前已经不开放买家相关API 不能申请,说是用买家session也能获取,这个怎么获取,貌似买家session有时限

wm touch-vs2013用C#的winform开发怎么才能获取WM_TOUCH消息的钩子信息.

问题描述 vs2013用C#的winform开发怎么才能获取WM_TOUCH消息的钩子信息. vs2013用C#的winform开发怎么才能获取WM_TOUCH消息的钩子信息. 解决方案 顶一下,!!!!!!!!!