Форум: "Сети";
Текущий архив: 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