Asp.net关于获取客户端CPU,硬盘,MAC序列号的问题

来源:互联网 发布:xp bitcomet端口阻塞 编辑:程序博客网 时间:2024/06/05 18:06

 

 

Asp.net关于获取客户端CPU,硬盘,MAC序列号的问题

序列号, MAC, CPU, 客户端, 硬盘
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using System.Management;
  4. namespace Hardware
  5. {
  6. /// <summary>
  7. /// Hardware_Mac 的摘要说明。
  8. /// </summary>
  9. public class HardwareInfo
  10. {
  11. //取机器名
  12. public string GetHostName()
  13. {
  14. return System.Net.Dns.GetHostName();
  15. }
  16. //取CPU编号
  17. public String GetCpuID()
  18. {
  19. try
  20. {
  21. ManagementClass mc = new ManagementClass("Win32_Processor");
  22. ManagementObjectCollection moc = mc.GetInstances();
  23. String strCpuID = null ;
  24. foreach( ManagementObject mo in moc )
  25. {
  26. strCpuID = mo.Properties["ProcessorId"].Value.ToString();
  27. break;
  28. }
  29. return strCpuID;
  30. }
  31. catch
  32. {
  33. return "";
  34. }
  35. }//end method
  36. //取第一块硬盘编号
  37. public String GetHardDiskID()
  38. {
  39. try
  40. {
  41. ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
  42. String strHardDiskID = null ;
  43. foreach(ManagementObject mo in searcher.Get())
  44. {
  45. strHardDiskID = mo["SerialNumber"].ToString().Trim();
  46. break;
  47. }
  48. return strHardDiskID ;
  49. }
  50. catch
  51. {
  52. return "";
  53. }
  54. }//end
  55. public enum NCBCONST
  56. {
  57. NCBNAMSZ =16, /* absolute length of a net name */
  58. MAX_LANA =254, /* lana磗 in range 0 to MAX_LANA inclusive */
  59. NCBENUM =0x37, /* NCB ENUMERATE LANA NUMBERS */
  60. NRC_GOODRET =0x00, /* good return */
  61. NCBRESET =0x32, /* NCB RESET */
  62. NCBASTAT =0x33, /* NCB ADAPTER STATUS */
  63. NUM_NAMEBUF =30, /* Number of NAME磗 BUFFER */
  64. }
  65. [StructLayout(LayoutKind.Sequential)]
  66. public struct ADAPTER_STATUS
  67. {
  68. [MarshalAs(UnmanagedType.ByValArray, SizeConst=6)]
  69. public byte[] adapter_address;
  70. public byte rev_major;
  71. public byte reserved0;
  72. public byte adapter_type;
  73. public byte rev_minor;
  74. public ushort duration;
  75. public ushort frmr_recv;
  76. public ushort frmr_xmit;
  77. public ushort iframe_recv_err;
  78. public ushort xmit_aborts;
  79. public uint xmit_success;
  80. public uint recv_success;
  81. public ushort iframe_xmit_err;
  82. public ushort recv_buff_unavail;
  83. public ushort t1_timeouts;
  84. public ushort ti_timeouts;
  85. public uint reserved1;
  86. public ushort free_ncbs;
  87. public ushort max_cfg_ncbs;
  88. public ushort max_ncbs;
  89. public ushort xmit_buf_unavail;
  90. public ushort max_dgram_size;
  91. public ushort pending_sess;
  92. public ushort max_cfg_sess;
  93. public ushort max_sess;
  94. public ushort max_sess_pkt_size;
  95. public ushort name_count;
  96. }
  97. [StructLayout(LayoutKind.Sequential)]
  98. public struct NAME_BUFFER
  99. {
  100. [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]
  101. public byte[] name;
  102. public byte name_num;
  103. public byte name_flags;
  104. }
  105. [StructLayout(LayoutKind.Sequential)]
  106. public struct NCB
  107. {
  108. public byte ncb_command;
  109. public byte ncb_retcode;
  110. public byte ncb_lsn;
  111. public byte ncb_num;
  112. public IntPtr ncb_buffer;
  113. public ushort ncb_length;
  114. [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]
  115. public byte[] ncb_callname;
  116. [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]
  117. public byte[] ncb_name;
  118. public byte ncb_rto;
  119. public byte ncb_sto;
  120. public IntPtr ncb_post;
  121. public byte ncb_lana_num;
  122. public byte ncb_cmd_cplt;
  123. [MarshalAs(UnmanagedType.ByValArray, SizeConst=10)]
  124. public byte[] ncb_reserve;
  125. public IntPtr ncb_event;
  126. }
  127. [StructLayout(LayoutKind.Sequential)]
  128. public struct LANA_ENUM
  129. {
  130. public byte length;
  131. [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)]
  132. public byte[] lana;
  133. }
  134. [StructLayout(LayoutKind.Auto)]
  135. public struct ASTAT
  136. {
  137. public ADAPTER_STATUS adapt;
  138. [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)]
  139. public NAME_BUFFER[] NameBuff;
  140. }
  141. public class Win32API
  142. {
  143. [DllImport("NETAPI32.DLL")]
  144. public static extern char Netbios(ref NCB ncb);
  145. }
  146. public string GetMacAddress()
  147. {
  148. string addr="";
  149. try
  150. {
  151. int cb;
  152. ASTAT adapter;
  153. NCB Ncb=new NCB();
  154. char uRetCode;
  155. LANA_ENUM lenum;
  156. Ncb.ncb_command = (byte)NCBCONST.NCBENUM;
  157. cb = Marshal.SizeOf(typeof(LANA_ENUM));
  158. Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
  159. Ncb.ncb_length = (ushort)cb;
  160. uRetCode = Win32API.Netbios(ref Ncb);
  161. lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
  162. Marshal.FreeHGlobal(Ncb.ncb_buffer);
  163. if(uRetCode != (short)NCBCONST.NRC_GOODRET)
  164. return "";
  165. for(int i=0; i < lenum.length ;i++)
  166. {
  167. Ncb.ncb_command = (byte)NCBCONST.NCBRESET;
  168. Ncb.ncb_lana_num = lenum.lana[i];
  169. uRetCode = Win32API.Netbios(ref Ncb);
  170. if(uRetCode != (short)NCBCONST.NRC_GOODRET)
  171. return "";
  172. Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;
  173. Ncb.ncb_lana_num = lenum.lana[i];
  174. Ncb.ncb_callname[0]=(byte)