如何使用 .net 编程检测最强的网络适配器(连接)并通过检测到的强适配器路由所有数据



我想设计一个工具,让我选择最强的网络适配器(在速度和带宽方面),并且还想通过该物理适配器路由所有网络流量。

我的方式是:

1.检测适配器并测试其整个速度带宽2.检查每个传入数据包,并通过更改其 IP 标头通过该适配器进行路由。

我知道我可以借助 win32 的 IP 助手类和路由命令。

有没有其他简单的方法来实现这一点。

一般来说,这并不容易。

带宽检测

.NET 框架提供了为您提供有关网络适配器性能信息的类,但据我所知,它们只考虑网卡本身的技术规范,而不是连接的带宽。但是,这可能足以满足您的目的。

如果要检测连接的带宽,不仅要观察网络适配器及其功能,还要观察连接的属性,甚至整个基础结构(路由或交换硬件,电缆,流量,利用率等等)。有一些强大的框架,例如nagios,可以执行这种监控。

在开始之前,您可以从分析 TCP 连接中的延迟或利用 ICMP 回声 (ping) 进行测量开始,但请注意,这不是一件容易的事。

路由

由于您无法用 C# 编写内核模式或驱动程序代码,因此您将通过监视流量并使用 WinPcap 等库将网络数据包发送到正确的接口来执行"用户空间"路由。(我假设仅仅更改系统路由是不够的,因为您写了要单独路由每个数据包)。

已经有一个名为 eEx Network Library 的库,它提供了类和基础结构来完成 C# 中的此类任务。还有一个路由示例,您可以将其用作起点。您可以通过从类 Router 或 DirectInterfaceIO 继承来创建自定义路由器,具体取决于最适合您的类。

下面是一个示例,它可以替换上面提到的示例中的路由器类。

//A simple, custom router
public class CustomRouter : DirectInterfaceIOHandler
{
    //Is called for each frame - place your logic here. 
    protected override void HandleTraffic(Frame fInputFrame)
    {
        //Get the IP frame
        //IPv4Frame ipv4frame = GetIPv4Frame(fInputFrame);
        IPFrame ipframe = GetIPFrame(fInputFrame);
        if (ipframe != null)
        {
            //Iterate over all interfaces.
            foreach (IPInterface ipInterface in lInterfaces)
            {
                //Adjust this condition to check whether ipInterface is the correct interface for this frame
                if (true)
                {
                    //With this overload of send, the interface handles hardware addressing. 
                    ipInterface.Send(fInputFrame, ipframe.DestinationAddress);
                }
            }
        }
    }
}

最新更新