Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение к DNS - серверу, Обращение к DNS - серверу 
:(
    Опции темы
Mid1987
Дата 10.4.2012, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.1.2011

Репутация: нет
Всего: нет



Доброго времени суток, форумчане!
Вопрос: как в Builder обратиться к DNS - серверу (т. е. послать ему запрос в виде "google.ru") и получить от него ответ (IP адрес). Заранее благодарю!
Надо к тому же еще как - то задавать адрес (IP) DNS сервера.
PM MAIL   Вверх
Олег2005
Дата 11.4.2012, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Все зависит от того, где ваш DNS находится. 
В локальной сети или вне ее.
Если в локальной - то узнается его MAC-адрес через ARP-запрос, и потом по этому адресу шлется запрос DNS.
А вообще то для этой цели работает gethostbyname() - именно эта функция делает все вышеназванное.
PM MAIL WWW MSN   Вверх
Mid1987
Дата 11.4.2012, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.1.2011

Репутация: нет
Всего: нет



Задача исходит из то что, в локальной сети может находиться несколько DNS - серверов. Функция gethostbyname обращается к установленому по умолчанию серверу, а как этой функции указать определенный сервер даже имея MAC - адрес?
PM MAIL   Вверх
disputant
Дата 11.4.2012, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



PM MAIL   Вверх
Mid1987
Дата 11.4.2012, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.1.2011

Репутация: нет
Всего: нет



А, нет примера кода с этой функцией API?
PM MAIL   Вверх
Mid1987
Дата 12.4.2012, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.1.2011

Репутация: нет
Всего: нет



За ценную наводку disputant огромное спасибо!

Привожу решение с помощью API - функции DnsQuery (эта функция доступна начиная с Windows 2000, в отличие от DnsQueryEx которая доступна с Windows 8), решение собиралось под Builder XE2:

Код

#include <Windns.h>
#pragma comment (lib, "Dnsapi.lib")
 
        DNS_STATUS Status;
        PIP4_ARRAY SrvList = NULL;
        PDNS_RECORD DnsRecord;
        IN_ADDR ipaddr;
 
        SrvList = (PIP4_ARRAY) LocalAlloc(LPTR,sizeof(IP4_ARRAY));
        SrvList->AddrCount = 1;
        SrvList->AddrArray[0] = inet_addr("000.000.000.000"); // Тут задаем IP - адрес DNS - сервера
 
        Status = DnsQuery(L"google.ru", // Тут задаем адрес хоста, который надо преобразовать
                          DNS_TYPE_A,
                          DNS_QUERY_BYPASS_CACHE,
                          SrvList,
                          &DnsRecord,
                          NULL);
 
        if (Status){
            Form1->Memo1->Lines->Add("Error dns");
        } else {
            ipaddr.S_un.S_addr = (DnsRecord->Data.A.IpAddress);
            Form1->Memo1->Lines->Add(inet_ntoa(ipaddr));
            DnsRecordListFree(DnsRecord, freetype);
        }
        LocalFree(SrvList);


Оригинальный пример на MSDN:
http://support.microsoft.com/kb/831226

Это сообщение отредактировал(а) Mid1987 - 12.4.2012, 02:55
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0678 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.