http://community.csdn.net/Expert/topic/5283/5283519.xml?temp=.6735346

解决方案 »

  1.   

    http://blog.csdn.net/jxufewbt/archive/2006/12/28/1465439.aspx
      

  2.   

    用WEb的控件,实际的控件可以GOOGLE一下,
    你要现成的解决代码。估计没有
      

  3.   

    using System;
    using System.Runtime.InteropServices;
    using  System.Management;
    namespace Hardware
    {
     /// <summary>
     /// Hardware_Mac 的摘要说明。
     /// </summary>
     public class HardwareInfo
     {
      //取机器名 
      public string GetHostName()
      {
       return System.Net.Dns.GetHostName(); 
      }  //取CPU编号
      public String GetCpuID() 
      {
       try
       {
        ManagementClass mc = new ManagementClass("Win32_Processor");
        ManagementObjectCollection moc = mc.GetInstances();
          
        String strCpuID = null ;
        foreach( ManagementObject mo in moc ) 
        {
         strCpuID = mo.Properties["ProcessorId"].Value.ToString();
         break; 
        }
        return strCpuID;
       }
       catch
       {
        return "";
       }  }//end method
     
      //取第一块硬盘编号
      public String GetHardDiskID() 
      {
       try
       {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
        String strHardDiskID = null ;
        foreach(ManagementObject mo in searcher.Get()) 
        {    
         strHardDiskID = mo["SerialNumber"].ToString().Trim();
         break;          
        }
        return strHardDiskID ;
       }
       catch
       {
        return "";
       }
      }//end   public enum NCBCONST 
      { 
       NCBNAMSZ   =16,      /* absolute length of a net name         */ 
       MAX_LANA   =254,      /* lana's in range 0 to MAX_LANA inclusive   */ 
       NCBENUM      =0x37,      /* NCB ENUMERATE LANA NUMBERS            */ 
       NRC_GOODRET   =0x00,      /* good return                              */ 
       NCBRESET    =0x32,      /* NCB RESET                        */ 
       NCBASTAT    =0x33,      /* NCB ADAPTER STATUS                  */ 
       NUM_NAMEBUF =30,      /* Number of NAME's BUFFER               */ 
      }   [StructLayout(LayoutKind.Sequential)] 
       public struct ADAPTER_STATUS 
      { 
       [MarshalAs(UnmanagedType.ByValArray, SizeConst=6)] 
       public byte[] adapter_address; 
       public byte   rev_major;  
       public byte   reserved0;  
       public byte   adapter_type;  
       public byte   rev_minor;  
       public ushort    duration;  
       public ushort    frmr_recv;  
       public ushort    frmr_xmit;  
       public ushort    iframe_recv_err;  
       public ushort    xmit_aborts;  
       public uint   xmit_success;  
       public uint   recv_success;  
       public ushort    iframe_xmit_err;  
       public ushort    recv_buff_unavail;  
       public ushort    t1_timeouts;  
       public ushort    ti_timeouts;  
       public uint   reserved1;  
       public ushort    free_ncbs;  
       public ushort    max_cfg_ncbs;  
       public ushort    max_ncbs;  
       public ushort    xmit_buf_unavail;  
       public ushort    max_dgram_size;  
       public ushort    pending_sess;  
       public ushort    max_cfg_sess;  
       public ushort    max_sess;  
       public ushort    max_sess_pkt_size;  
       public ushort    name_count; 
      }   [StructLayout(LayoutKind.Sequential)] 
       public struct NAME_BUFFER 
      {  
       [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] 
       public byte[] name; 
       public byte name_num;  
       public byte name_flags;  
      }   [StructLayout(LayoutKind.Sequential)] 
       public struct NCB 
      {  
       public byte  ncb_command;  
       public byte  ncb_retcode;  
       public byte  ncb_lsn;  
       public byte  ncb_num;  
       public IntPtr ncb_buffer;  
       public ushort ncb_length;  
       [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] 
       public byte[]  ncb_callname;  
       [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] 
       public byte[]  ncb_name;  
       public byte  ncb_rto;  
       public byte  ncb_sto;  
       public IntPtr ncb_post;  
       public byte  ncb_lana_num;  
       public byte  ncb_cmd_cplt;  
       [MarshalAs(UnmanagedType.ByValArray, SizeConst=10)] 
       public byte[] ncb_reserve; 
       public IntPtr ncb_event; 
      }   [StructLayout(LayoutKind.Sequential)] 
       public struct LANA_ENUM 
      {  
       public byte length;  
       [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)] 
       public byte[] lana; 
      }   [StructLayout(LayoutKind.Auto)] 
       public struct ASTAT 
      {  
       public ADAPTER_STATUS adapt; 
       [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)] 
       public NAME_BUFFER[] NameBuff; 
      } 
      public class Win32API 
      { 
       [DllImport("NETAPI32.DLL")] 
       public static extern char Netbios(ref NCB ncb); 
      } 
      
      public string GetMacAddress() 
      { 
       string addr=""; 
       try
       {
        int cb; 
        ASTAT adapter; 
        NCB Ncb=new NCB(); 
        char uRetCode; 
        LANA_ENUM lenum;     Ncb.ncb_command = (byte)NCBCONST.NCBENUM; 
        cb = Marshal.SizeOf(typeof(LANA_ENUM)); 
        Ncb.ncb_buffer = Marshal.AllocHGlobal(cb); 
        Ncb.ncb_length = (ushort)cb; 
        uRetCode = Win32API.Netbios(ref Ncb); 
        lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM)); 
        Marshal.FreeHGlobal(Ncb.ncb_buffer); 
        if(uRetCode != (short)NCBCONST.NRC_GOODRET) 
         return "";     for(int i=0; i < lenum.length ;i++) 
        { 
         Ncb.ncb_command = (byte)NCBCONST.NCBRESET; 
         Ncb.ncb_lana_num = lenum.lana[i]; 
         uRetCode = Win32API.Netbios(ref Ncb); 
         if(uRetCode != (short)NCBCONST.NRC_GOODRET) 
          return "";      Ncb.ncb_command = (byte)NCBCONST.NCBASTAT; 
         Ncb.ncb_lana_num = lenum.lana[i]; 
         Ncb.ncb_callname[0]=(byte)'*'; 
         cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER))*(int)NCBCONST.NUM_NAMEBUF; 
         Ncb.ncb_buffer = Marshal.AllocHGlobal(cb); 
         Ncb.ncb_length = (ushort)cb; 
         uRetCode = Win32API.Netbios(ref Ncb); 
         adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS)); 
         Marshal.FreeHGlobal(Ncb.ncb_buffer);      if (uRetCode == (short)NCBCONST.NRC_GOODRET) 
         { 
          if(i>0) 
           addr += ":"; 
          addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}", 
           adapter.adapt.adapter_address[0], 
           adapter.adapt.adapter_address[1], 
           adapter.adapt.adapter_address[2], 
           adapter.adapt.adapter_address[3], 
           adapter.adapt.adapter_address[4], 
           adapter.adapt.adapter_address[5]); 
         } 
        } 
       }
       catch
       {}
       return addr.Replace(' ', '0'); 
      }  }
    }
      

  4.   

    获取MAC地址:[DllImport("Iphlpapi.dll")] 
      private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length); 
      [DllImport("Ws2_32.dll")]
      private static extern Int32 inet_addr(string ip);  private void Page_Load(object sender, System.EventArgs e)
      {
       // 在此处放置用户代码以初始化页面
       try
       {
        string userip=Request.UserHostAddress;
        string strClientIP = Request.UserHostAddress.ToString().Trim();
        Int32 ldest = inet_addr(strClientIP); //目的地的ip 
        Int32 lhost = inet_addr("");   //本地服务器的ip 
        Int64 macinfo = new Int64(); 
        Int32 len = 6; 
        int res = SendARP(ldest,0, ref macinfo, ref len);
        string mac_src=macinfo.ToString("X");
        if(mac_src == "0")
        {
         if(userip=="127.0.0.1")
          Response.Write ("正在访问Localhost!");
         else
          Response.Write ("欢迎来自IP为" + userip + "的朋友!" + "<br>");
         return;
        }    while(mac_src.Length<12)
        {
         mac_src = mac_src.Insert(0,"0");
        }    string mac_dest="";    for(int i=0;i<11;i++)
        {
         if (0 == (i % 2))
         {
          if ( i == 10 )
          {
           mac_dest = mac_dest.Insert(0,mac_src.Substring(i,2));
          }
          else
          {
           mac_dest ="-" + mac_dest.Insert(0,mac_src.Substring(i,2));
          }
         } 
        }    Response.Write ("欢迎来自IP为"+userip+ "<br>" + ",MAC地址为"+mac_dest+"的朋友!"      +   "<br>");
       }
       catch(Exception err) 
       { 
        Response.Write(err.Message);
       }
      }
      

  5.   

    Click the link to solve your problem.Good luck!