C#获取电脑IP、MAC地址示例代码
/// <summary>
/// 使用 C# 自带的类库实现计算机信息获取
/// </summary>
public class DefaultDeviceInfo
{
public virtual string GetCpuId()
{
try
{
string cpuInfo = " ";
ManagementClass cimobject = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
return cpuInfo.ToString();
}
catch (Exception)
{
}
return string.Empty;
}
public virtual string GetHDid()
{
try
{
string HDid = " ";
ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach (ManagementObject mo in moc1)
{
HDid = (string)mo.Properties["Model"].Value;
}
return HDid.ToString();
}
catch (Exception)
{
}
return string.Empty;
}
public virtual string GetIpv4()
{
string ip = GetIpv4("127.0.0.1");
//如果根据127.0.0.1无法获取ip地址,则尝试根据主机名获取
if (ip == IPAddress.None.ToString())
{
ip = GetIpv4(null);
}
return ip;
}
public virtual string GetMac()
{
try
{
List<string> macs = new List<string>();
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in interfaces)
{
if (ni.NetworkInterfaceType != NetworkInterfaceType.Ethernet)
{
continue;
}
if (ni.GetPhysicalAddress().ToString() != "")
{
macs.Add(ni.GetPhysicalAddress().ToString());
}
}
//替补mac地址,当找不到以太网mac,则使用第一个mac
var subs = macs.Count == 0 && interfaces.Length > 0
? interfaces[0].GetPhysicalAddress().ToString()
: string.Empty;
return macs.Count > 0 ? macs[0] : subs;
}
catch (Exception)
{
}
return string.Empty;
}
public virtual string GetHostName()
{
return Dns.GetHostName();
}
#region 内部方法
/// <summary>
/// 字符串每隔多少位插入特定字符
/// </summary>
/// <param name="value"></param>
/// <param name="separator"></param>
/// <param name="separatorLen"></param>
/// <returns></returns>
protected static string StringInsertSeparator(string value, string separator, int separatorLen = 1)
{
if (string.IsNullOrWhiteSpace(value))
{
return value;
}
StringBuilder sbNewValue = new StringBuilder();
for (int i = 0; i < value.ToArray().Count(); i++)
{
if (i > 0 && i % separatorLen == 0)
{
sbNewValue.Append(separator);
}
sbNewValue.Append(value[i]);
}
return sbNewValue.ToString();
}
/// <summary>
/// 根据指定的主机名获取ip地址
/// 如果主机名为空,则获取系统主机名称
/// </summary>
/// <param name="defHostName"></param>
/// <returns></returns>
protected string GetIpv4(string defHostName)
{
try
{
/* NetworkInterface 实现方法
// 获得网络接口,网卡,拨号器,适配器都会有一个网络接口
NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface network in networkInterfaces)
{
if (network.NetworkInterfaceType != NetworkInterfaceType.Ethernet)
{
continue;
}
// 获得当前网络接口属性
IPInterfaceProperties properties = network.GetIPProperties();
// 每个网络接口可能会有多个IP地址
foreach (IPAddressInformation address in properties.UnicastAddresses)
{
// 如果此IP不是ipv4,则进行下一次循环
if (address.Address.AddressFamily != AddressFamily.InterNetwork)
{
continue;
}
// 忽略127.0.0.1
if (IPAddress.IsLoopback(address.Address))
{
continue;
}
return address.Address.ToString();
}
}
*/
string hostName = defHostName;
if (string.IsNullOrWhiteSpace(hostName))
{
hostName = Dns.GetHostName();
}
var ipList = Dns.GetHostEntry(hostName).AddressList;
foreach (var address in ipList)
{
// 如果此IP不是ipv4,则进行下一次循环
if (address.AddressFamily != AddressFamily.InterNetwork)
{
continue;
}
// 忽略127.0.0.1
if (IPAddress.IsLoopback(address))
{
continue;
}
return address.ToString();
}
}
catch (Exception ex)
{
}
return IPAddress.None.ToString(); //255.255.255.255
}
#endregion
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)