Есть функция gethostbyname(), которая возвращает указатель на структуру hostent, откуда мы можем извлечь ip-адрес машины.
Но если у машины несколько Ip-адресов (например несколько сетевых адаптеров). Как в этом случае узнать все IP-адреса машины?
P.S. В принципе я догадываюсь, как это можно сделать: в hostent есть поле h_addr_list.
В нем находятся все IP адреса сетевых интрефейсов? Проверить это сам я не могу, так как у меня всего один адаптер.
Здравствуйте, c0mbinator, Вы писали:
C>Есть функция gethostbyname(), которая возвращает указатель на структуру hostent, откуда мы можем извлечь ip-адрес машины.
C>Но если у машины несколько Ip-адресов (например несколько сетевых адаптеров). Как в этом случае узнать все IP-адреса машины?
C>P.S. В принципе я догадываюсь, как это можно сделать: в hostent есть поле h_addr_list.
C>В нем находятся все IP адреса сетевых интрефейсов? Проверить это сам я не могу, так как у меня всего один адаптер.
именно там и находится список адресов

а кто мешает назначить несколько IP адресов одному адаптеру?
Здравствуйте, c0mbinator, Вы писали:
C>P.S. В принципе я догадываюсь, как это можно сделать: в hostent есть поле h_addr_list.
C>В нем находятся все IP адреса сетевых интрефейсов? Проверить это сам я не могу, так как у меня всего один адаптер.
[network] Определение своего IP адресаАвтор: butcher
Дата: 19.07.04
Re[7]: Веб-сервер в локальной сетиАвтор: butcher
Дата: 28.06.04
Здравствуйте, butcher, Вы писали:
B>Здравствуйте, c0mbinator, Вы писали:
C>>P.S. В принципе я догадываюсь, как это можно сделать: в hostent есть поле h_addr_list.
C>>В нем находятся все IP адреса сетевых интрефейсов? Проверить это сам я не могу, так как у меня всего один адаптер.
B>[network] Определение своего IP адресаАвтор: butcher
Дата: 19.07.04
B>Re[7]: Веб-сервер в локальной сетиАвтор: butcher
Дата: 28.06.04
ну и на Delphi — до кучи
function GetLocalAddresses(sl: TStrings): boolean;
var
buf: array[0..255] of char;
pHE: PHostEnt; pInAd: PInAddr; pwpc: ^PChar;
begin
sl.BeginUpdate;
try
sl.Clear;
Result := (gethostname(@buf, SizeOf(buf)) = 0);
if not Result then Exit;
pHE := gethostbyname(@buf);
Result := Assigned(pHE);
if not Result then Exit;
pwpc := pointer(pHE^.h_addr_list);
pInAd := pointer(pwpc^);
while (pInAd <> NIL) do begin
sl.Add(StrPas(inet_ntoa(pInAd^)));
pwpc := pointer(PChar(pwpc) + SizeOf(pointer));
pInAd := pointer(pwpc^);
end;
finally
sl.EndUpdate;
end;
end;