在xp下怎么获取ipv6地址

tianzeng 2014-02-11 04:49:40
我使用如下代码获取当前计算机的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地址。
不知道什么原因造成的,请各位大侠帮忙看看。
...全文
426 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
derekrose 2014-02-12
  • 打赏
  • 举报
回复
getaddrinfo??
赵4老师 2014-02-12
  • 打赏
  • 举报
回复
system("ipconfig /all >ipall.txt");
//然后读文件ipall.txt的内容

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧