【问题标题】:How to detect strongest Network adapter( connection) and route all data over that detected strong adapter using .net programming如何使用.net编程检测最强的网络适配器(连接)并通过检测到的强适配器路由所有数据
【发布时间】:2013-11-02 19:28:45
【问题描述】:

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

我的方法是:

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

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

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

【问题讨论】:

  • “最强的网络适配器”可能不是最佳选择。它所连接的网络可能过于拥挤,以致于使另一条路由成为更好的选择。如果有备用路由,TCP/IP 将选择路由表中定义的权重最小的路由。您似乎在尝试猜测 TCP/IP,或编写路由器。买一个。

标签: c# sockets networking network-programming ip


【解决方案1】:

一般来说,这并不容易。

检测带宽

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

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

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

路由

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

已经有一个名为eEx Network Library 的库,它提供了类和基础结构来在C# 中完成此类任务。还有一个routing 的示例,您可以将其用作起点。您可以通过从类 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);
                }
            }
        }
    }
}

【讨论】:

  • 非常感谢.. @Emiswelt。我会试试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 2020-04-14
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多