C# 多个网卡信息列表

  private static void ShowAdapterInfo()
        {
            NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
             Console.WriteLine("适配器个数:" + adapters.Length);
            int index = 0;
            foreach (NetworkInterface adapter in adapters)
            {
                index++;
                //显示网络适配器描述信息、名称、类型、速度、MAC 地址
                 Console.WriteLine("---------------------第" + index + "个适配器信息---------------------");
                 Console.WriteLine("描述信息:" + adapter.Name);
                 Console.WriteLine("类型:" + adapter.NetworkInterfaceType);
                 Console.WriteLine("速度:" + adapter.Speed / 1000 / 1000 + "MB");
                 Console.WriteLine("MAC 地址:" + adapter.GetPhysicalAddress());
                IPInterfaceProperties IPInterfaceProperties = adapter.GetIPProperties();
                UnicastIPAddressInformationCollection UnicastIPAddressInformationCollection = IPInterfaceProperties.UnicastAddresses;
                foreach (UnicastIPAddressInformation UnicastIPAddressInformation in UnicastIPAddressInformationCollection)
                {
                    if (UnicastIPAddressInformation.Address.AddressFamily.ToString() == ProtocolFamily.InterNetwork.ToString())
                    {
                         Console.WriteLine("IP地址:" + UnicastIPAddressInformation.Address.ToString() + "\n");
                    }
                }
            }
        }
C# 中进行多网卡数据转发可以通过使用 Socket 类来实现。下面是一个简单的示例代码,演示了如何在两个不同的网卡之间转发数据。 ```csharp using System; using System.Net; using System.Net.Sockets; class Program { static void Main() { // 创建两个 Socket 实例,分别用于监听两个网卡 Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 绑定第一个网卡的 IP 地址和端口号 IPAddress ip1 = IPAddress.Parse("192.168.1.100"); // 第一个网卡的 IP 地址 int port1 = 1234; // 第一个网卡的端口号 IPEndPoint endpoint1 = new IPEndPoint(ip1, port1); socket1.Bind(endpoint1); // 绑定第二个网卡的 IP 地址和端口号 IPAddress ip2 = IPAddress.Parse("192.168.2.100"); // 第二个网卡的 IP 地址 int port2 = 5678; // 第二个网卡的端口号 IPEndPoint endpoint2 = new IPEndPoint(ip2, port2); socket2.Bind(endpoint2); // 开始监听第一个网卡 socket1.Listen(10); Console.WriteLine($"Listening on {ip1}:{port1}"); // 开始监听第二个网卡 socket2.Listen(10); Console.WriteLine($"Listening on {ip2}:{port2}"); // 接受第一个网卡的连接请求 Socket client1 = socket1.Accept(); Console.WriteLine($"Accepted connection from {client1.RemoteEndPoint}"); // 接受第二个网卡的连接请求 Socket client2 = socket2.Accept(); Console.WriteLine($"Accepted connection from {client2.RemoteEndPoint}"); // 创建两个异步的数据转发任务,分别用于将数据从第一个网卡转发到第二个网卡,和从第二个网卡转发到第一个网卡 var forwardTask1 = ForwardData(client1, client2); var forwardTask2 = ForwardData(client2, client1); // 等待两个任务完成 forwardTask1.Wait(); forwardTask2.Wait(); // 关闭所有的连接和 Socket client1.Close(); client2.Close(); socket1.Close(); socket2.Close(); Console.WriteLine("Data forwarding completed. Press any key to exit."); Console.ReadKey(); } static async Task ForwardData(Socket sourceSocket, Socket destinationSocket) { byte[] buffer = new byte[4096]; int bytesRead; try { while ((bytesRead = await sourceSocket.ReceiveAsync(buffer, SocketFlags.None)) > 0) { await destinationSocket.SendAsync(buffer, bytesRead, SocketFlags.None); } } catch (SocketException ex) { Console.WriteLine($"Socket error: {ex.Message}"); } } } ``` 在上述示例中,我们创建了两个 `Socket` 实例 `socket1` 和 `socket2`,分别用于监听两个不同的网卡。然后,我们绑定了每个网卡的 IP 地址和端口号,并开始监听连接请求。一旦有连接请求到达,我们接受连接,并创建两个异步的数据转发任务 `forwardTask1` 和 `forwardTask2`,分别用于将数据从第一个网卡转发到第二个网卡,和从第二个网卡转发到第一个网卡。 在 `ForwardData` 方法中,我们使用异步的方式从源 `Socket` 读取数据,并将数据异步地发送到目标 `Socket`。如果发生任何的 `SocketException` 异常,则会输出错误信息。 最后,我们关闭所有的连接和 `Socket`,并在控制台上输出完成信息。 请注意,上述示例仅演示了基本的多网卡数据转发,并未处理一些特殊情况和错误处理。实际应用中,你可能需要根据具体需求进行适当的修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值