在本文中,我们展示了如何在C#中使用网络接口。
System.Net命名空间为当今网络上使用的许多协议提供了一个简单的编程接口。
网络接口是计算机与专用或公共网络之间的互连点。它可以是物理网络接口卡(NIC)或实现为虚拟软件接口。
NetworkInterface提供网络接口的配置和统计信息。它在System.Net.NetworkInformation命名空间中可用。
$ ls /sys/class/net/ lo wlp0s20f3
在基于Debian的Linux系统上,我们可以在/sys/class/net中找到可用的接口。
C#GetIsNetworkAvailable
GetIsNetworkAvailable方法指示是否有任何网络连接可用。
using System.Net.NetworkInformation;
if (NetworkInterface.GetIsNetworkAvailable())
{
Console.WriteLine("Network available");
} else
{
Console.WriteLine("Network not available");
}
如果网络可用,程序会打印。
C#列出网络接口
在第一个示例中,我们列出了所有网络接口。
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#网络接口MAC地址
MAC地址,也称为硬件地址或物理地址,是用于识别网络上各个电子设备的唯一标识符。
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来跳过环回。
C#NetworkInterfaceIP属性
GetIPProperties方法提供Internet协议版本4(IPv4)或Internet协议版本6(IPv6)的信息。
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地址和掩码以及一些DSN和网关信息。
$ 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#NetworkInterfaceIP统计
使用GetIPStatistics方法,我们可以获取本地计算机上某个网络接口的一些IP统计数据。
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#教程。
