using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; namespace IPtoMacAddress { class IPtoMac { [System.Runtime.InteropServices.DllImport("Iphlpapi.dll", EntryPoint = "SendARP")] internal extern static Int32 SendArp(Int32 destIpAddress, Int32 srcIpAddress, byte[] macAddress, ref Int32 macAddressLength); public PhysicalAddress GetMacFromIP(IPAddress IP) { if (IP.AddressFamily != AddressFamily.InterNetwork) throw new ArgumentException("supports just IPv4 addresses"); Int32 addrInt = IpToInt(IP); Int32 srcAddrInt = 0; byte[] mac = new byte[6]; // 48 bit int length = mac.Length; int reply = SendArp(addrInt, srcAddrInt, mac, ref length); byte[] emptyMac = new byte[12]; if (reply != 0) { //No MAC Address found for the IP Address return new PhysicalAddress(emptyMac); } return new PhysicalAddress(mac); } private static Int32 IpToInt(System.Net.IPAddress IP) { byte[] bytes = IP.GetAddressBytes(); return BitConverter.ToInt32(bytes, 0); } } }