• 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;
    
            }
  • 相关阅读:
    2019-2020-1 20191312《信息安全专业导论》第十二周学习总结
    GPG
    2019-2020-1 20191312《信息安全专业导论》第十一周学习总结
    wireshark
    ssh
    Nmap
    2019-2020-1 《python程序设计》20192428魏来 综合实践报告
    20192428 魏来 2019-2020《Python程序设计》 实验三 报告
    20192428 实验二《Python程序设计》实验报告
    20192428 实验一《Python程序设计》实验报告
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/5983957.html
Copyright © 2020-2023  润新知