net core獲取本地ip地址的兩種方式

以獲取客戶端請求的ipv4爲例

一. 使用Request.HttpContext方式獲取:

/// <summary>
/// 獲取本地ipv4
/// </summary>
/// <returns></returns>
[HttpGet, Route("getlocalIp")]
public IActionResult GetlocalIp()
{
    var result = new ResultInfo<string>();

    //獲取客戶端請求的ipv4
    var ip = Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();

    result.Data = ip;
    return Ok(result);
}

注意:此種方式當本地網絡路由器做了限制,或者使用了VPN等此種方式獲取ip將不適用,獲取所有網絡適配器名稱可採取第二種方式

二. 根據網絡適配器獲取ip:

private IList<string> GetHostIpForFas()
{
    try
    {
        IList<string> strIp = new List<string>();
        //NetworkInterface:提供網絡接口的配置和統計信息。
        NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
        foreach (NetworkInterface adapter in adapters)
        {
            IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
            UnicastIPAddressInformationCollection allAddress = adapterProperties.UnicastAddresses;
            //這裏是根據網絡適配器名稱找到對應的網絡,adapter.Name即網絡適配器的名稱
            if (allAddress.Count > 0 && adapter.Name == "WLAN 2")
            {
                foreach (UnicastIPAddressInformation addr in allAddress)
                {
                    if (addr.Address.AddressFamily == AddressFamily.InterNetwork)
                    {
                        strIp.Add(addr.Address.ToString());
                    }
                }
            }
        }
        return strIp;
    }
    catch (Exception ex)
    {
        return null;
    }
}

可對應電腦上的網絡屬性信息,見下圖:
網絡屬性
注意:此種方式需提前知道網絡適配器的名稱,並保證網絡適配器名稱不變。

ps:如有不足或還有其他方式能獲取ip,歡迎大家評論指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章