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# 教程。