перечисление ipv4 и ipv6 адреса моих карт с помощью boost asio - PullRequest
12 голосов
/ 13 июня 2011

Я пытаюсь перечислить 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 Ответ

7 голосов
/ 14 июня 2011

Если платформой является 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**
...