Как получить IP-адрес компьютера, средствами Delphi через Socket API?

Доброго времени суток, уважаемые читатели блога SoftMaker.kz. Как вам известно, сегодня многие люди хотят иметь доступ к компьютерам локальной сети (LAN) или сети Интернет. Так же многие хотят уметь создавать программы для работы в локальной сети (LAN) или сети Интернет. В статье из этой же серии уже было написано, как программно получить внешний IP адрес средствами Delphi. Сегодня мы рассмотрим ещё одну из наиболее интересных задач это получение IP-адреса компьютера, подключенному к локальной сети (LAN).

Весь интернет построен на TCP/IP связи. Часть TCP описывает, как два компьютера могут установить соединение друг с другом для передачи данных. IP часть отвечает за передачу и маршрутизацию сообщений между узлами Internet. Каждый компьютер, имеет свой уникальный IP-адрес, что позволяет другим узнать путь к любому компьютеру в сети.

Чтобы получить IP-адрес компьютера, который вы используете при подключении к локальной сети (LAN) мы должны вызывать некоторые функции API определеные в модуле Winsock. Мы создадим функцию GetIPFromHost, которая вызывает несколько Winsock API функций для того, чтобы получить IP-адрес.

Прежде чем использовать WinSock функцию, мы должны открыть сессию. Сессия открывается с помощью функции WSAStartup. В конце функции GetIPFromHost вызывается функци SACleanup, чтобы прекратить использование сокетов API Windows.

Чтобы получить IP адрес компьютера, подключённого к локальной сети (LAN) мы должны использовать функцию GetHostByName в сочетании с функцией GetHostName. Каждый компьютер является хостом (Host), и мы можем получить имя компьютера воспользовавшись функцией GetHostName. Теперь, получив имя компьютера, мы получим и его IP-адрес с помощью функции GetHostByName. Откройте Delphi и бросьте на форму одну кнопку и два поля Edit. Приведенный ниже код нужен, чтобы получить адрес IP, который использует Ваш компьютер.

uses Winsock; 

function GetIPFromHost
(var HostName, IPaddr, WSAErr: string): Boolean; 
type 
  Name = array[0..100] of Char; 
  PName = ^Name; 
var 
  HEnt: pHostEnt; 
  HName: PName; 
  WSAData: TWSAData; 
  i: Integer; 
begin 
  Result := False;     
  if WSAStartup($0101, WSAData) <> 0 then begin 
    WSAErr := 'Сокет не отвечает!"'; 
    Exit; 
  end; 
  IPaddr := ''; 
  New(HName); 

  if GetHostName(HName^, SizeOf(Name)) = 0 then
  begin 
    HostName := StrPas(HName^); 
    HEnt := GetHostByName(HName^); 
    for i := 0 to HEnt^.h_length - 1 do 
     IPaddr :=
      Concat(IPaddr,
      IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.'); 
    SetLength(IPaddr, Length(IPaddr) - 1); 
    Result := True; 
  end
  else begin 
   case WSAGetLastError of
    WSANOTINITIALISED:WSAErr:='WSANotInitialised'; 
    WSAENETDOWN      :WSAErr:='WSAENetDown'; 
    WSAEINPROGRESS   :WSAErr:='WSAEInProgress'; 
   end; 
  end; 
  Dispose(HName); 
  WSACleanup; 
end; 

Пропишите в обработчике события кнопки следующее:

procedure TForm1.Button1Click(Sender: TObject); 
var 
  Host, IP, Err: string; 
begin 
  if GetIPFromHost(Host, IP, Err) then begin 
    Edit1.Text := Host; 
    Edit2.Text := IP; 
  end 
  else 
    MessageDlg(Err, mtError, [mbOk], 0); 
end; 

Получить IP


Примерно такой же появляется диалог формы, когда выполняется GetExternalIP — программа для получения внешнего IP адреса.

5 ответы
  1. Арина говорит:

    Delphi стала изучать совсем недавно и как на зло нет ни одного хорошего учебника. Ладно хоть вы спасли. А то мне надо было как раз в курсовой работе делать привязку по адресу. Знаю хоть чем пользоваться.

  2. Softmaker говорит:

    Арина, вы наверное плохо искали учебники по Delphi. Конечно, я доволен, что вам помогла статья как получить ip-адрес.

  3. Анна говорит:

    Скажите, а можно как то определить, в каком регионе находится компьютер? Просто IP то мы найдем, а вот как мне вывести регион, я понятия не имею, но передо мной стоит именно такая задача и мне как то надо осуществить привязку IP к региону..

  4. Softmaker говорит:

    Анна, чтобы найти в каком регионе находится компьютер, нужно определить в каком диапазоне IP-адресов он находится. Каждый диапазон определяет регион. Диапазоны IP-адресов вы можете найти в интернете.

  5. Softmaker говорит:

    Арина, вы наверное плохо искали учебники по Delphi. Конечно, я доволен, что вам помогла статья как получить ip-адрес.

Комментарии закрыты.