我正在尝试枚举我的pc上所有网卡(我有2张网卡)的ipv4和ipv6地址。
我使用下面的代码来实现这一点。
using boost::asio::ip::tcp;
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::host_name(),"");
tcp::resolver::iterator it=resolver.resolve(query);
while(it!=tcp::resolver::iterator())
{
boost::asio::ip::address addr=(it++)->endpoint().address();
if(addr.is_v6())
{
std::cout<<"ipv6 address: ";
}
else
std::cout<<"ipv4 address: ";
std::cout<<addr.to_string()<<std::endl;
}
代码显示正确的ipv4地址,但不显示ipv6。以下是输出
ipv6 address: ::1
ipv4 address: 192.168.10.200
ipv4 address: 192.168.10.236
我对ipv6的了解非常少。当我使用ipconfig/all列出有关网络接口的信息时,我看到实际的ipv6地址是
fe80::226:5aff:fe14:5687%5
fe80::225:64ff:feb2:4f61%4
有没有人可以指导我如何列出ipv6地址?谢谢。
发布于 2011-06-13 22:07:30
如果平台是Windows7 SP1,链接本地接口将被跳过,因为它们被Windows标记为"SkipAsSource“,这意味着getaddrinfo
不会返回它们,因此两者都不会增强。
您可以尝试使用以下命令检查该标志:
netsh int ipv6 show addresses level=verbose
Address fe80::e0:0:0:0%14 Parameters
---------------------------------------------------------
Interface Luid : Teredo Tunneling Pseudo-Interface
Scope Id : 0.14
Valid Lifetime : infinite
Preferred Lifetime : infinite
DAD State : Deprecated
Address Type : Other
Skip as Source : **true**
https://stackoverflow.com/questions/6327210
复制相似问题