当前正在使用的 IP 地址

本文关键字:IP 地址 | 更新日期: 2023-09-27 18:35:43

我有一个使用 HttpClient 发送 Web 请求的 C# Win 7 桌面应用程序。有没有办法找出哪个网络适配器或网络接口用于发送这些请求?(可能有多个 LAN、WAN 和虚拟适配器。

我真的不想使用TcpClient,UdpClient或任何套接字级程序,因为它的级别更低,用户可能会决定阻止端口。
我试图追求的一种方法是找到当前请求的IP地址,然后尝试将其与NetworkInterface的IP地址匹配(使用NetworkInterface.GetAllNetworkInterfaces),但HttpClient不会告诉您用于发送请求的IP。

当前正在使用的 IP 地址

这就是我最终所做的:

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的方法

这将为您提供用于连接到互联网的当前"活动"网络适配器。