让代码更简单

C#发送ARP获取局域网内设备Mac地址

重要:本文最后更新于2023-08-26 15:12:21,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

今天在工作群里看到别的部门采集现场设备数据,与设备厂商的对话。说是让设备厂商提供获取Mac地址的接口,一时没忍住说了一句,微软提供的Iphlpapi.dll链接库提供了发送APR的方法,可以拿到设备地址,结果别人直接无视,大写的尴尬。

注意:本文获取的是局域网内的远程设备地址,不是本机的地址。

使用ChatGPT配合C#随便写了个demo,记录一下,方便以后查阅。

复制
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
    {
        string ipAddress = "10.248.1.50"; // 远程设备的IP地址
        Console.WriteLine(getMacAddr_Remote(ipAddress));
        Console.WriteLine("按下任意键继续...");
        Console.ReadLine();
    }

        //下面一种方法可以获取远程的MAC地址
        [DllImport("Iphlpapi.dll")]
        static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 MacAddr, ref Int32 PhyAddrLen);
        [DllImport("Ws2_32.dll")]
        static extern Int32 inet_addr(string ipaddr);
        /// <summary>
        /// SendArp获取MAC地址
        /// </summary>
        /// <param name="RemoteIP">目标机器的IP地址如(192.168.1.1)</param>
        /// <returns>目标机器的mac 地址</returns>
        public static string getMacAddr_Remote(string RemoteIP)
        {
            StringBuilder macAddress = new StringBuilder();
            try
            {
                Int32 remote = inet_addr(RemoteIP);
                Int64 macInfo = new Int64();
                Int32 length = 6;
                SendARP(remote, 0, ref macInfo, ref length);
                string temp = Convert.ToString(macInfo, 16).PadLeft(12, '0').ToUpper();
                int x = 12;
                for (int i = 0; i < 6; i++)
                {
                    if (i == 5)
                    {
                        macAddress.Append(temp.Substring(x - 2, 2));
                    }
                    else
                    {
                        macAddress.Append(temp.Substring(x - 2, 2) + "-");
                    }
                    x -= 2;
                }
                return macAddress.ToString();
            }
            catch
            {
                return macAddress.ToString();
            }
        }
}
}
C#发送ARP获取局域网内设备Mac地址

如果只是临时看看,那么可以使用命令提示符,输入arp -a | findstr “10.1.1.1”查询对应ip的设备Mac地址,arp命令在Linux系统仍然适用。Linux中将findstr换成 grep 即可。

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐