Páginas

jueves, 6 de octubre de 2011

Obtener la dirección MAC con C#

mac addressHace mucho que no hacia una entrada sobre códigos fuente pero últimamente muy de vez en cuando me piden algunas cosas un poco curiosas para sacar alguna información rápida y en este caso ocupamos sacar el número de serie del disco duro de un montón de PCs y su dirección MAC en la red así que pidieron una aplicación que lo sacará. Dado que son computadoras con Windows use .NET para lograrlo y como me pareció interesante y posiblemente algún día futuro querré explicar como lo hice y se me va a olvidar, procedo a documentar el asunto. Empecemos por el asunto de la MAC address que es el más sencillo de los dos casos.


Para obtener la información de las tarjetas de red necesitamos el espacio de nombres System.Net.NetworkInformation para poder utilizar los métodos GetAllNetworkInterfaces y GetPhysicalAddress para averiguar la información que necesitamos.


A modo de ejemplo dejo la siguiente clase, es muy sencilla pero no se olviden de agregar los espacios de nombres System.Collections y System.Net.NetworkInformation para que funcione.


public static ArrayList getMacAddress()
{
// Contador para un ciclo
int i = 0;
// Colección de direcciones MAC
ArrayList DireccionesMAC = new ArrayList();
// Información de las tarjetas de red
NetworkInterface[] interfaces = null;
// Obtener todas las interfaces de red de la PC
interfaces = NetworkInterface.GetAllNetworkInterfaces();
// Validar la cantidad de tarjetas de red que tiene
if (interfaces != null && interfaces.Length > 0)
{
// Recorrer todas las interfaces de red
foreach (NetworkInterface adaptador in interfaces)
{
// Obtener la dirección fisica
PhysicalAddress direccion = adaptador.GetPhysicalAddress();
// Obtener en modo de arreglo de bytes la dirección
byte[] bytes = direccion.GetAddressBytes();
// Variable que tendra la dirección visible
string mac_address = string.Empty;
// Recorrer todos los bytes de la direccion
for (i = 0; i < bytes.Length; i++)
{
// Pasar el byte a un formato legible para el usuario
mac_address += bytes[i].ToString("X2");
if (i != bytes.Length-1)
{
// Agregar un separador, por formato
mac_address += "-";
}
}
// Agregar la direccion MAC a la lista
DireccionesMAC.Add(mac_address);
}
}
// Valor de retorno, la lista de direcciones MAC
return DireccionesMAC;
}

Si además de la MAC necesitamos más datos porque la PC tenga más de una tarjeta de red y queremos diferenciarlas fácilmente podemos recurrir a propiedades extra como Description o NetworkInterfaceType entre otras. En esta entrada mostre una pantalla de mi pequeño ejemplo mostrando información en pantalla. La MAC esta censurada porque ¿Y ustedes para que quieren saber la MAC de esa PC?

2 comentarios:

Por favor trata de escribir bien, no te pido que no te falte ni un acento pero por favor evita escribir como metroflogger o facebookero. Este blog es un sitio decente. Gracias.