我有一个C#Win 7桌面应用程序,使用HttpClient发送Web请求。有没有办法找出用于发送这些请求的网络适配器或NetworkInterface? (可能有多个LAN,WAN和虚拟适配器。)
我真的不想使用TcpClient,UdpClient或任何套接字级程序,因为它更低级别,用户可能决定阻止端口。
我试图寻找的一条路线是找到当前请求的IP地址,然后尝试将其与NetworkInterface中的IP地址匹配(使用NetworkInterface.GetAllNetworkInterfaces),但HttpClient不会告诉您您的IP用于发送请求。
答案 0 :(得分:0)
这就是我最终做的事情:
IPAddress localAddr = null;
try
{
using (UdpClient udpClient = new UdpClient("8.8.8.8", 0)) //connect to google dns
{
localAddr = ((IPEndPoint)udpClient.Client.LocalEndPoint).Address;
udpClient.Client.Close();
udpClient.Close();
}
}
catch (SocketException sex)
{
Console.WriteLine("Failed to make UDP connection, no connection to DNS ? ");
}
//find all network interfaces
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
NetworkInterface activeAdapter = null;
foreach (NetworkInterface adapter in nics.Where(n => n.OperationalStatus == OperationalStatus.Up))
{
//wifi adapter will be 'up' only if its associated with a hotspot
IPInterfaceProperties properties = adapter.GetIPProperties();
var match = properties.UnicastAddresses.Any(a => a.Address.Equals(localAddr));
if (match)
{
activeAdapter = adapter;
break;
}
}
我不得不依赖UDP客户端,找不到从HttpClient
获取ip的方法这将为您提供当前用于连接互联网的“活动”网络适配器。