Monday, 14 September 2009

Obtener la lista de IP's de nuestro equipo mediante Delphi y Winsock

Alguna que otra vez me he encontrado en la situación de querer localizar rápidamente las IP que tengo en mi equipo. Para esto siempre tengo que ir al intérprete de comandos y ejecutar ipconfig para devolver la lista de mis IP's.
Aquí os dejo una pequeña aplicación que incorpora el script que más abajo os pongo, y que sirve para devolver la lista de IP's de nuestro equipo utilizando Winsock. Es relativamente sencillo trabajar con ésta librería, y nos permite de una manera fácil y cómoda acceder a los registros de nuestro PC. Con la siguiente aplicación "GetIP", podréis visualizar vuestras IP y vuestro Host Name todo el rato, ya que dispone de un pequeño refresh de 10 segundos los cuáles escanea las IP's otra vez.
La aplicación siempre se queda en primer plano para evitar tener que recuperarla cada vez:

El código fuente es el que sigue:


uses
Winsock;

procedure TForm1.GetIPs();
const
HostNameLength = 127;
var
PHostName: PChar;
WSAData: TWSAData;
Host: PHostEnt;
InAddr: TInAddr;
IPAddr: PChar;
begin
Memo1.clear;
if WSAStartup($0101, WSAData) <> 0 then
exit;
GetMem(PHostName, HostNameLength + 1);
try
if GetHostName(PHostName, HostNameLength) <> 0 then
exit;
Host := GetHostByName(PHostName);
Memo1.Lines.add('****** HOST NAME ******');
Memo1.Lines.add(Host.h_name);
Memo1.Lines.add('***********************');
Memo1.Lines.add('');
Memo1.Lines.add('****** IP ADDRESS ******');
if Host = nil then
exit
else
begin
with Host^ do
begin
IPAddr := h_addr^;
while IPAddr <> h_name do
begin
InAddr.S_addr := LongInt(PLongInt(IPAddr)^);
Memo1.lines.Add(inet_ntoa(InAddr));
IPAddr := IPAddr + h_length;
end;
end;
end;
Memo1.Lines.add('***********************');
finally
FreeMem(PHostName, HostNameLength + 1);
WSACleanup;
end;
end;



0 comments:

Post a Comment