开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C#网络接口

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

未经允许不得转载:我爱分享网 » C#网络接口

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏