zoukankan      html  css  js  c++  java
  • C#获取本机和其它计算机物理网卡地址(MAC)

    2011-04-18 23:39:45|170次阅读|上传:huigezrx【已有0条评论】发表评论

    关键词:C# , Windows编程|来源:VC编程网

    验证计算机MAC地址进行软件授权是一种通用的方法,C#可以轻松获取计算机的MAC地址,本文采用实际的源代码讲述了两种获取网卡的方式,第一种 方法使用ManagementClass类,只能获取本机的计算机网卡物理地址,第二种方法使用Iphlpapi.dll的SendARP方法,可以获取 本机和其它计算机的MAC地址。

        方法1:使用ManagementClass类

              示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    /// <summary>
    /// 获取网卡物理地址
    /// </summary>
    /// <returns></returns>
    public static string getMacAddr_Local()
    {
        string madAddr = null;
        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection moc2 = mc.GetInstances();
        foreach (ManagementObject mo in moc2)
        {
            if (Convert.ToBoolean(mo["IPEnabled"]) == true)
            {
                madAddr = mo["MacAddress"].ToString();
                madAddr = madAddr.Replace(':', '-');
            }
            mo.Dispose();
        }
        return madAddr;
    }
    说明:

       1.需要给项目增加引用:System.Management,如图:

        2.在程序开始添加包引入语句:using System.Management;

        3.本方案只能获取本机的MAC地址;

        方法2:使用SendARP类

              示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    //下面一种方法可以获取远程的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();
        }
    }
    说明:

        1.在程序开始添加包引入语句:using System.Runtime.InteropServices;

        2.该方法可以获取远程计算机的MAC地址;

  • 相关阅读:
    牛客网暑期ACM多校训练营(第一场)
    ACM-ICPC-Swiss-Subregional 2017 训练日志
    2016 全国多校第二场 训练日志
    2018湖南多校第八场 训练日志
    2017 全国多校第九场 训练日志
    2017 全国多校第十场 训练日志
    2014 Kuala Lumpur 训练日志
    2018湖南多校第五场-20180506 训练日志
    2017icpc 花莲训练日志
    面试总结
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/2526874.html
Copyright © 2011-2022 走看看