在本文中,我们展示了如何在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#教程。