0

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

我的方法是:

1.检测适配器并测试它的全速带宽 2.检查每个传入的数据包并通过更改其 IP 标头将其路由到该适配器。

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

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

4

1 回答 1

0

一般来说,这并不容易。

带宽检测

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

如果你想检测连接的带宽,你不仅要观察网络适配器和它的能力,还要观察连接的属性甚至整个基础设施(路由或交换硬件、电缆、流量,利用率等等)。有强大的框架,例如 nagios,可以执行此类监控。

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

路由

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

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

下面是一个例子,可以替换上面例子中的Router类。

//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);
                }
            }
        }
    }
}
于 2013-10-24T12:56:52.103 回答