【问题标题】:Identify NIC on which HTTP response come识别 HTTP 响应来自的 NIC
【发布时间】:2011-08-16 09:57:00
【问题描述】:

我的桌面上有多个 NIC。我正在使用 HTTP 与一台服务器通信。当我发送和接收响应时。我想知道哪个 NIC 被用于针对特定 HTTP 请求进行通信。

我需要知道这一点,因为多个 NIC 可以连接到专用网络,并且只有一个 NIC 连接到我想要托管回调 URL 的所需 HTTP 服务器。我正在使用 C#、.Net 4.0

我们将不胜感激。

【问题讨论】:

  • 听起来像是一个非常脆弱的应用程序。
  • @Andrew 我认为有正当理由想要这样做。

标签: c# .net http network-programming


【解决方案1】:

您不能真正询问请求来自哪个 NIC,因为您不应该关心。但是你可以得到请求进来的IP:

var localAddress = Request.ServerVariables["LOCAL_ADDR"];

您可以找到有关服务器变量here 的更多信息。

【讨论】:

    【解决方案2】:

    正如 Dave Van den Eynde 所说,这会获取机器上适配器的 IP 地址:-

      foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces())
      {
        Console.WriteLine("Name: " + netInterface.Name);
        Console.WriteLine("Description: " + netInterface.Description);
        Console.WriteLine("Addresses: ");
        IPInterfaceProperties ipProps = netInterface.GetIPProperties();
        foreach (UnicastIPAddressInformation addr in ipProps.UnicastAddresses)
        {
          Console.WriteLine(" " + addr.Address.ToString());
        }
        Console.WriteLine("");
      }
    

    【讨论】:

    • 谢谢...这将列出我桌面上的所有 NIC。我想获得能够与 HTTP 服务器通信的 NIC。有时它可以是 Wifi 适配器,或者用户也可以使用 VPN 访问
    • 按照 Dave Van den Eynde 的说法获取传入的 IP 地址,然后遍历列表以查找该 IP 地址。
    【解决方案3】:

    .NET 的 HTTPWebRequest 和相关对象不会为您将 LocalEndpoint 信息向上推入堆栈。如果您使用 FiddlerCore 之类的东西,您可以在每个接口上尝试请求,或者您可以使用如下技术:http://blogs.msdn.com/b/fiddler/archive/2011/03/09/mapping-socket-or-port-to-owner-process-in-c-sharp-dotnet.aspx 尝试推断哪个本地适配器用于正在进行的连接。

    但一般来说,这种方法会很脆弱,你应该仔细考虑你是否真的需要这个功能。

    【讨论】:

    • 感谢@EricLaw -MSFT 正如我所提到的
    • 谢谢@EricLaw -MSFT 是否有任何其他方法可以确定哪个适配器最适合托管回调 URL,以便它可以接收来自特定 HTTP 服务器的事件,该服务器将发送错误以响应请求。我使用 GETBestInterface() 但当用户使用 VPN 登录时它没有给出最佳匹配,它返回的数字在 64xxx 范围内
    猜你喜欢
    • 2020-03-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多