1

我可以尝试使用GetAddrInfo来解决ipv6.google.com

wsaError = getaddrinfo("ipv6.google.com", null, null, ref addrInfo);

返回的套接字错误代码是11001(不知道这样的主机)。

注意:已弃用的旧版功能GetHostByName不支持 IPv6。它已被替换为GetAddrInfo

奇怪的是我可以使用nslookup它并且可以很好地找到地址:

问题

SendRequest(), len 33
    HEADER:
        opcode = QUERY, id = 4, rcode = NOERROR
        header flags:  query, want recursion
        questions = 1,  answers = 0,  authority records = 0,  additional = 0

    QUESTIONS:
        ipv6.google.com, type = A, class = IN

权威回答

Got answer (106 bytes):
    HEADER:
        opcode = QUERY, id = 4, rcode = NOERROR
        header flags:  response, want recursion, recursion avail.
        questions = 1,  answers = 1,  authority records = 1,  additional = 0

    QUESTIONS:
        ipv6.google.com, type = A, class = IN
    ANSWERS:
    ->  ipv6.google.com
        type = CNAME, class = IN, dlen = 9
        canonical name = ipv6.l.google.com
        ttl = 21743 (6 hours 2 mins 23 secs)
    AUTHORITY RECORDS:
    ->  l.google.com
        type = SOA, class = IN, dlen = 38
        ttl = 30 (30 secs)
        primary name server = ns4.google.com
        responsible mail addr = dns-admin.google.com
        serial  = 1486713
        refresh = 900 (15 mins)
        retry   = 900 (15 mins)
        expire  = 1800 (30 mins)
        default TTL = 60 (1 min)

非权威问题

SendRequest(), len 33
    HEADER:
        opcode = QUERY, id = 5, rcode = NOERROR
        header flags:  query, want recursion
        questions = 1,  answers = 0,  authority records = 0,  additional = 0

    QUESTIONS:
        ipv6.google.com, type = AAAA, class = IN

非权威回答

Got answer (82 bytes):
    HEADER:
        opcode = QUERY, id = 5, rcode = NOERROR
        header flags:  response, want recursion, recursion avail.
        questions = 1,  answers = 2,  authority records = 0,  additional = 0

    QUESTIONS:
        ipv6.google.com, type = AAAA, class = IN
    ANSWERS:
    ->  ipv6.google.com
        type = CNAME, class = IN, dlen = 9
        canonical name = ipv6.l.google.com
        ttl = 21743 (6 hours 2 mins 23 secs)
    ->  ipv6.l.google.com
        type = AAAA, class = IN, dlen = 16
        AAAA IPv6 address = 2607:f8b0:4009:801::1012
        ttl = 270 (4 mins 30 secs)

------------
Name:    ipv6.l.google.com
Address:  2607:f8b0:4009:801::1012
Aliases:  ipv6.google.com

什么会导致nslookup无法解析地址GetAddrInfo?我可以用什么不同的方法GetAddrInfo让它起作用?

4

2 回答 2

2

尝试传入参数AF_INET6pHints使用 IPV6 地址。这似乎对我有用:

struct addrinfo *result = NULL;
struct addrinfo hints;

ZeroMemory( &hints, sizeof(hints) );
hints.ai_family = AF_INET6;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = IPPROTO_UDP;

dwRetval = getaddrinfo("ipv6.google.com", NULL, &hints, &result);
// check your dwRetval here ...
于 2012-05-26T16:41:23.037 回答
1

我有类似的问题,不是代码问题,而是操作系统问题。以下命令意味着 Windows 正确解析了 IPv6 地址,而不是给出 WSANA_DATA 错误:

Netsh 接口 teredo set state enterpriseclient

来源:

http://netscantools.blogspot.co.uk/2011/06/ipv6-teredo-problems-and-solutions-on.html

于 2013-06-20T21:09:53.363 回答