Определение своего IP адреса

Советы » TCP/IP » Определение своего IP адреса

function

my_ip_address: longint; const

bufsize = 255; var

buf: pointer; RemoteHost: PHostEnt; (* Не освобождайте это! *) begin

buf := nil

; try

getmem(buf, bufsize); winsock.gethostname(buf, bufsize); (* это может работать и без сети *) RemoteHost := Winsock.GetHostByName(buf); if

RemoteHost = nil

then

my_ip_address := winsock.htonl($07000001) (* 127.0.0.1 *) else

my_ip_address := longint(pointer(RemoteHost^.h_addr_list^)^); finally

if

buf <> nil

then

freemem(buf, bufsize); end

; result := winsock.ntohl(result); end

;

Вначале возвращается локальный сетевой адрес компьютера, а затем, если он не равен 127.0.0.1, стандартный IP адрес.

Единственное, что вам необходимо, это наличие winsock.dcu/winsock.pas, так как это не включается в поставку Delphi 1.; необходимый мне код я взял из tcpip component pack (просто вырезал его оттуда).

Дополнение от Eugene:

Данный пример не работает из-за того что не проинициализирована структура TWSAData. если немного подправить эту функцию, то получится примерно следующее:

function

my_ip_address: longint; const

bufsize = 255; WSVer = $101; var

buf: pointer; RemoteHost: PHostEnt; // Не освобождайте это! wsaData: TWSAData; begin

if

WSAStartup(WSVer, wsaData) <> 0 then

begin

my_ip_address := 0; exit; end

; buf := nil

; try

getmem(buf, bufsize); winsock.gethostname(buf, bufsize); // это может работать и без сети RemoteHost := Winsock.GetHostByName(buf); if

RemoteHost = nil

then

my_ip_address := winsock.htonl($07000001) // 127.0.0.1 else

my_ip_address := longint(pointer(RemoteHost^.h_addr_list^)^); finally

if

buf <> nil

then

freemem(buf, bufsize); end

; result := winsock.ntohl(result); end

;

Функция вернет ненулевое значение в случае успеха.

Тестировано под WinXP SP1, D6

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com