当前正在使用的IP地址

时间:2016-02-22 10:20:26

标签: c# .net

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

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

1 个答案:

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

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