На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Служба dns: запрос через DnsQuery_W , Пример функции domain_name_to_internet_4_name.
      Вот пример функции bool domain_name_to_internet_4_name(CStringW domain_name, CStringA &internet_name).

      В функции есть недочёты:
      1. берётся первый ipv4 адрес из списка результатов.

      ExpandedWrap disabled
        bool domain_name_to_internet_4_name(CStringW domain_name, CStringA &internet_name)
        {
            const size_t CONST_MESSAGE_LENGTH = 10000;
         
            wchar_t local_domain_name_unicode[CONST_MESSAGE_LENGTH];
            
            ZeroMemory(local_domain_name_unicode,sizeof(wchar_t)*CONST_MESSAGE_LENGTH);
         
            if(IdnToAscii(0,domain_name,domain_name.GetLength(),local_domain_name_unicode,CONST_MESSAGE_LENGTH)==0)
            {
                const int local_error_message_size = 10000;
                wchar_t local_error_message[local_error_message_size];
         
                const int local_system_error_message_size = local_error_message_size-1000;
                wchar_t local_system_error_message[local_system_error_message_size];
         
                wcscpy_s(local_system_error_message,local_system_error_message_size,L"IdnToAscii завершилась неудачей");
         
                CString local_time_string = CTime::GetCurrentTime().FormatGmt("%d/%m/%y %H:%M:%S GMT");
         
                wsprintf((wchar_t*)local_error_message, L"Сетевая ошибка -- %s -- %s\r\n", local_system_error_message, local_time_string.GetBuffer());
         
                MessageBox(0,local_error_message,CString(L"Error"),MB_ICONERROR);
         
                return false;
            }
         
        //  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
        //    );
         
         
            PDNS_RECORD   ppQueryResults;
         
            ZeroMemory(&ppQueryResults,sizeof(ppQueryResults));
         
            if(DnsQuery_W(local_domain_name_unicode, DNS_TYPE_A, 0, NULL, &ppQueryResults,NULL)==ERROR_SUCCESS)
            {
                for(PDNS_RECORD ptr=ppQueryResults; ptr != NULL ;ptr=ptr->pNext)
                {
                    if(ptr->wType==DNS_TYPE_A)
                    {
                        if(ptr->wDataLength!=0)
                        {
                            char local_address_buffer[100];
                            inet_ntop(AF_INET,&ptr->Data.A.IpAddress,local_address_buffer,100);
                            internet_name = local_address_buffer;
                        
                            return true;
        //                  MessageBoxA(0,internet_name,CStringA("Information"),MB_ICONINFORMATION);
                        }
                    }
                }
         
                DnsFree(ppQueryResults,DnsFreeRecordList);
         
                return true;
            }
         
            return false;
        }
      Сообщение отредактировано: Kozlov_Sergey -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0173 ]   [ 16 queries used ]   [ Generated: 27.04.24, 03:24 GMT ]