>  기사  >  类库下载  >  C# 지정된 IP 주소에 있는 장치의 MAC(물리적) 주소를 가져옵니다.

C# 지정된 IP 주소에 있는 장치의 MAC(물리적) 주소를 가져옵니다.

大家讲道理
大家讲道理원래의
2016-11-10 09:20:292304검색

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);
    }
}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.