Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2013, 09:39   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Получить IP-адрес активного подключения

Подскажите как это сделать. насколько я понял
Код:
function GetLocalIP: string;
var
  WSAData: TWSAData;
  P: PHostEnt;
  Name: array[0..$FF] of Char;
begin
  WSAStartup($0101, WSAData);
  GetHostName(Name, $FF);
  P := GetHostByName(Name);
  Result := inet_ntoa(PInAddr(P.h_addr_list^)^);
  WSACleanup;
end;
получает IP-адрес последнего включенного сетевого адаптера, хотя в том нет сетевого кабеля.
Shouldercannon вне форума Ответить с цитированием
Старый 30.01.2013, 11:55   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

1:
Код:
procedure TForm1.Button1Click(Sender: TObject); 
type 
TaPInAddr = Array[0..10] of PInAddr; 
PaPInAddr = ^TaPInAddr; 
var 
phe: PHostEnt; 
pptr: PaPInAddr; 
Buffer: Array[0..63] of Char; 
I: Integer; 
GInitData: TWSAData; 
begin 
WSAStartup($101, GInitData); 
Memo1.Clear; 
GetHostName(Buffer, SizeOf(Buffer)); 
Memo1.Lines.Add(Buffer); // HostName 
phe := GetHostByName(Buffer); 
if phe = nil then Exit; 
pPtr := PaPInAddr(phe^.h_addr_list); 
I := 0; 
while pPtr^[I] <> nil do 
begin 
Memo1.Lines.Add(inet_ntoa(pptr^[I]^)); //Add IP-addresses 
Inc(I); 
end; 
WSACleanup; 
end;
2:
Код:
uses Winsock;



function GetLocalPs: TStringList;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: array[0..63] of Char;
  I: Integer;
  GInitData: TWSAData;
  IPs: TStringList;
begin
  IPs := TStringList.Create;
  WSAStartup($101, GInitData);
  GetHostName(Buffer, SizeOf(Buffer));
  phe := GetHostByName(buffer);
  if phe = nil then IPs.Add('No IP found')
  else
  begin
    pPtr := PaPInAddr(phe^.h_addr_list);
    I := 0;
    while pPtr^[I] <> nil do
    begin
      IPs.Add(inet_ntoa(pptr^[I]^));
      Inc(I);
    end;
  end;
  WSACleanup;
  Result := IPs;
end;

procedure TForm1.RzBitBtn10Click(Sender: TObject);
var sl: TStringList;
begin
  sl := TStringList.Create;
  sl := GetLocalPs;
  ShowMessage(sl.Text);
  sl.Free;
end;
не один не проверял..)
Кольша вне форума Ответить с цитированием
Старый 30.01.2013, 12:44   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Примеры работают, но придётся другим способом IP-получать, так как нужный может находится на любой позиции в списке.
Shouldercannon вне форума Ответить с цитированием
Старый 30.01.2013, 13:03   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

2 пример с утечкой 1 TStringList

что значит нужный? - критерии нужности в студию
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 30.01.2013 в 13:06.
Slym вне форума Ответить с цитированием
Старый 30.01.2013, 15:26   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
2 пример с утечкой 1 TStringList

что значит нужный? - критерии нужности в студию
Нужный - тоесть тот, через который происходит обмен данных, IP активного сетевого адаптера.
Shouldercannon вне форума Ответить с цитированием
Старый 30.01.2013, 16:38   #6
Anonymous1235
Пользователь
 
Регистрация: 30.01.2013
Сообщений: 10
По умолчанию

Обмен данными может происходить сразу через несколько активных адаптеров и ip у них будут разные.
Возможно это тебе поможет.
Anonymous1235 вне форума Ответить с цитированием
Старый 30.01.2013, 17:18   #7
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

у меня активно 3 интерфейса
1. локальная сетка - локальные сервера 192.168.0.0/16 10.0.0.0/8 0.0.0.0/0
2. Ovpn - удаленные сервера 10.1.1.0/24 0.0.0.0/0
3. мопед - порно сервера 0.0.0.0/0

и каждый активен
есть статичная таблица маршрутизации, а на рабочем столе батнички чтоб дефолт перекидывать (иногда)
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить IP адрес домена zver777 Работа с сетью в Delphi 5 04.09.2012 22:00
Не могу получить запрос пароля для подключения к firebird toboom БД в Delphi 0 06.12.2011 16:21
Получить ip-адрес по почте. D.O.G Общие вопросы Delphi 4 13.12.2010 12:13
Получить имя активного дочернего окна в MDI JeyKip Общие вопросы C/C++ 4 05.12.2010 02:59
Получить адрес метода Altera Общие вопросы Delphi 2 02.10.2009 13:43