una saber partir obtener mac hacer dirección direccion cómo como asociada address c# networking

c# - obtener - cómo saber dirección ip a partir de la dirección mac



¿Cómo obtengo la dirección física(MAC) de una dirección IP usando C#? (4)

Enganche al subsistema WMI. Algún código de VBScript para ir en la dirección correcta está aquí

Desde C #, quiero hacer el equivalente de lo siguiente:

arp -a |findstr 192.168.1.254

Alternativamente, la respuesta podría llamar a la función SendARP y obtener los resultados.

Esto permitirá que mi aplicación haga algún otro procesamiento que requiera la dirección MAC.


Para encontrar el tuyo:

Agregue una referencia a System.Management

ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection mcCol = mc.GetInstances(); foreach (ManagementObject mcObj in mcCol) { Console.WriteLine(mcObj["Caption"].ToString()); Console.WriteLine(mcObj["MacAddress"].ToString()); }

No estoy seguro de encontrar el de otro dispositivo.


SendARP P / Invoke es como esto:

[DllImport("iphlpapi.dll", ExactSpelling=true)] public static extern int SendARP( int destIp, int srcIP, byte[] macAddr, ref uint physicalAddrLen );

PInvoke.NET tiene este ejemplo:

IPAddress dst = IPAddress.Parse("192.168.2.1"); // the destination IP address byte[] macAddr = new byte[6]; uint macAddrLen = (uint)macAddr.Length; if (SendARP(BitConverter.ToInt32(dst.GetAddressBytes(), 0), 0, macAddr, ref macAddrLen) != 0) throw new InvalidOperationException("SendARP failed."); string[] str = new string[(int)macAddrLen]; for (int i=0; i<macAddrLen; i++) str[i] = macAddr[i].ToString("x2"); Console.WriteLine(string.Join(":", str));


Aquí está mi solución.

public static class MacResolver { /// <summary> /// Convert a string into Int32 /// </summary> [DllImport("Ws2_32.dll")] private static extern Int32 inet_addr(string ip); /// <summary> /// The main funtion /// </summary> [DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 len); /// <summary> /// Returns the MACAddress by a string. /// </summary> public static Int64 GetRemoteMAC(string remoteIP) { Int32 ldest = inet_addr(remoteIP); try { Int64 macinfo = 0; Int32 len = 6; int res = SendARP(ldest, 0, ref macinfo, ref len); return macinfo; } catch (Exception e) { return 0; } } /// <summary> /// Format a long/Int64 into string. /// </summary> public static string FormatMac(this Int64 mac, char separator) { if (mac <= 0) return "00-00-00-00-00-00"; char[] oldmac = Convert.ToString(mac, 16).PadLeft(12, ''0'').ToCharArray(); System.Text.StringBuilder newMac = new System.Text.StringBuilder(17); if (oldmac.Length < 12) return "00-00-00-00-00-00"; newMac.Append(oldmac[10]); newMac.Append(oldmac[11]); newMac.Append(separator); newMac.Append(oldmac[8]); newMac.Append(oldmac[9]); newMac.Append(separator); newMac.Append(oldmac[6]); newMac.Append(oldmac[7]); newMac.Append(separator); newMac.Append(oldmac[4]); newMac.Append(oldmac[5]); newMac.Append(separator); newMac.Append(oldmac[2]); newMac.Append(oldmac[3]); newMac.Append(separator); newMac.Append(oldmac[0]); newMac.Append(oldmac[1]); return newMac.ToString(); } }