【问题标题】:How to get IP from hostname on iOS [duplicate]如何从 iOS 上的主机名获取 IP [重复]
【发布时间】:2013-08-21 05:41:40
【问题描述】:

如何从 iOS 上的给定主机名获取 IP?

我试过谷歌但一无所获。

【问题讨论】:

  • 不,我想要主机名的 IP。外汇。我给应用程序提供主机名 Google.com,它会返回 ip。
  • 你不能 ping 主机名并捕获响应的 IP 吗?
  • 好的,然后this one
  • stackoverflow.com/questions/5450621/… 是关于确定防火墙后面设备的“外部”IP 地址,所以这不是该问题的重复
  • @user2062950,虽然这确实给出了一个合理的答案,但 MartinR 在下面的答案更可取。 getnameinfo() 已替换 gethostbyname()。

标签: ios objective-c cocoa-touch


【解决方案1】:

以下代码适用于 IPv4 和 IPv6。它使用getaddrinfo() 来 检索主机的 IP 地址列表,并使用 getnameinfo() 进行转换 每个 IP 地址成一个字符串。 (为简洁起见,省略了错误检查。)

struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;        // PF_INET if you want only IPv4 addresses
hints.ai_protocol = IPPROTO_TCP;

struct addrinfo *addrs, *addr;

getaddrinfo("www.google.com", NULL, &hints, &addrs);
for (addr = addrs; addr; addr = addr->ai_next) {

    char host[NI_MAXHOST];
    getnameinfo(addr->ai_addr, addr->ai_addrlen, host, sizeof(host), NULL, 0, NI_NUMERICHOST);
    printf("%s\n", host);

}
freeaddrinfo(addrs);

【讨论】:

  • 收到此错误:必须先从模块“Darwin.POSIX.netdb”导入“struct addrinfo”的定义
  • @RoboForm:您必须添加一些包含文件。如果您在命令行中输入“man getaddrinfo”,您将看到需要哪些包含文件。
猜你喜欢
  • 2014-08-02
  • 1970-01-01
  • 2015-07-08
  • 2012-08-04
  • 2012-05-31
  • 2020-08-13
  • 1970-01-01
  • 2013-08-17
相关资源
最近更新 更多