您的位置:首页 > 编程语言 > C#

C#获取ip地址、dns、mac地址、cpu信息

2017-08-30 18:43 337 查看
/// <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 Stri
4000
ngInsertSeparator(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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐