public static class ComputerHelper
{
public static string GetLocalHostIp()
{
var HostName = Dns.GetHostName(); //得到主机名
var IpEntry = Dns.GetHostEntry(HostName);
for (var i = 0; i < IpEntry.AddressList.Length; i++)
{
//从IP地址列表中筛选出IPv4类型的IP地址
//AddressFamily.InterNetwork表示此IP为IPv4,
//AddressFamily.InterNetworkV6表示此地址为IPv6类型
if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork)
{
return IpEntry.AddressList[i].ToString();
}
}
return "";
}
public static string GetLocalIP1()
{
var netInfo = string.Empty;
IPAddress ip = new IPAddress(new byte[] { 192, 168, 100, 1 });
netInfo = string.Format("手动创建的ip1:{0}\r\n", ip.ToString());
ip = IPAddress.Parse("192.168.60.1"); //推荐用这个方法创建一个IP
netInfo += string.Format("手动创建的ip2:{0}\r\n\r\n", ip.ToString());
return netInfo;
}
public static string GetLocalHostIp2()
{
var netInfo = string.Empty;
//2、获取本址IP
IPAddress[] ips = Dns.GetHostAddresses(""); //当参数为""时返回本机所有IP
netInfo += "通过Dns.GetHostAddresses(\"\")获取本机所有IP信息:\r\n";
for (int i = 0; i < ips.Length; i++)
{
netInfo += $"{i.ToString()}) [ip:]{ips[i].ToString()}, [ip类型:]{ips[i].AddressFamily}\r\n";
}
return netInfo;
}
public static string GetLocalHostIp3()
{
var netInfo = string.Empty;
//3、获取网卡的名字等信息
netInfo += "\r\n以下是网卡接口数组中的信息。\r\n通过NetworkInterface.GetAllNetworkInterfaces()获取本机所有网卡接口信息:\r\n";
int count = 0;
foreach (NetworkInterface netInt in NetworkInterface.GetAllNetworkInterfaces())
{
count++;
netInfo += $"{count})接口名:{netInt.Name}\r\n 接口类型:{netInt.NetworkInterfaceType}\r\n 接口MAC:{netInt.GetPhysicalAddress().ToString()}\r\n 接口速度:{netInt.Speed / 1000 / 1000}\r\n 接口描述信息:{netInt.Description}\r\n";
netInfo += " 接口配置的IP地址:\r\n";
foreach (UnicastIPAddressInformation ipIntProp in netInt.GetIPProperties().UnicastAddresses.ToArray<UnicastIPAddressInformation>())
{
netInfo += $" 接口名:{netInt.Name}, ip:{ipIntProp.Address.ToString()}, ip类型:{ipIntProp.Address.AddressFamily}\r\n";
}
}
return netInfo;
}
public static string GetLocalHostIp4()
{
var netInfo = string.Empty;
netInfo += "\r\n";
var ip = string.Empty;
try
{
//4、进阶:如果本机有多个IP 如何获得 **** 重要 ****
var lst = NetworkInterface.GetAllNetworkInterfaces();
foreach (var item in lst)
{
if (item.OperationalStatus != OperationalStatus.Up || item.NetworkInterfaceType != NetworkInterfaceType.Ethernet)
{
continue;
}
//先获取需要的接口。两个条件确定当前正在使用的网口。1、接口状态为up;2、接口类型为Ethernet。
var addList = item.GetIPProperties().UnicastAddresses.ToArray();
foreach (var ipInfo in addList)
{
if (ipInfo.Address.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork)
{
continue;
}
netInfo += $"本机正在使用接口为:{item.Name}\r\n本机正在使用的IP为:{ipInfo.Address.ToString()}";
ip = ipInfo.Address.ToString();
break;
}
if (!string.IsNullOrWhiteSpace(ip) && ip.StartsWith("10."))
{
break;
}
}
}
catch (Exception ex)
{
LoggerHelper.Error(ex);
}
return ip;
}
public static string GetLocalHostIp5()
{
var netInfo = string.Empty;
//与上面一样,只不过用了Dns.GetHostAddresses()的方法
var dnsIps = Dns.GetHostAddresses(Dns.GetHostName());
foreach (var t in dnsIps)
{
if (t.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
netInfo += "\r\nDns.GetHostAddresses()得到本机正在使用的IP为:" + t.ToString();
}
}
return netInfo;
}
}