C#-获取客户机的当前使用的IP、CPU、硬盘序列等信息生成机器码
客户机信息Helper
/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描 述:客户端机器信息相关的工具类
*│ 作 者:执笔小白
*│ 版 本:2.1
*│ 创建时间:2020-6-13 15:40:56
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间: ZhibiXiaoBai.Uril.HardwareHelper
*│ 类 名:GetlocalIpHelper
*└──────────────────────────────────────────────────────────────┘
*/
using System;
using System.Management;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Net;
namespace ZhibiXiaoBai.Util.HardwareHelper
{
/// <summary>
/// 硬件工具类
/// </summary>
public static class HardwareHelper
{
#region 硬件型号 及 大小
///<summary>
///获取第一个CPU 的型号、核心数及主频GHz
///</summary>
///<returns></returns>
public static (string, string, string) GetCpuSize()
{
string cpuName = "";
string cpuCount = "";
string cpuMaxGHz = "";
try
{
using (ManagementClass cimobject = new ManagementClass("Win32_Processor"))
{
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuName = mo.Properties["Name"]?.Value?.ToString()?.Trim() ?? "未知型号";
cpuCount = mo.Properties["NumberOfCores"]?.Value?.ToString()?.Trim() ?? "未知核心数";
cpuMaxGHz = mo.Properties["MaxClockSpeed"]?.Value?.ToString()?.Trim() ?? "未知主频"; // 最大主频(转换为GHz,原始单位为MHz)
if (double.TryParse(cpuMaxGHz, out double cpuMaxGHzDouble))
cpuMaxGHz = Math.Round(cpuMaxGHzDouble / 1000, 2).ToString();
mo.Dispose();
break;
}
}
}
catch (Exception ex)
{
throw new Exception("获取第一个CPU的型号、核心数及主频失败:" + ex.Message, ex);
}
return (cpuName, cpuCount, cpuMaxGHz);
}
///<summary>
///获取第一条内存 的型号及大小GB
///</summary>
///<returns></returns>
public static (string, string) GetMemorySize()
{
string memoryName = "";
string memorySN = "";
try
{
using (ManagementClass cimobject = new ManagementClass("Win32_PhysicalMemory"))
{
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
memoryName = mo.Properties["PartNumber"]?.Value?.ToString()?.Trim() ??
mo.Properties["Name"]?.ToString()?.Trim() ?? "未知型号";
memorySN = mo.Properties["Capacity"]?.Value?.ToString()?.Trim() ?? "未知大小"; // 内存容量:WMI返回的容量单位是字节(Byte),需转换为GB
if (double.TryParse(memorySN, out double memorySNDouble))
memorySN = Math.Round(memorySNDouble / (1024 * 1024 * 1024), 2).ToString();
mo.Dispose();
break;
}
}
}
catch (Exception ex)
{
throw new Exception("获取第一条内存的型号及大小失败:" + ex.Message, ex);
}
return (memoryName, memorySN);
}
///<summary>
///获取第一块硬盘 的型号及大小GB
///</summary>
///<returns></returns>
public static (string, string) GetHardDiskSize()
{
string hdName = "";
string hdSN = "";
try
{
using (ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"))
{
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach (ManagementObject mo in moc1)
{
hdName = (string)mo.Properties["Model"]?.Value?.ToString()?.Trim() ?? "未知型号";
hdSN = (string)mo.Properties["Size"]?.Value?.ToString()?.Trim() ?? "未知序列号"; // 获取硬盘容量(转换单位为GB/TB)
if (double.TryParse(hdSN, out double hdSNDouble))
hdSN = Math.Round(hdSNDouble / (1024 * 1024 * 1024), 2).ToString();
mo.Dispose();
break;
}
}
}
catch (Exception ex)
{
throw new Exception("获取第一块硬盘的型号及大小失败:" + ex.Message, ex);
}
return (hdName, hdSN);
}
#endregion 硬件型号 及 大小
#region 硬件型号 及 序列号
///<summary>
///获取第一个CPU 的型号及序列号
///</summary>
///<returns></returns>
public static (string, string) GetCpuSN()
{
string cpuName = "";
string cpuSN = "";
try
{
using (ManagementClass cimobject = new ManagementClass("Win32_Processor"))
{
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuName = mo.Properties["Name"]?.Value?.ToString()?.Trim() ?? "未知型号";
cpuSN = mo.Properties["ProcessorId"]?.Value?.ToString()?.Trim() ?? "未知序列号";
mo.Dispose();
break;
}
}
}
catch (Exception ex)
{
throw new Exception("获取第一个CPU的型号及序列号失败:" + ex.Message, ex);
}
return (cpuName, cpuSN);
}
///<summary>
///获取第一条内存 的型号及序列号
///</summary>
///<returns></returns>
public static (string, string) GetMemorySN()
{
string memoryName = "";
string memorySN = "";
try
{
using (ManagementClass cimobject = new ManagementClass("Win32_PhysicalMemory"))
{
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
memoryName = mo.Properties["PartNumber"]?.Value?.ToString()?.Trim() ??
mo.Properties["Name"]?.ToString()?.Trim() ?? "未知型号";
memorySN = mo.Properties["SerialNumber"]?.Value?.ToString()?.Trim() ?? "未知序列号";
mo.Dispose();
break;
}
}
}
catch (Exception ex)
{
throw new Exception("获取第一条内存序列号失败:" + ex.Message, ex);
}
return (memoryName, memorySN);
}
///<summary>
///获取第一块硬盘 的型号及序列号
///</summary>
///<returns></returns>
public static (string, string) GetHardDiskSN()
{
string hdName = "";
string hdSN = "";
try
{
using (ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"))
{
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach (ManagementObject mo in moc1)
{
hdName = (string)mo.Properties["Model"]?.Value?.ToString()?.Trim() ?? "未知型号";
hdSN = (string)mo.Properties["SerialNumber"]?.Value?.ToString()?.Trim() ?? "未知序列号";
mo.Dispose();
break;
}
}
}
catch (Exception ex)
{
throw new Exception("获取第一块硬盘序列号失败:" + ex.Message, ex);
}
return (hdName, hdSN);
}
///<summary>
///获取第一个网卡 的型号及地址
///</summary>
///<returns></returns>
public static string GetMoAddress()
{
string moAddress = "";
try
{
using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
{
ManagementObjectCollection moc2 = mc.GetInstances();
foreach (ManagementObject mo in moc2)
{
if ((bool)mo["IPEnabled"] == true)
moAddress = mo["MacAddress"]?.ToString()?.Trim() ?? "未知序列号";
mo.Dispose();
if (!string.IsNullOrEmpty(moAddress))
break;
}
}
}
catch (Exception ex)
{
throw new Exception("获取第一个网卡硬件地址失败:" + ex.Message, ex);
}
return moAddress.ToString();
}
/// <summary>
/// 机器码获取程序,随机生成一个GUID+计算机名组成形成一个唯一码。
/// </summary>
/// <returns></returns>
public static string GetHardwareCode()
{
// 机器码处理可以如下
string str = "PC." + GetCpuSN().Item2 + "." + GetMoAddress();
return str;
}
#endregion 硬件序列号
#region IP相关
/// <summary>
/// 获取本地当前使用的Ip
/// </summary>
/// <returns></returns>
public static string GetlocalIp()
{
try
{
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
{
socket.Connect("8.8.8.8", 65530);
IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
return endPoint.Address.ToString();
}
}
catch (Exception ex)
{
return "设备未联网!";
}
}
/// <summary>
/// 测通讯 - IP
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static bool PingIP(string address, int outTime = 1200)
{
try
{
Ping p = new Ping();
PingReply r = p.Send(address, outTime);
if (r.Status == IPStatus.Success) return true;
return false;
}
catch (Exception ex)
{
return false;
}
}
#endregion IP相关
}
}
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/15671968.html