首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从目标C中的域名中获取IP地址和IP地址的域名?

如何从目标C中的域名中获取IP地址和IP地址的域名?
EN

Stack Overflow用户
提问于 2010-08-26 14:55:19
回答 3查看 5.4K关注 0票数 3

我可以通过using this question's answer获取我正在使用的设备/机器的当前IP地址。

我已经看过this question了。Java允许从域名获取IP地址。在目标C中这是可能的吗?多么?

第二个问题是如何使用设备/机器的IP地址获取设备/机器的名称。例如,假设我有一个IP地址192.168.0.74 =设备名称是什么?在目标C中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-26 21:14:27

我不确定这是否是最好的方式,但它对我来说,基本上是有效的。我输入了StackOverflow的IP地址(69.59.196.211),它返回了stackoverflow.com,但我输入了谷歌的一个IP地址(210.55.180.158),它返回了cache.googlevideo.com (对于所有结果,不仅仅是第一个)。

代码语言:javascript
复制
int error;
struct addrinfo *results = NULL;

error = getaddrinfo("69.59.196.211", NULL, NULL, &results);
if (error != 0)
{
    NSLog (@"Could not get any info for the address");
    return; // or exit(1);
}

for (struct addrinfo *r = results; r; r = r->ai_next)
{
    char hostname[NI_MAXHOST] = {0};
    error = getnameinfo(r->ai_addr, r->ai_addrlen, hostname, sizeof hostname, NULL, 0 , 0);
    if (error != 0)
    {
        continue; // try next one
    }
    else
    {
        NSLog (@"Found hostname: %s", hostname);
        break;
    }
}

freeaddrinfo(results);

该地址可以有多个名称,因此您可能不希望在找到的第一个名称处停止。

票数 4
EN

Stack Overflow用户

发布于 2018-08-12 05:54:23

我写了一个公认答案的快速版本,尽管我不能100%确定它的正确性。

代码语言:javascript
复制
func reverseDNS(ip: String) -> String {
    var results: UnsafeMutablePointer<addrinfo>? = nil
    defer {
        if let results = results {
            freeaddrinfo(results)
        }
    }
    let error = getaddrinfo(ip, nil, nil, &results)
    if (error != 0) {
        print("Unable to reverse ip: \(ip)")
        return ip
    }

    for addrinfo in sequence(first: results, next: { $0?.pointee.ai_next }) {
        guard let pointee = addrinfo?.pointee else {
            print("Unable to reverse ip: \(ip)")
            return ip
        }

        let hname = UnsafeMutablePointer<Int8>.allocate(capacity: Int(NI_MAXHOST))
        defer {
            hname.deallocate()
        }
        let error = getnameinfo(pointee.ai_addr, pointee.ai_addrlen, hname, socklen_t(NI_MAXHOST), nil, 0, 0)
        if (error != 0) {
            continue
        }
        return String(cString: hname)
    }

    return ip
}
票数 1
EN

Stack Overflow用户

发布于 2012-12-20 16:57:31

您需要读取路由表-基本上与"netstat -r“命令的读取方式相同。netstat实现是开源的-它在包中

网络_cmds-396.6

在…

http://www.opensource.apple.com/release/mac-os-x-1082/

所以你可以检查它是做什么的。默认网关包含"G“标志,但不应连接"I”标志(当wifi和cell都处于活动状态时,wifi用于互联网连接-不使用cell网关,而是给予"I“标志)。

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3572697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档