Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.82.167] |
|
Сообщ.
#1
,
|
|
|
Вот пример функции bool domain_name_to_internet_4_name(CStringW domain_name, CStringA &internet_name).
В функции есть недочёты: 1. берётся первый ipv4 адрес из списка результатов. 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; } |