zoukankan      html  css  js  c++  java
  • Asp.net MVC获取访问系统的客户端计算机的主机名和IP地址

    string HostName = string.Empty; 
    string ip = string.Empty;
    string ipv4 = String.Empty;
    
    if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"]))
         ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]);
    if (string.IsNullOrEmpty(ip))
         ip = Request.UserHostAddress;
    
     // 利用 Dns.GetHostEntry 方法,由获取的 IPv6 位址反查 DNS 纪录,
     // 再逐一判断何者为 IPv4 协议,即可转为 IPv4 位址。 foreach (IPAddress ipAddr in Dns.GetHostEntry(ip).AddressList) { if (ipAddr.AddressFamily.ToString() == "InterNetwork") { ipv4 = ipAddr.ToString(); } } HostName = "主机名: " + Dns.GetHostEntry(ip).HostName + " IP: " + ipv4;

      在本机进行程序代码调试测试,其中字符串ip会显示为::1,是IPv6的IP地址格式,相当于127.0.0.1。最终处理成IPv4的显示地址。

    -------------------------------------------------------------------------------------------------------------------------------------------------

    上述方法,代码调试没有问题,但是放在服务器上后,客户端访问就出问题了,有部分电脑能获取主机名,但是ipv4显示为空,另外一部分

    Dns.GetHostEntry(ip)中的ip正常,但是执行Dns.GetHostEntry(ip)貌似为null,导致出现异常。最后选择的方法是只记录客户端的IPV4,

    /// <summary>
            /// 获取web客户端ip
            /// </summary>
            /// <returns></returns>
            public static string GetWebClientIp()
            {
    
                string userIP = "未获取用户IP";
    
                try
                {
                    if (System.Web.HttpContext.Current == null
                     || System.Web.HttpContext.Current.Request == null
                     || System.Web.HttpContext.Current.Request.ServerVariables == null)
                    {
                        return "";
                    }
    
                    string CustomerIP = "";
    
                    //CDN加速后取到的IP simone 090805
                    CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
                    if (!string.IsNullOrEmpty(CustomerIP))
                    {
                        return CustomerIP;
                    }
    
                    CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    
                    if (!String.IsNullOrEmpty(CustomerIP))
                    {
                        return CustomerIP;
                    }
    
                    if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
                    {
                        CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                       
                        if (CustomerIP == null)
                        { 
                            CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
                        }
                    }
                    else
                    {
                        CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                    }
    
                    if (string.Compare(CustomerIP, "unknown", true) == 0 || String.IsNullOrEmpty(CustomerIP))
                    {
                        return System.Web.HttpContext.Current.Request.UserHostAddress;
                    }
                    return CustomerIP;
                }
                catch { }
    
                return userIP;
    
            }
  • 相关阅读:
    递归实现随机数不重复问题
    今天写的一个工厂工具类
    Win7 x64 IIS运行ASP+Access故障完美解决方法(转)
    li中,标题和日期一排,且日期靠右
    [学习笔记] extends implements 的区别与联系 [转载]
    [学习笔记] vim使用大全 [转]
    MidPoint Displacement for Terrain Rendering
    CryEngine3 打造另一个真实世界
    Hello C++ AMP!
    DetailMap For Terrain Rendering
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/5983957.html
Copyright © 2011-2022 走看看