• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
like1
博客园    首页    新随笔    联系   管理    订阅  订阅

C#如何获取Ip地址

此处我在某一个项目上,客户这边让我们在系统日志中添加登陆者和被访问者Ip,所以再次研究出这套程序,亲测可用。

/// <summary>
/// 获取Ip
/// </summary>

public static string Ip
{
  ·get
    {
      var result = string.Empty;
      if (HttpContext.Current != null)
        result = GetWebClientIp();
      if (result.IsEmpty())
        result = GetLanIp();
      return result;
    }
}

/// <summary>
/// 获取Web客户端的Ip
/// </summary>
public static string GetWebClientIp()
{
  var ip = GetWebRemoteIp();
  foreach (var hostAddress in Dns.GetHostAddresses(ip))
  {
  if (hostAddress.AddressFamily == AddressFamily.InterNetwork)
    return hostAddress.ToString();
  }
    return string.Empty;
}

/// <summary>
/// 获取Web远程Ip
/// </summary>
private static string GetWebRemoteIp()
{
  return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}

/// <summary>
/// 获取局域网IP
/// </summary>
private static string GetLanIp()
{
  foreach (var hostAddress in Dns.GetHostAddresses(Dns.GetHostName()))
    {
      if (hostAddress.AddressFamily == AddressFamily.InterNetwork)
      return hostAddress.ToString();
    }
  return string.Empty;
}

/// <summary>
/// 获取主机名
/// </summary>
public static string Host
{
  get
    {
      return HttpContext.Current == null ? Dns.GetHostName() : GetWebClientHostName();
    }
}

/// <summary>
/// 获取Web客户端主机名
/// </summary>
private static string GetWebClientHostName()
{
  if (!HttpContext.Current.Request.IsLocal)
    return string.Empty;
  var ip = GetWebRemoteIp();
  var result = Dns.GetHostEntry(IPAddress.Parse(ip)).HostName;
  if (result == "localhost.localdomain")
    result = Dns.GetHostName();
  return result;
}

posted @ 2022-06-15 13:26  冥泽  阅读(997)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3