C#获取本机上所有网络接口及真实IP地址信息
2017-05-10 15:43
489 查看
下面显示了如何获取本机上所有网络接口及IP地址的相关信息
它们层次关联为:
一个本机可以有多个网络接口,这些接口包括实际接口与虚拟接口。
每个网络接口可以得到多个IP地址,可能是IPV4也可能是IPV6。
得到本机的真实IP地址的原理为:
网络接口的状态必须为UP,并且接口类型是Ethernet,并且IP 地址的地址家族类型为 InternNetwork 也就是IPV6
以下是代码:
[csharp]
view plain
copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
//1、手动创建一个IP
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());
//2、获取本址IP
IPAddress[] ips = Dns.GetHostAddresses(""); //当参数为""时返回本机所有IP
netInfo += "通过Dns.GetHostAddresses(\"\")获取本机所有IP信息:\r\n";
for (int i = 0; i < ips.Length; i++)
{
netInfo += string.Format("{0}) [ip:]{1}, [ip类型:]{2}\r\n",i.ToString(),ips[i].ToString(),ips[i].AddressFamily);
}
//3、获取网卡的名字等信息
netInfo += "\r\n以下是网卡接口数组中的信息。\r\n通过NetworkInterface.GetAllNetworkInterfaces()获取本机所有网卡接口信息:\r\n";
int count = 0;
foreach (NetworkInterface netInt in NetworkInterface.GetAllNetworkInterfaces())
{
count++;
netInfo += string.Format("{0})接口名:{1}\r\n 接口类型:{2}\r\n 接口MAC:{3}\r\n 接口速度:{4}\r\n 接口描述信息:{5}\r\n", count,netInt.Name, netInt.NetworkInterfaceType,netInt.GetPhysicalAddress().ToString(),netInt.Speed/1000/1000,netInt.Description );
netInfo += " 接口配置的IP地址:\r\n";
foreach (UnicastIPAddressInformation ipIntProp in netInt.GetIPProperties().UnicastAddresses.ToArray<UnicastIPAddressInformation>())
{
netInfo += string.Format(" 接口名:{0}, ip:{1}, ip类型:{2}\r\n",netInt.Name, ipIntProp.Address.ToString(),ipIntProp.Address.AddressFamily);
}
}
netInfo += "\r\n";
//4、进阶:如果本机有多个IP 如何获得 **** 重要 ****
foreach (var item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.OperationalStatus == OperationalStatus.Up && item.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
{//先获取需要的接口。两个条件确定当前正在使用的网口。1、接口状态为up;2、接口类型为Ethernet。
count = 0;
foreach (var ipInfo in item.GetIPProperties().UnicastAddresses.ToArray())
{
if (ipInfo.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
netInfo += string.Format("本机正在使用接口为:{0}\r\n本机正在使用的IP为:{1}", item.Name, ipInfo.Address.ToString());
break;
}
}
}
}
//与上面一样,只不过用了Dns.GetHostAddresses()的方法
IPAddress[] dnsIps = Dns.GetHostAddresses(Dns.GetHostName());
for (int i = 0; i < dnsIps.Length; i++)
{
if (dnsIps[i].AddressFamily==System.Net.Sockets.AddressFamily.InterNetwork)
{
netInfo += "\r\nDns.GetHostAddresses()得到本机正在使用的IP为:" + dnsIps[i].ToString();
}
}
转自:http://blog.csdn.net/iloli/article/details/51061792
它们层次关联为:
一个本机可以有多个网络接口,这些接口包括实际接口与虚拟接口。
每个网络接口可以得到多个IP地址,可能是IPV4也可能是IPV6。
得到本机的真实IP地址的原理为:
网络接口的状态必须为UP,并且接口类型是Ethernet,并且IP 地址的地址家族类型为 InternNetwork 也就是IPV6
以下是代码:
[csharp]
view plain
copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
//1、手动创建一个IP
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());
//2、获取本址IP
IPAddress[] ips = Dns.GetHostAddresses(""); //当参数为""时返回本机所有IP
netInfo += "通过Dns.GetHostAddresses(\"\")获取本机所有IP信息:\r\n";
for (int i = 0; i < ips.Length; i++)
{
netInfo += string.Format("{0}) [ip:]{1}, [ip类型:]{2}\r\n",i.ToString(),ips[i].ToString(),ips[i].AddressFamily);
}
//3、获取网卡的名字等信息
netInfo += "\r\n以下是网卡接口数组中的信息。\r\n通过NetworkInterface.GetAllNetworkInterfaces()获取本机所有网卡接口信息:\r\n";
int count = 0;
foreach (NetworkInterface netInt in NetworkInterface.GetAllNetworkInterfaces())
{
count++;
netInfo += string.Format("{0})接口名:{1}\r\n 接口类型:{2}\r\n 接口MAC:{3}\r\n 接口速度:{4}\r\n 接口描述信息:{5}\r\n", count,netInt.Name, netInt.NetworkInterfaceType,netInt.GetPhysicalAddress().ToString(),netInt.Speed/1000/1000,netInt.Description );
netInfo += " 接口配置的IP地址:\r\n";
foreach (UnicastIPAddressInformation ipIntProp in netInt.GetIPProperties().UnicastAddresses.ToArray<UnicastIPAddressInformation>())
{
netInfo += string.Format(" 接口名:{0}, ip:{1}, ip类型:{2}\r\n",netInt.Name, ipIntProp.Address.ToString(),ipIntProp.Address.AddressFamily);
}
}
netInfo += "\r\n";
//4、进阶:如果本机有多个IP 如何获得 **** 重要 ****
foreach (var item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.OperationalStatus == OperationalStatus.Up && item.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
{//先获取需要的接口。两个条件确定当前正在使用的网口。1、接口状态为up;2、接口类型为Ethernet。
count = 0;
foreach (var ipInfo in item.GetIPProperties().UnicastAddresses.ToArray())
{
if (ipInfo.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
netInfo += string.Format("本机正在使用接口为:{0}\r\n本机正在使用的IP为:{1}", item.Name, ipInfo.Address.ToString());
break;
}
}
}
}
//与上面一样,只不过用了Dns.GetHostAddresses()的方法
IPAddress[] dnsIps = Dns.GetHostAddresses(Dns.GetHostName());
for (int i = 0; i < dnsIps.Length; i++)
{
if (dnsIps[i].AddressFamily==System.Net.Sockets.AddressFamily.InterNetwork)
{
netInfo += "\r\nDns.GetHostAddresses()得到本机正在使用的IP为:" + dnsIps[i].ToString();
}
}
转自:http://blog.csdn.net/iloli/article/details/51061792
相关文章推荐
- C#获取本机上所有网络接口及真实IP地址信息
- C# 获取适配器网络连接IP地址,子网掩码,DNS,数据包等信息
- java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十九节 Ping一个IP地址
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第二十一节 增加和删除一个IP地址
- 在C#中调用API获取网络信息和流量
- 迭代网络数据头信息 以及获取客户端真实IP
- JAVA 获取本机全部网络接口的全部IP地址
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十二节 获得本机系统网络接口适配器的列表
- C#获取远程网页中的所有链接URL(网络蜘蛛实现原理)
- C#获取HTTP路径下的所有文件信息(可以做侦测了)
- C#小技巧系列之四:获取本地网络信息
- C#小技巧系列之四:获取本地网络信息
- 在C#中如何获取系统中所安装的所有软件信息,还有如何打开系统中某个程序
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第二节 获取MIB-II 接口表
- C#获取网络邻居所有工作组和机器名称
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第九节 获取网卡–IP地址映射表
- C#获取远程网页中的所有链接URL(网络蜘蛛实现原理)
- C#小技巧系列之二:获取系统所有服务信息
- 调用网络WebService获取IP地址信息