Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

HostName [D5, WinXP]


Sicilla ©   (2004-10-19 17:40:00) 

Добрый день мастера! Такой вопрос. Есть IP адрес компа. Как узнать его имя, тобишь HostName? Заранее спасибо


Sicilla   (2004-10-29 13:01:00) [1]

Что бы понять, куда я подцепился. Глупо? А нет. Мне просто это надо знать. Я подключен к А или к Б.


Piter   (2004-10-29 00:24:00) [2]

А нафига тебе нужно знать IP адрес сервера? Этот сервер будет твоим шлюзом в интернет. Он будет виден  по ipconfig /all. А вот как вытащить этот адрес - я не знаю.

Ты лучше скажи - зачем?


Sicilla   (2004-10-28 21:52:00) [3]

Если не трудно, кто-нибудь подскажите, плиз!


Sicilla   (2004-10-20 05:42:00) [4]

Большое Спасибо! Но, к сожалению, на свой вопрос я решил ответить сзади :)) А моя проблема такая была. Когда я подключен к интернету, на вкладке свойства подключенияесть две строки: IP сервера и IP клиента. Адрес клиента я получаю таким лбразом:
function GetIPAddress(name: string): string;
var
WSAData: TWSAData;
p: PHostEnt;
begin
WSAStartup(WINSOCK_VERSION, WSAData);
p := GetHostByName(PChar(name));
Result := inet_ntoa(PInAddr(p.h_addr_list^)^);
WSACleanup;
end;

Label2.Caption := 'Ваш IP адрес: ' + GetIPAddress('');


А как получить IP сервера? Я думал у них (серверов) какое-то особое одно имя, а оказалось уникальное. Заренее спасибо!


Verg   (2004-10-20 00:33:00) [5]


> Сетевой порядок байтов, это представление типа 192.168.1.2
> в виде 3232235779?


Сетевой порядок байт - это когда слово (4-байтное, например) распологается в памяти начиная со старшего по весу байта и так далее в порядке уменьшения старшинства в слове. (BIG_ENDIAN)
А архитектуре Intel x86, например, слова распологаются наоборот - начиная с млашего и так далее, в порядке увеличения старшинства в слове. (LITTLE_ENDIAN). Таким образом, чтобы представить слово в сетевом порядке байт на процессоре с LITTLE_ENDIAN, необходимо зеркально поменять все байты в слове местами.
для того, чтобы не заморачиваться на endian-ах, существуют фукции сетевого  ядра:

htonl, htons - для преобразования из порядка байт хоста в сетевой для 4-х и 2-х байтовых слов соотв.
ntohl, ntohs - для преобразования из сетевого порядка в порядок байт хоста.


Verg   (2004-10-20 00:21:00) [6]

Если предположить, что Add содержит IP адрес в виде '192.168.0.2', то

> function GetIPName(Add: string): string;
> var
> Host: PHostEnt;
> Addr : cardinal;
> begin
>     addr := inet_addr( pchar(add) ); // Эта ф-ция преобразует IP из текстового вида в cardinal сразу в сетевом порядке байт
>     Host := gethostbyaddr(@addr,SizeOf(Addr),AF_inet);
>     if Host <> nil then
             Result := Host.h_name
      else
             Result := '<unknown>';

> end;


Sicilla   (2004-10-19 23:53:00) [7]

Если я правильно Вас понял, то
function GetIPName(Add: string): string;
var
Host: PHostEnt;
Addr : cardinal;
begin
    addr := strtoint64(add);
    Host := gethostbyaddr(@addr,SizeOf(Addr),AF_inet);
    if Host <> nil then addr2 := Host.h_name; // это то, что тебе надо
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    SS := edit1.Text;
    SS := IP2HEX(SS);
    label5.Caption := GetIPName(SS) ;
end;

Сетевой порядок байтов, это представление типа 192.168.1.2 в виде 3232235779? И почему у меня всегда Host = nil? Что я не так понял? Заранее спасибо


Verg   (2004-10-19 22:45:00) [8]

var
 Host: PHostEnt;
 Addr : crdinal; // IP адрес. д.б. представлен в сетевом порядке байтов

 Host := gethostbyaddr(@Addr,            // указатель на Addr
                                   SizeOf(Addr), // размер этого Addr
                                   AF_INET       //  пароль :))) если серьезно, то здесь ты сообщаешь что за адрес содержится в Addr.В данном случае говорим, что Inetrnetwork или просто IP
                               );

 if Host <> nil then
   Host.h_name // это то, что тебе надо


Sicilla   (2004-10-19 22:25:00) [9]

Чего-то я не врубаюсь с параметрами этой функции. Если не трудно, то киньте кусочек кода. Заранее спасибо


Тестировщица   (2004-10-19 19:11:00) [10]

gethostbyaddr


Наверх

Титульная страница Поиск, карта сайта Написать письмо