C# NetworkInterface
最后修改于 2023 年 7 月 5 日
在本文中,我们将展示如何在 C# 中处理网络接口。
System.Net
命名空间为当今网络上使用的许多协议提供了简单的编程接口。
网络接口是计算机与专用或公共网络之间的互连点。 它可以是物理网络接口卡 (NIC),也可以实现为虚拟软件接口。
NetworkInterface
提供网络接口的配置和统计信息。 它位于 System.Net.NetworkInformation
命名空间中。
$ ls /sys/class/net/ lo wlp0s20f3
在基于 Debian 的 Linux 系统上,我们可以在 /sys/class/net
中找到可用的接口。
C# GetIsNetworkAvailable
GetIsNetworkAvailable
方法指示是否任何网络连接可用。
Program.cs
using System.Net.NetworkInformation; if (NetworkInterface.GetIsNetworkAvailable()) { Console.WriteLine("Network available"); } else { Console.WriteLine("Network not available"); }
该程序打印网络是否可用。
C# 列出网络接口
在第一个示例中,我们列出所有网络接口。
Program.cs
using System.Net.NetworkInformation; var nics = from nic in NetworkInterface.GetAllNetworkInterfaces() where nic.OperationalStatus == OperationalStatus.Up select nic; foreach (var nic in nics) { Console.WriteLine(nic.Id); Console.WriteLine(nic.Name); Console.WriteLine(nic.Description); Console.WriteLine(nic.NetworkInterfaceType); Console.WriteLine(nic.OperationalStatus); Console.WriteLine(nic.Speed); Console.WriteLine("-----------------------------"); }
GetAllNetworkInterfaces
方法返回描述本地计算机上网络接口的对象。 我们打印可用网络接口的一些属性。
$ dotnet run lo lo lo Loopback Up -1 ----------------------------- wlp0s20f3 wlp0s20f3 wlp0s20f3 Ethernet Up -1
C# NetworkInterface MAC 地址
MAC 地址,也称为硬件或物理地址,是用于标识网络上单个电子设备的唯一标识符。
Program.cs
using System.Net.NetworkInformation; var macs = from nic in NetworkInterface.GetAllNetworkInterfaces() where nic.NetworkInterfaceType != NetworkInterfaceType.Loopback && nic.OperationalStatus == OperationalStatus.Up select nic.GetPhysicalAddress(); Console.WriteLine(macs.FirstOrDefault());
我们使用 GetPhysicalAddress
方法检索 MAC 地址。 我们通过过滤掉 NetworkInterfaceType.Loopback
来跳过 Loopback。
C# NetworkInterface IP 属性
GetIPProperties
方法提供有关 Internet 协议版本 4 (IPv4) 或 Internet 协议版本 6 (IPv6) 的信息。
Program.cs
using System.Net.NetworkInformation; var ipProps = from nic in NetworkInterface.GetAllNetworkInterfaces() where nic.NetworkInterfaceType != NetworkInterfaceType.Loopback && nic.OperationalStatus == OperationalStatus.Up select nic.GetIPProperties(); var ipProp = ipProps.First(); Console.WriteLine("IP address & mask"); Console.WriteLine(ipProp.UnicastAddresses.FirstOrDefault()?.Address); Console.WriteLine(ipProp.UnicastAddresses.FirstOrDefault()?.IPv4Mask); Console.WriteLine("-----------------------------------"); Console.WriteLine("DNS"); Console.WriteLine(ipProp.DnsSuffix); Console.WriteLine(string.Join(' ', ipProp.DnsAddresses)); Console.WriteLine("-----------------------------------"); Console.WriteLine("Gateway"); foreach (var e in ipProp.GatewayAddresses) { Console.WriteLine(e.Address); }
该示例打印 IPv4 地址和掩码以及一些 DNS 和网关信息。
$ dotnet run IP address & mask 192.168.0.35 255.255.255.0 ----------------------------------- DNS local 127.0.0.53 ----------------------------------- Gateway 192.168.0.1 fe80::20b:ff:fe00:add0%2
C# NetworkInterface IP 统计信息
使用 GetIPStatistics
方法,我们可以获取本地计算机上网络接口的一些 IP 统计数据。
Program.cs
using System.Net.NetworkInformation; var ipStats = from nic in NetworkInterface.GetAllNetworkInterfaces() where nic.NetworkInterfaceType != NetworkInterfaceType.Loopback && nic.OperationalStatus == OperationalStatus.Up select nic.GetIPStatistics(); var ipStat = ipStats.First(); Console.WriteLine(ipStat.BytesReceived); Console.WriteLine(ipStat.BytesSent); Console.WriteLine(ipStat.IncomingPacketsWithErrors); Console.WriteLine(ipStat.OutgoingPacketsWithErrors); Console.WriteLine(ipStat.IncomingPacketsDiscarded); Console.WriteLine(ipStat.OutgoingPacketsDiscarded);
该示例打印接收和发送的字节数,以及包含错误和丢弃的数据包数。
来源
在本文中,我们使用了 C# 中的网络接口。
作者
列出所有 C# 教程。