Перечисление ipv4 и ipv6 адресов моих карт с использованием boost asio
Я пытаюсь перечислить адреса ipv4 и ipv6 всех сетевых карт (у меня есть 2 карты) моего компьютера.
Я использую следующий код для этого.
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.
Спасибо.
Ответы
Ответ 1
Если платформой является Windows 7 SP1, локальные интерфейсы связи пропускаются, поскольку они помечены "SkipAsSource" Windows, что означает, что getaddrinfo
не вернет их и, следовательно, не будет Boost.
Вы можете попытаться проверить флаг с помощью следующей команды:
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**