2011-09-12 36 views
11

En mi aplicación C#, Quiero obtener mi dirección MAC mediante el uso de NetworkInterface clase como la siguiente:dirección de formato MAC en C#

NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces() 
{ 
    mac = nic.GetPhysicalAddress() 
} 

Pero este código devuelve el MAC sin ':' o cualquier otro separador.

¿Cómo puedo recuperar el MAC en este formato: 88:88:88:88:87:88 utilizando el código anterior solo?

+8

"utilizando el código anterior solo"? Si eso no devuelve la dirección MAC con separadores ... no puede usar eso solo. – BoltClock

+0

Quiero formatearlo. ¿tienes una idea de cómo? – gln

+0

@gln - compruebe la respuesta d donde he formateado la dirección MAC –

Respuesta

25

tratar

mac = string.Join (":", (from z in nic.GetPhysicalAddress().GetAddressBytes() select z.ToString ("X2")).ToArray()); 
+7

consultas Holy LINQ y métodos de extensión, Batman! +1 – BoltClock

+5

en .NET 4 puede ser incluso más corto 'mac = string.Join (": ", nic.GetPhysicalAddress(). GetAddressBytes(). Seleccione (b => b.ToString (" X2 ")));' – Firo

2

La ayuda para el comando muestra una manera:

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.physicaladdress.aspx

PhysicalAddress address = adapter.GetPhysicalAddress(); 
    byte[] bytes = address.GetAddressBytes(); 
    for(int i = 0; i< bytes.Length; i++) 
    { 
     // Display the physical address in hexadecimal. 
     Console.Write("{0}", bytes[i].ToString("X2")); 
     // Insert a hyphen after each byte, unless we are at the end of the 
     // address. 
     if (i != bytes.Length -1) 
     { 
      Console.Write("-"); 
     } 
    } 
    Console.WriteLine(); 
+4

Esto se puede hacer aún más corto: 'BitConverter.ToString (byte [])' hace exactamente este formato. – eFloh

+0

@eFloh: publica eso como una respuesta. – BoltClock

+0

@BoltClock: Esto ya está en la publicación vinculada a continuación y solo se aplica a esta publicación, ya que no produce el resultado solicitado. Consulte [esta respuesta a Cómo obtener la dirección MAC C#] (http://stackoverflow.com/questions/3157246/getting-mac-address-c/3157309#3157309) para obtener una respuesta real. – eFloh

2

Utilizando el comment by eFloh para el uso de BitConverter yo era capaz de hacer lo siguiente (suponiendo mac está predefinido como una cadena).

foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) 
{ 
    mac = BitConverter.ToString(nic.GetPhysicalAddress().GetAddressBytes()).Replace('-', ':'); 

    //Do whatever else necessary with each mac... 
} 
0

intentar algo como esto:

// Insert Colons on MAC 
string MACwithColons = ""; 
for (int i = 0; i < MAC.Length; i++) { 
    MACwithColons = MACwithColons + MAC.Substring(i, 2) + ":"; 
    i++; 
} 
MACwithColons = MACwithColons.Substring(0, MACwithColons.Length - 1); // Remove the last colon 
1

Dónde quiere demostrar que, usted tiene que hacer esto:

txtMac.text=getFormatMac(GetMacAddress()); 
public string GetMacAddress() 

{ 
    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); 
    String sMacAddress = string.Empty; 
    foreach (NetworkInterface adapter in nics) 
    { 
     if (sMacAddress == String.Empty)// solo retorna la mac de la primera tarjeta 
     { 
       IPInterfaceProperties properties = adapter.GetIPProperties(); 
       sMacAddress = adapter.GetPhysicalAddress().ToString(); 
      } 
    } 
    return sMacAddress; 
} 

public string getFormatMac(string sMacAddress) 
{ 
    string MACwithColons = ""; 
    for (int i = 0; i < macName.Length; i++) 
    { 
     MACwithColons = MACwithColons + macName.Substring(i, 2) + ":"; 
     i++; 
    } 
    MACwithColons = MACwithColons.Substring(0, MACwithColons.Length - 1); 

    return MACwithColons; 
} 

Cuestiones relacionadas