Heim  >  Artikel  >  类库下载  >  C# 在指定的IP地址中获得一个设备的MAC(物理)地址

C# 在指定的IP地址中获得一个设备的MAC(物理)地址

大家讲道理
大家讲道理Original
2016-11-10 09:20:292304Durchsuche

using System.Net;
using System.Net.NetworkInformation;
 
/// <summary>
/// Holds utilities for working with networks, Ethernet, etc.
/// </summary>
public static class NetworkUtils
{
    //  
http://www.codeproject.com/KB/IP/host_info_within_network.aspx
    [System.Runtime.InteropServices.DllImport("iphlpapi.dll",  
ExactSpelling = true)]
    static extern int SendARP(int DestIP, int SrcIP, byte[]  
pMacAddr, ref int PhyAddrLen);
 
    /// <summary>
    /// Gets the MAC address (<see cref="PhysicalAddress"/>)  
associated with the specified IP.
    /// </summary>
    /// <param name="ipAddress">The remote IP address.</param>
    /// <returns>The remote machine&#39;s MAC address.</returns>
    public static PhysicalAddress GetMacAddress(IPAddress  
ipAddress)
    {
        const int MacAddressLength = 6;
        int length = MacAddressLength;
        var macBytes = new byte[MacAddressLength];
        SendARP(BitConverter.ToInt32(ipAddress.GetAddressBytes(),  
0), 0, macBytes, ref length);
        return new PhysicalAddress(macBytes);
    }
}
 
[TestClass()]
public class NetworkUtilsTests
{
    [TestMethod()]
    public void GetMacAddress_BroadcastIP_NonzeroMac()
    {
        IPAddress ipAddress = IPAddress.Broadcast;
 
        PhysicalAddress actual = NetworkUtils.GetMacAddress 
(ipAddress);
        Console.WriteLine(actual.ToString());
 
        Assert.AreNotEqual(PhysicalAddress.None, actual);
    }
}

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn