Swift中利用域名获得IP地址 C方式

/ Mac / 没有评论 / 1378浏览

Swift中利用域名获得IP地址 C方式

本方法利用C语言的方式解决域名转IP

C语言部分如下

//
//  DNSManager.c
//
//  Created by icesnow on 15/9/10.
//  Copyright (c) 2015年 icesnow. All rights reserved.
//

#include <stdio.h>
#include <netdb.h>
#include <string.h>

char *getDNSToIP(char*HOST)
{
    struct hostent *host_entry;
    char host_name[256] ="www.baidu.com";
    /* 即要解析的域名或主机名 */
    host_entry=gethostbyname(host_name);
    if(host_entry!=0)
    {
        sprintf(HOST,"%d.%d.%d.%d",
                (host_entry->h_addr_list[0][0]&0x00ff),
                (host_entry->h_addr_list[0][1]&0x00ff),
                (host_entry->h_addr_list[0][2]&0x00ff),
                (host_entry->h_addr_list[0][3]&0x00ff));
        return HOST;
    } else
    {
        strcpy(host_name,"www.youtube.com");
        host_entry=gethostbyname(host_name);
        if(host_entry!=0)
        {
            sprintf(HOST,"%d.%d.%d.%d",
                    (host_entry->h_addr_list[0][0]&0x00ff),
                    (host_entry->h_addr_list[0][1]&0x00ff),
                    (host_entry->h_addr_list[0][2]&0x00ff),
                    (host_entry->h_addr_list[0][3]&0x00ff));
            return HOST;
        }
    }
    return HOST;
}

桥接文件Bridging-Header.h

char *getDNSToIP(char*HOST);

Swift语言部分

private func dnsToIP() -> String? {
  var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0)
  let result = getDNSToIP(&hostname)
  let ipAddress = String.fromCString(result)
  if ipAddress != nil && !ipAddress!.isEmpty {
    return ipAddress!
  } else {
    NSLog("域名出错")
    return nil
  }
}

经测试目前没什么问题