在xp下怎么获取ipv6地址
我使用如下代码获取当前计算机的ip地址:
addrinfo m_hins,*m_res = NULL;
addrinfo *addrNext = NULL;
memset(&m_hins,0,sizeof(m_hins));
m_hins.ai_family = AF_UNSPEC;
char host[128];
memset(host,0,128);
::gethostname(host,127);
int retval = ::getaddrinfo(host,NULL,&m_hins,&m_res);
if(retval == 0)
{
addrNext = m_res;
while (addrNext != NULL) {
printf("\tFamily: ");
switch (addrNext->ai_family) {
case AF_UNSPEC:
printf("Unspecified\n");
break;
case AF_INET:
{
printf("AF_INET (IPv4) ");
struct sockaddr_in *sockaddr_ipv4 = (struct sockaddr_in *) addrNext->ai_addr;
printf("\tIPv4 address: %s\n",inet_ntoa(sockaddr_ipv4->sin_addr) );
}
break;
case AF_INET6:
{
printf("AF_INET6 (IPv6) ");
LPSOCKADDR sockaddr_ip = (LPSOCKADDR) addrNext->ai_addr;
DWORD ipbufferlength = 46;
char ipstringbuffer[46];
int iRetval = WSAAddressToStringA(sockaddr_ip, (DWORD) addrNext->ai_addrlen, NULL,ipstringbuffer, &ipbufferlength );
if (iRetval)
printf("WSAAddressToString failed with %u\n", WSAGetLastError() );
else
printf("\tIPv6 address: %s\n", ipstringbuffer);
}
break;
case AF_NETBIOS:
printf("AF_NETBIOS (NetBIOS)\n");
break;
default:
printf("Other %ld\n", addrNext->ai_family);
break;
}
addrNext = addrNext->ai_next;
}
freeaddrinfo(m_res);
}
在win7下面没有问题都可以获取到,但是在xp下面就不行了,ipv6地址只能获取到::1,ipv4地址可以正常获取到。我测试的xp是sp3的,已经安装了ipv6协议,系统以及分配了ipv6地址,并且在cmd下面ipconfig /all,可以看到本机的ipv4和ipv6地址。
不知道什么原因造成的,请各位大侠帮忙看看。