如何通过 C# 获取网络打印机的 MAC 地址

本文关键字:MAC 地址 打印机 网络 何通过 获取 | 更新日期: 2023-09-27 18:36:17

我想获取 Intermec 条形码打印机的标识符,它使用网络接口,所以我想到了 MAC 地址。如何通过 C# 获取 MAC 地址?或者我可以直接获取打印机的序列号?

如何通过 C# 获取网络打印机的 MAC 地址

我假设您有网络打印机的 IP 地址,并且您的 PC 和打印机位于同一本地网络。您可以尝试一下该程序。

    static void Main(string[] args)
    {
        PhysicalAddress pa = LocateMacAddress(IPAddress.Parse("172.16.0.99"));
        Console.WriteLine(pa.ToString());
        Console.ReadKey();
    }
    static PhysicalAddress LocateMacAddress(IPAddress ipAddress)
    {
        if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
        {
            byte[] macAddressBytes = new byte[6];
            int length = macAddressBytes.Length;
            ArpErrorCodes c = (ArpErrorCodes)SendARP((uint)ipAddress.Address, 0, macAddressBytes, ref length);
            if (c == ArpErrorCodes.None)
            {
                return new PhysicalAddress(macAddressBytes);
            }
        }
        return PhysicalAddress.None;
    }
    [DllImport("iphlpapi.dll", ExactSpelling = true)]
    public static extern int SendARP(uint DestIP, uint SrcIP, [Out] byte[] pMacAddr, ref int PhyAddrLen);
}
enum ArpErrorCodes
{
    None = 0,
    ERROR_GEN_FAILURE = 31,
    ERROR_NOT_SUPPORTED = 50,
    ERROR_BAD_NET_NAME = 67,
    ERROR_BUFFER_OVERFLOW = 111,
    ERROR_NOT_FOUND = 1168,
    ERROR_INVALID_USER_BUFFER = 1784,
}