На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > getaddrinfo не возвращает IPv6-адреса
      Привет.
      Столкнулся с такой проблемой. На компе Win7 x64 getaddrinfo не возвращает IPv6-адреса, того же ya.ru или google.com.
      Это при том что nslookup их получает.

      Как пример:
      nslookup:
      ya.ru
      Addresses:
      2a02:6b8::3
      93.158.134.3
      213.180.193.3
      213.180.204.3

      getaddrinfo:
      ya.ru
      Addresses:
      213.180.204.3
      93.158.134.3
      213.180.193.3

      В чем может быть проблема?
        ExpandedWrap disabled
          addrinfo.ai_flags = AI_ALL;

        ?
          Цитата neokoder @
          getaddrinfo не возвращает IPv6-адреса

          Покажи как вызываешь.

          Это сообщение было перенесено сюда или объединено из темы "getaddrinfo не возвращает IPv6-адреса"
            Цитата lepit @

            addrinfo.ai_flags = AI_ALL;
            ?

            Да.
            Не обратил на этот флаг внимания из-за AI_V4MAPPED потому что мэпить IPv4 адреса в IPv6 мне не надо.


            Cтранно тогда работают эти флаги:
            Цитата MSDN
            AI_ALL
            If the AI_ALL bit is set, a request is made for IPv6 addresses and IPv4 addresses with AI_V4MAPPED.
            The AI_ALL flag is defined on the Windows SDK for Windows Vista and later. The AI_ALL flag is supported on Windows Vista and later.

            AI_V4MAPPED
            If the AI_V4MAPPED bit is set and a request for IPv6 addresses fails, a name service request is made for IPv4 addresses and these addresses are converted to IPv4-mapped IPv6 address format.
            The AI_V4MAPPED flag is defined on the Windows SDK for Windows Vista and later. The AI_V4MAPPED flag is supported on Windows Vista and later.


            Написано, что IPv4 адреса вроде бы должны конвертиться в формат IPv4-mapped IPv6 address format тогда. Но у меня они вроде обычные получаются...


            Жаль ещё что этот флаг работает только начиная с Висты. А не подскажите функцию аналогичную этой для < Висты для получения IPv6-адресов?
              ExpandedWrap disabled
                addrinfo.ai_family = AF_INET6;
                addrinfo.ai_flags = AI_DEFAULT;

              Не работает?
                Цитата
                AI_DEFAULT

                Такого флага че то нету...

                Добавлено
                А, всё понял если IPv6 вообще не будет тогда будут конвертиться.
                  ExpandedWrap disabled
                    #define AI_DEFAULT  (AI_V4MAPPED | AI_ADDRCONFIG)
                    Т.е. как я понимаю для IPv6 и ОС>Виста надо будет отдельно получать IPv6 с помощью getaddrinfo, ну а IPv4 можно обычным. А как быть на ОС<Висты?
                    Есть какая-то функция для получения IPv6-адресов?
                      Скрытый текст
                      Дубль темы в одном разделе - это "проституция бандитизЪм и недобор в армию" (С) ДМБ :D
                      Мож с форумом че?
                        Цитата neokoder @
                        Есть какая-то функция для получения IPv6-адресов?

                        А ты пробовал этот вариант? И да, в WinXP по дефолту ipv6 адреса не используются. Их нужно отдельно включать.
                          Цитата MSDN
                          If the AI_V4MAPPED bit is set and a request for IPv6 addresses fails, a name service request is made for IPv4 addresses and these addresses are converted to IPv4-mapped IPv6 address format.

                          Вот всё же не работает эта штука как написано или я её не понимаю. Нормальные у меня IPv4 адреса даже для хостов для которых нет IPv6.
                          Непонятно вообще что микрософты подразумевают под вышеописанным...

                          Но решение уже есть, пока только для ОС>=Висты:
                          ExpandedWrap disabled
                               //для IPv6-адресов, берём из результат только IPv6-адреса(на всякий случай учитывая что там понаписали микрософты в доках)
                               //hints.ai_family = AF_UNSPEC;
                               //hints.ai_socktype = SOCK_STREAM;
                               //hints.ai_protocol = IPPROTO_TCP;
                               //hints.ai_flags = AI_NUMERICSERV|AI_ALL;
                             
                               //для IPv4-адресов
                               //hints.ai_family = AF_INET;
                               //hints.ai_socktype = SOCK_STREAM;
                               //hints.ai_protocol = IPPROTO_TCP;
                               //hints.ai_flags = AI_NUMERICSERV;


                          Добавлено
                          Цитата shm @
                          А ты пробовал этот вариант?

                          Какой? AI_V4MAPPED | AI_ADDRCONFIG? Так работает уже с AI_ALL.

                          Цитата shm @
                          И да, в WinXP по дефолту ipv6 адреса не используются. Их нужно отдельно включать.

                          Это как? IPv4 DNS-сервер вообще может же вернуть IPv6 адреса правильно?
                          Тогда что включать?

                          Добавлено
                          Неужели придется самому составлять DNS-запросы? Если нет функций для ОС<Висты?

                          Добавлено
                          Цитата shm @
                          И да, в WinXP по дефолту ipv6 адреса не используются. Их нужно отдельно включать.

                          netsh interface ipv6 install ?
                          Тогда знаю да.
                          Сообщение отредактировано: neokoder -
                            Цитата neokoder @
                            Столкнулся с такой проблемой. На компе Win7 x64 getaddrinfo не возвращает IPv6-адреса,


                            Цитата neokoder @
                            Неужели придется самому составлять DNS-запросы? Если нет функций для ОС<Висты?

                            Непонятен перескок на ОС<Висты <_<
                            В заголовке темы заявлена Win7 x64 <_<
                            Цитата JoeUser @
                            Дубль темы в одном разделе - это "проституция бандитизЪм и недобор в армию" (С) ДМБ :D
                            Мож с форумом че?

                            А где дубль? Ссылку можно?
                              ExpandedWrap disabled
                                //  DNS_STATUS
                                //WINAPI
                                //DnsQuery_W(
                                //    IN      PCWSTR          pszName,
                                //    IN      WORD            wType,
                                //    IN      DWORD           Options,                        
                                //    IN      PIP4_ARRAY      aipServers            OPTIONAL,
                                //    IN OUT  PDNS_RECORD *   ppQueryResults        OPTIONAL,
                                //    IN OUT  PVOID *         pReserved             OPTIONAL
                                //    );
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0360 ]   [ 16 queries used ]   [ Generated: 16.04.24, 21:48 GMT ]