Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как от DNS получить IP хоста 
:(
    Опции темы
_hunter
  Дата 27.10.2004, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



собственно вопрос.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alex
Дата 27.10.2004, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Код
uses winsock  
-------  
function IPAddrToName(IPAddr : String): String;  
var  
 SockAddrIn: TSockAddrIn;  
 HostEnt: PHostEnt;  
 WSAData: TWSAData;  
begin  
 WSAStartup($101, WSAData);  
 SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));  
 HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);  
 if HostEnt<>nil then  
 begin  
   result:=StrPas(Hostent^.h_name)  
 end  
 else  
 begin  
   result:='';  
 end;  
end;  


Пример использования:

Код
procedure TForm1.Button1Click(Sender: TObject);  
begin  
 Label1.Caption:=IPAddrToName(Edit1.Text);  
end;


Взято с Исходников.ru http://www.sources.ru



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
_hunter
Дата 27.10.2004, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



спасибо, конечно,но мне наоборот нужно :)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
p0s0l
Дата 27.10.2004, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Тогда HostEnt := gethostbyname(PChar(HostName));



--------------------
С уважением, г-н Посол.
PM   Вверх
Alex
Дата 27.10.2004, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Для получения IP нужно:
Код
uses winsock;

function HostToIP(Name: string): String;
var
 wsdata : TWSAData;
 hostName: array [0..255] of char;
 hostEnt : PHostEnt;
 addr : PChar;
begin
 Result:= '';
 WSAStartup($0101, wsdata);
 try
   GetHostName(HostName, SizeOf(hostName));
   StrPCopy(hostName, Name);
   hostEnt:= gethostbyname(hostName);
   if not Assigned(hostEnt             ) then Exit;
   if not Assigned(hostEnt^.h_addr_list) then exit;
   addr:= hostEnt^.h_addr_list^;
   if not Assigned(addr                ) then Exit;
   Result:= Format('%d.%d.%d.%d', [Ord(addr[0]), Ord(addr[1]), Ord(addr[2]), Ord(addr[3])]);
 finally
   WSACleanup;
 end
end;

Пример использования:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(HostToIp('alex-co.com.ru'));
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
_hunter
Дата 28.10.2004, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



может я неправильно понял, но gethostbyname() берет IP _локально_. и уж точно я не понял куда ему адрес DNS пихать


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alex
Дата 28.10.2004, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Цитата(_hunter @ 28.10.2004, 13:03)

может я неправильно понял, но gethostbyname() берет IP _локально_. и уж точно я не понял куда ему адрес DNS пихать

Ну, что ты непонял? Я дал тебе функцию, которой на вход подается имя в DNS, а она возвращает тебе IP.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
_hunter
Дата 28.10.2004, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



проблема в том, что функция берет IP из системы ( возможно опрашивает DNS домена ) и если его там нет, а адрес есть -- получим облом
+ а если я хочу опросить другой DNS (не домена / провайдера)?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




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


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

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