• 在内网服务器中获得真正的客户端ip的方法


    如下代码:
    /// <summary>
        
    /// RealIP 的摘要说明:
        
    /// 获得用户的真实ip,由于squidserver的原因直接取到的ip是内网ip
        
    /// </summary>

        abstract public class RealIP
        
    {
            
    const string HEADER_KEY_IP = "X-Forwarded-For";

            
    /// <summary>
            
    /// 真实ip
            
    /// </summary>

            public static string Value
            
    {
                
    get
                
    {
                    System.Web.HttpRequest request 
    = System.Web.HttpContext.Current.Request;
                    
    string ip = string.Empty;
                    
    string ipHeader = request.Headers[HEADER_KEY_IP];
        
                    
    if(!string.IsNullOrEmpty(ipHeader))
                    
    {
                        
    string[] IPs = ipHeader.Split(',');
                        
    foreach (string ipItem in IPs)
                        
    {
                            
    if ((!string.IsNullOrEmpty(ipItem)) && (!IsLocalIP(ipItem)))
                            
    {
                                ip 
    = ipItem;
                                
    break;
                            }

                        }

                    }

                    
    if(ip == string.Empty)ip = request.UserHostAddress;
                    
    return ip;
                }

            }


            
    static bool IsLocalIP(string ip)
            
    {
                
    return ip.StartsWith("192.168."|| ip.StartsWith("172.16."|| ip.StartsWith("10.");
            }

        }

    其原理就是局域网内的服务器,向真实real server转发请求时,将客户端用户的真实ip放到了Http头信息中。
  • 相关阅读:
    valueOf与toString
    责任链模式
    Js中Symbol对象
    Vue路由懒加载
    updatedb命令
    策略模式
    Docker(3)- Centos 7.x 下 Docker 镜像加速配置
    Vmware
    Docker(2)- Centos 7.x 下安装 Docker
    Docker(1)- 什么是 Docker
  • 原文地址:https://www.cnblogs.com/yukaizhao/p/client_real_ip.html
Copyright © 2020-2023  润新知