有些用户会改变自己的网卡MAC地址,如何读取网卡的真实MAC地址而不是用户更改后的网卡MAC地址????谢谢!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    using System;
    using System.Management;namespace HTSoft.Common.Register
    {
        /// <summary> 
        /// 计算机信息类
        /// </summary> 
        internal class Computer
        {
            public string CpuID;
            public string MacAddress;
            public string DiskID;
            public string IpAddress;
            public string LoginUserName;
            public string ComputerName;
            public string SystemType;
            public string TotalPhysicalMemory; //单位:M 
            private static Computer _instance;        internal static Computer Instance()
            {
                if (_instance == null)
                    _instance = new Computer();
                return _instance;
            }        internal Computer()
            {
                CpuID = GetCpuID();
                MacAddress = GetMacAddress();
                DiskID = GetDiskID();
                IpAddress = GetIPAddress();
                LoginUserName = GetUserName();
                SystemType = GetSystemType();
                TotalPhysicalMemory = GetTotalPhysicalMemory();
                ComputerName = GetComputerName();
            }
            string GetCpuID()
            {
                try
                {
                    //获取CPU序列号代码 
                    string cpuInfo = "";//cpu序列号 
                    ManagementClass mc = new ManagementClass("Win32_Processor");
                    ManagementObjectCollection moc = mc.GetInstances();
                    foreach (ManagementObject mo in moc)
                    {
                        cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
                    }
                    moc = null;
                    mc = null;
                    return cpuInfo;
                }
                catch
                {
                    return "unknow";
                }
                finally
                {
                }        }
            string GetMacAddress()
            {
                try
                {
                    //获取网卡硬件地址 
                    string mac = "";
                    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                    ManagementObjectCollection moc = mc.GetInstances();
                    foreach (ManagementObject mo in moc)
                    {
                        if ((bool)mo["IPEnabled"] == true)
                        {
                            mac = mo["MacAddress"].ToString();
                            break;
                        }
                    }
                    moc = null;
                    mc = null;
                    return mac;
                }
                catch
                {
                    return "unknow";
                }
                finally
                {
                }        }
            string GetIPAddress()
            {
                try
                {
                    //获取IP地址 
                    string st = "";
                    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                    ManagementObjectCollection moc = mc.GetInstances();
                    foreach (ManagementObject mo in moc)
                    {
                        if ((bool)mo["IPEnabled"] == true)
                        {
                            //st=mo["IpAddress"].ToString(); 
                            System.Array ar;
                            ar = (System.Array)(mo.Properties["IpAddress"].Value);
                            st = ar.GetValue(0).ToString();
                            break;
                        }
                    }
                    moc = null;
                    mc = null;
                    return st;
                }
                catch
                {
                    return "unknow";
                }
                finally
                {
                }        }        string GetDiskID()
            {
                try
                {
                    //获取硬盘ID 
                    String HDid = "";
                    ManagementClass mc = new ManagementClass("Win32_DiskDrive");
                    ManagementObjectCollection moc = mc.GetInstances();
                    foreach (ManagementObject mo in moc)
                    {
                        HDid = (string)mo.Properties["Model"].Value;
                    }
                    moc = null;
                    mc = null;
                    return HDid;
                }
                catch
                {
                    return "unknow";
                }
                finally
                {
                }        }        /// <summary> 
            /// 操作系统的登录用户名 
            /// </summary> 
            /// <returns></returns> 
            string GetUserName()
            {
                try
                {
                    string st = "";
                    ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
                    ManagementObjectCollection moc = mc.GetInstances();
                    foreach (ManagementObject mo in moc)
                    {                    st = mo["UserName"].ToString();                }
                    moc = null;
                    mc = null;
                    return st;
                }
                catch
                {
                    return "unknow";
                }
                finally
                {
                }        }
            /// <summary> 
            /// PC类型 
            /// </summary> 
            /// <returns></returns> 
            string GetSystemType()
            {
                try
                {
                    string st = "";
                    ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
                    ManagementObjectCollection moc = mc.GetInstances();
                    foreach (ManagementObject mo in moc)
                    {                    st = mo["SystemType"].ToString();                }
                    moc = null;
                    mc = null;
                    return st;
                }
                catch
                {
                    return "unknow";
                }
                finally
                {
                }        }        /// <summary> 
            /// 物理内存 
            /// </summary> 
            /// <returns></returns> 
            string GetTotalPhysicalMemory()
            {
                try
                {                string st = "";
                    ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
                    ManagementObjectCollection moc = mc.GetInstances();
                    foreach (ManagementObject mo in moc)
                    {                    st = mo["TotalPhysicalMemory"].ToString();                }
                    moc = null;
                    mc = null;
                    return st;
                }
                catch
                {
                    return "unknow";
                }
                finally
                {
                }
            }
            /// <summary> 
            ///  获取计算机名称
            /// </summary> 
            /// <returns></returns> 
            string GetComputerName()
            {
                try
                {
                    return System.Environment.GetEnvironmentVariable("ComputerName");
                }
                catch
                {
                    return "unknow";
                }
                finally
                {
                }
            }
        }
    }
      

  2.   

    楼上的应该OK--------------------------------------------------------------------------------
    专注于自动提交,如发贴机资源采集器等网络营销软件的开发及相关领域如验证码识别技术。  
    QQ群号:24733057
      

  3.   

    WMI代码如下(可以获取所有网卡的MAC地址):
    using System;
    using System.Management;
    using System.Windows.Forms;namespace WMISample
    {
        public class MyWMIQuery
        {
            public static void Main()
            {
                try
                {
                    ManagementObjectSearcher searcher = 
                        new ManagementObjectSearcher("root\\CIMV2", 
                        "SELECT * FROM Win32_NetworkAdapter");                 foreach (ManagementObject queryObj in searcher.Get())
                    {
                        Console.WriteLine("-----------------------------------");
                        Console.WriteLine("Win32_NetworkAdapter instance");
                        Console.WriteLine("-----------------------------------");
                        Console.WriteLine("MACAddress: {0}", queryObj["MACAddress"]);
                    }
                }
                catch (ManagementException e)
                {
                    MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
                }
            }
        }
    }
      

  4.   

    chenli133() 不是,如果用户更改过mac,程序得到的会是用户更改的MAC,,我就是想得到网卡的实际物理地址,而不是用户在注册表更改后的。
      

  5.   

    leo2003知道我们可以取什么硬件信息而且用户改不了的不?
      

  6.   

    不可能吧,注册表里改过了的话,你要取到的话除非绕过了操作系统,也就是说你的代码要能直接访问硬件设备,就算驱动程序也是基于操作系统的。如果人人都能那么做还要os干吗?
    或许可能,但绝不在普通人能力范围之内。lz还是放弃吧
      

  7.   

    http://blog.joycode.com/liuhuimiao/archive/2003/12/23/9754.aspx这个地方也有
      

  8.   

    Ctoyun小朋友,别人给你的分是专家分,是不能被拿来提问的.你想要提问的分,只有每天登录上这个论坛来,每天这该死的系统每天才会给你加十分,详情请看论坛帮助
      

  9.   

    请问获取远程机器的mac地址。。有人搞过没有啊
      

  10.   

    这个问题是不是进牛角尖里了?用户会改mac地址,你不给他管理员权限即可解决!
    还有你可以设法取硬盘序列号,那也是唯一的。
    远程获得mac地址,如果不过路由,那个代码这里有了。过了路由后,你查到的就是路由的mac了。这个那个我就不知道了
      

  11.   

    using System.Management;   
      
    string stringMAC = "";   
    string stringIP = "";   
    ManagementClass MC = new ManagementClass "Win32_NetworkAdapterConfiguration");   
    ManagementObjectCollection MOC= MC.GetInstances();   
    foreach(ManagementObject MO in MOC)   
    {   
    if ((bool)MO["IPEnabled"] == true)   
    {   
    stringMAC += MO["MACAddress"].ToString();   
    TextMAC.Text = stringMAC.ToString();   
    string[] IPAddresses = (string[]) MO["IPAddress"];   
    if(IPAddresses.Length > 0)   
    stringIP = IPAddresses[0];   
    TextIP.Text = stringIP.ToString();   
    }   
    }    
      
      

  12.   

    paclcui() 
    引用你的话:这个问题是不是进牛角尖里了?用户会改mac地址,你不给他管理员权限即可解决!
    真可笑,我的程序放在网上别人下载使用了,我还能不给他管理员权限啊?计算机是人家的,人家说的算。
      

  13.   

    MAC地址+CPU试试看,我的机子就是取不到,其他地方的都可以,所以楼主权衡使用
      

  14.   

    我这边试了一下,改过之后取到的还是真正的MAC地址啊。代码如下:
    System.IO.StreamWriter writer = new System.IO.StreamWriter(FileUtil.AppDir + "\\Network.txt", false);
    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moc = mc.GetInstances();
    foreach (ManagementObject mo in moc)
    {
        foreach (PropertyData property in mo.Properties)
        {
            writer.WriteLine("{0} = {1};", property.Name, property.Value);
    #if DEBUG
            Console.WriteLine("{0} = {1};", property.Name, property.Value);
    #endif
        }
        if ((bool)mo["IPEnabled"] == true)
            _macAddress = mo["MacAddress"].ToString();
        if (!String.IsNullOrEmpty(_macAddress))
            break;
        mo.Dispose();
    }
    writer.Close();
    moc.Dispose();
      

  15.   

    修改之前的文件内容:
    ArpAlwaysSourceRoute = ;
    ArpUseEtherSNAP = ;
    Caption = [00000004] Broadcom 440x 10/100 Integrated Controller;
    DatabasePath = %SystemRoot%\System32\drivers\etc;
    DeadGWDetectEnabled = ;
    DefaultIPGateway = System.String[];
    DefaultTOS = ;
    DefaultTTL = ;
    Description = Broadcom 440x 10/100 Integrated Controller;
    DHCPEnabled = True;
    DHCPLeaseExpires = 20070911172706.000000+480;
    DHCPLeaseObtained = 20070911152706.000000+480;
    DHCPServer = 192.168.1.1;
    DNSDomain = ;
    DNSDomainSuffixSearchOrder = ;
    DNSEnabledForWINSResolution = False;
    DNSHostName = WisestNi-PC;
    DNSServerSearchOrder = System.String[];
    DomainDNSRegistrationEnabled = False;
    ForwardBufferMemory = ;
    FullDNSRegistrationEnabled = True;
    GatewayCostMetric = System.UInt16[];
    IGMPLevel = ;
    Index = 4;
    InterfaceIndex = 8;
    IPAddress = System.String[];
    IPConnectionMetric = 1;
    IPEnabled = True;
    IPFilterSecurityEnabled = False;
    IPPortSecurityEnabled = ;
    IPSecPermitIPProtocols = System.String[];
    IPSecPermitTCPPorts = System.String[];
    IPSecPermitUDPPorts = System.String[];
    IPSubnet = System.String[];
    IPUseZeroBroadcast = ;
    IPXAddress = ;
    IPXEnabled = ;
    IPXFrameType = ;
    IPXMediaType = ;
    IPXNetworkNumber = ;
    IPXVirtualNetNumber = ;
    KeepAliveInterval = ;
    KeepAliveTime = ;
    MACAddress = 00:1A:4D:03:00:6A;
    MTU = ;
    NumForwardPackets = ;
    PMTUBHDetectEnabled = ;
    PMTUDiscoveryEnabled = ;
    ServiceName = bcm44amd64;
    SettingID = {E3809966-68C7-4A37-A04D-9099C18617C2};
    TcpipNetbiosOptions = 0;
    TcpMaxConnectRetransmissions = ;
    TcpMaxDataRetransmissions = ;
    TcpNumConnections = ;
    TcpUseRFC1122UrgentPointer = ;
    TcpWindowSize = ;
    WINSEnableLMHostsLookup = True;
    WINSHostLookupFile = ;
    WINSPrimaryServer = ;
    WINSScopeID = ;
    WINSSecondaryServer = ;
      

  16.   

    修改之后的内容:
    ArpAlwaysSourceRoute = ;
    ArpUseEtherSNAP = ;
    Caption = [00000004] Broadcom 440x 10/100 Integrated Controller;
    DatabasePath = %SystemRoot%\System32\drivers\etc;
    DeadGWDetectEnabled = ;
    DefaultIPGateway = System.String[];
    DefaultTOS = ;
    DefaultTTL = ;
    Description = Broadcom 440x 10/100 Integrated Controller;
    DHCPEnabled = True;
    DHCPLeaseExpires = 20070911174528.000000+480;
    DHCPLeaseObtained = 20070911154528.000000+480;
    DHCPServer = 192.168.1.1;
    DNSDomain = ;
    DNSDomainSuffixSearchOrder = ;
    DNSEnabledForWINSResolution = False;
    DNSHostName = WisestNi-PC;
    DNSServerSearchOrder = System.String[];
    DomainDNSRegistrationEnabled = False;
    ForwardBufferMemory = ;
    FullDNSRegistrationEnabled = True;
    GatewayCostMetric = System.UInt16[];
    IGMPLevel = ;
    Index = 4;
    InterfaceIndex = 8;
    IPAddress = System.String[];
    IPConnectionMetric = 1;
    IPEnabled = True;
    IPFilterSecurityEnabled = False;
    IPPortSecurityEnabled = ;
    IPSecPermitIPProtocols = System.String[];
    IPSecPermitTCPPorts = System.String[];
    IPSecPermitUDPPorts = System.String[];
    IPSubnet = System.String[];
    IPUseZeroBroadcast = ;
    IPXAddress = ;
    IPXEnabled = ;
    IPXFrameType = ;
    IPXMediaType = ;
    IPXNetworkNumber = ;
    IPXVirtualNetNumber = ;
    KeepAliveInterval = ;
    KeepAliveTime = ;
    MACAddress = 00:1A:4D:03:00:6A;
    MTU = ;
    NumForwardPackets = ;
    PMTUBHDetectEnabled = ;
    PMTUDiscoveryEnabled = ;
    ServiceName = bcm44amd64;
    SettingID = {E3809966-68C7-4A37-A04D-9099C18617C2};
    TcpipNetbiosOptions = 0;
    TcpMaxConnectRetransmissions = ;
    TcpMaxDataRetransmissions = ;
    TcpNumConnections = ;
    TcpUseRFC1122UrgentPointer = ;
    TcpWindowSize = ;
    WINSEnableLMHostsLookup = True;
    WINSHostLookupFile = ;
    WINSPrimaryServer = ;
    WINSScopeID = ;
    WINSSecondaryServer = ;
      

  17.   

    虽然没有分了但是还是上一个。
    http://space.itpub.net/12639172/viewspace-509724
    这里有。
      

  18.   

    获取远程电脑的真实MAC地址是防止用户随意更改。