Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

HostName   Найти похожие ветки 

 
Sicilla   (2004-10-19 17:40) [0]

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


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

gethostbyaddr


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

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


 
Verg ©   (2004-10-19 22:45) [3]

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 23:53) [4]

Если я правильно Вас понял, то
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-20 00:21) [5]

Если предположить, что 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;


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


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


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

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


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

Большое Спасибо! Но, к сожалению, на свой вопрос я решил ответить сзади :)) А моя проблема такая была. Когда я подключен к интернету, на вкладке свойства подключения есть две строки: 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 сервера? Я думал у них (серверов) какое-то особое одно имя, а оказалось уникальное. Заренее спасибо!


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

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


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

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

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


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

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



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.036 c
1-1104263376
forgery
2004-12-28 22:49
2005.01.16
конвертация графических форматов


3-1103022631
yaric
2004-12-14 14:10
2005.01.16
Длительные процедуры на сервере


8-1097061654
Ljosha
2004-10-06 15:20
2005.01.16
Наложение фигур


14-1103726378
NeyroSpace
2004-12-22 17:39
2005.01.16
DigiNet + Ati RADEON 9200 не работает


1-1103913884
Muhan
2004-12-24 21:44
2005.01.16
Как задать паузу?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский