我桌面上有多个网卡。我使用HTTP与一台服务器通信。当我发送和接收回复时。我想知道所有哪些NIC用于与特定HTTP请求进行通信。
我需要知道这一点,因为多个NIC可以连接到专用网络,并且只有一个NIC连接到我想要托管回调URL的所需HTTP服务器。我正在使用C#,。NET 4.0
任何帮助将不胜感激。
答案 0 :(得分:3)
您无法真正询问请求来自哪个NIC,因为您不应该关心。但是您可以获得请求所在的IP:
var localAddress = Request.ServerVariables["LOCAL_ADDR"];
您可以找到有关服务器变量here的更多信息。
答案 1 :(得分:1)
正如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("");
}
答案 2 :(得分:1)
.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来尝试推断哪个本地适配器用于正在进行的连接。
但一般来说,这种方法很脆弱,你应该仔细考虑是否真的需要这个功能。