Cómo obtener direcciones de red

Última modificación el Viernes, 24 abril 2009 07:52 Autor: ProgramadorWeb Domingo, 24 agosto 2008 07:50

Cómo obtener direcciones de red

Cómo obtener direcciones de red   abcamber60 Cómo obtener direcciones de red


Todos los adaptadores de red Ethernet, que es el tipo más habitual, cuentan con una dirección única conocida como MAC, así como con una dirección IP en caso de que forme parte de una red TCP/IP. Estos datos pueden ser necesarios y útiles en diversos casos, tanto para identificar al equipo de forma única, con la dirección MAC, como para saber la subred TCP/IP de que forma parte el equipo y encontrar a su servidor.


La función NetBios(), cuyo prototipo y estructuras asociadas se encuentran en el módulo Nb30 de Delphi, permite ejecutar diferentes comandos de servicios de red, entre ellos uno llamado NCBASTAT que sirve para obtener distinta información acerca del estado y configuración de los adaptadores.


Para poder recuperar la dirección MAC, que es lo que interesa, básicamente hay que preparar una estructura TNcb, con los parámetros apropiados, y a continuación llamar a NetBios() para obtener la información. En este caso habría que facilitar el número de adaptador, un nombre y la dirección y longitud de un bloque de memoria en el que se devolverá el resultado. Tras la llamada, el miembro adapter_address, que es una matriz de seis elementos, contendrá los bytes que identifican a la tarjeta.


Para obtener la dirección IP propia, lo más fácil es usar las funcionesWindows sockets . Básicamente se llama a gethostname(), para obtener el nombre de nuestro ordenador, y a continuación a gethostbyname(), que devuelve una estructura de datos en las que están contenidas las direcciones IP. Para convertir esas direcciones, que están almacenadas en cuatro bytes, en una cadena, lo más simple es usar la función inet_ntoa(). Todas estas funciones están documentadas en la API de Windows.


Puede ver un ejemplo colocando un botón en un formulario e incluyendo el código del Listado 1. Al pulsar el botón se obtiene y muestra tanto la dirección MAC como la IP. Para mantener la simplicidad tan sólo se obtiene la primera dirección de cada tipo, pero bastaría un bucle para recuperar otras que pudieran existir en caso de que el sistema contase con varios adaptadores.


**************************** OJO LISTADO **************************


Uses Nb30, Winsock;


procedure TForm1.Button1Click(Sender: TObject);


Type


// Una estructura que une el estado del adaptador


// con una matriz de estructuras TNameBuffer


ASTAT = record


adapt: TAdapterStatus;


NameBuff: Array[0..29] Of TNameBuffer;


end;


Var


Adaptador: ASTAT;


Ncb: TNCB;


Nombre: String;


DatosSocket: WSAData;


BloqueIP: PHostEnt;


DirIP: in_addr;


Mensaje: String;


begin


With Ncb Do // Inicializamos la estructura para ejecutar


Begin // el comando NCBSTAT


ncb_command := char(NCBASTAT);


ncb_lana_num := char(0); // asumimos que sólo hay un adaptador


ncb_callname := ‘*’; // y no facilitamos nombre


ncb_buffer := @Adaptador; // dirección de la estructura para obtener


ncb_length := sizeof(Adaptador); // los datos devueltos


End;


Netbios(@Ncb); // Llamada a NetBios


// Mostramos los datos


With Adaptador.adapt Do


Mensaje := ‘La dirección MAC es: ‘ +


IntToHex(Integer(adapter_address[0]), 2) +


IntToHex(Integer(adapter_address[1]), 2) +


IntToHex(Integer(adapter_address[2]), 2) +


IntToHex(Integer(adapter_address[3]), 2) +


IntToHex(Integer(adapter_address[4]), 2) +


IntToHex(Integer(adapter_address[5]), 2) + #13#10;


WSAStartup($0101, DatosSocket); // Inicializamos Windows sockets


SetLength(Nombre, MAX_PATH); // y obtenemos el nombre de nuestro equipo


gethostname(PChar(Nombre), MAX_PATH);


// que usamos para obtener un bloque de información sobre IP


BloqueIP := gethostbyname(PChar(Nombre));


// del cual recuperamos la dirección


CopyMemory(@DirIP, (BloqueIP^).h_addr_list^, BloqueIP.h_length);


Mensaje := Mensaje + ‘Direccion IP: ‘ + inet_ntoa(DirIP); // y la mostramos


ShowMessage(Mensaje);


end;


Listado 1. Código Delphi para recuperar las direcciones MAC e IP de un ordenador





Si te ha parecido interesante únete a nuestra comunidad de FACEBOOK y compartelo con tus amigos.





Articulos relacionados:


No olvides compartir Cómo obtener direcciones de red en tus redes sociales :-)
     

2 Comentarios

  1. Pascu   |  Martes, 30 junio 2009 a 2:53 pm

    Graciassssss

  2. pablo   |  Viernes, 17 julio 2009 a 4:16 pm

    no e entendido nada de lo q pone

Enviar comentario