1

我正在使用NSNetService类通过 MDNS 发现来解析 IP 地址。我得到两个结果:

看起来像这样的东西:

ae60::x:1cdf:x:212

(其中x是另一个与其他值相似的值)

还有经典的ip地址,比如:10.xx2

第一个结果也是IP地址吗?

这是我用来检索地址的代码:

char addressBuffer[INET6_ADDRSTRLEN];

for (NSData *data in service.addresses)
{
    memset(addressBuffer, 0, INET6_ADDRSTRLEN);

    typedef union {
        struct sockaddr sa;
        struct sockaddr_in ipv4;
        struct sockaddr_in6 ipv6;
    } ip_socket_address;

    ip_socket_address *socketAddress = (ip_socket_address *)[data bytes];

    if (socketAddress && (socketAddress->sa.sa_family == AF_INET || socketAddress->sa.sa_family == AF_INET6))
    {
        const char *addressStr = inet_ntop(
                                           socketAddress->sa.sa_family,
                                           (socketAddress->sa.sa_family == AF_INET ? (void *)&(socketAddress->ipv4.sin_addr) : (void *)&(socketAddress->ipv6.sin6_addr)),
                                           addressBuffer,
                                           sizeof(addressBuffer));

        int port = ntohs(socketAddress->sa.sa_family == AF_INET ? socketAddress->ipv4.sin_port : socketAddress->ipv6.sin6_port);

        if (addressStr && port)
        {
            NSString * address = [NSString stringWithFormat:@"%s", addressStr];
            NSLog(@"Found service at %s:%d", addressStr, port);
        }
    }
}
4

3 回答 3

2

您有一个IPv6 IP 地址,例如2001:4860:4860::8888(谷歌的 DNS 服务器之一的地址)。

于 2015-05-08T11:05:40.467 回答
2

ae60::x:1cdf:x:212是的,格式化为 IPv6 地址的字符串。

于 2015-05-08T11:05:43.470 回答
1

简短的回答:是的

长答案:这是一个 IPv6 地址,一种新的 IP 地址。较短的版本(IPv4,例如 168.192.1.1)是旧版本,但需要一种支持更多组合的新格式。

http://en.wikipedia.org/wiki/IPv6

于 2015-05-08T11:07:36.483 回答