zoukankan      html  css  js  c++  java
  • asp.net各种获取客户端ip方法

    Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址。 

    要想透过代理服务器取得客户端的真实IP地址,就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取。 

    不过要注意的事,并不是每个代理服务器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的IP。 

    还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用 Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取到的值将是空的。因此,如果要在程序中使用此方法,可以这样处理: 
    ...... 
    userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 
    If userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR") 
    ...... 


    //方法一 
    HttpContext.Current.Request.UserHostAddress; 

    //方法二 
    HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 

    //方法三 
    string strHostName = System.Net.Dns.GetHostName(); 
    string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString(); 

    //方法四(无视代理) 
    HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 


    客户端: 

    //方法五 
    var ip = ' <!--#echo var="REMOTE_ADDR"-->'; 
    alert("Your IP address is "+ip); 

    //方法六(无视代理) 
    function GetLocalIPAddress() 

        var obj = null; 
        var rslt = ""; 
        try 
        { 
            obj = new ActiveXObject("rcbdyctl.Setting"); 
            rslt = obj.GetIPAddress; 
            obj = null; 
        } 
        catch(e) 
        { 
            // 
        } 
        
        return rslt; 

    来自印度的MCT Maulik Patel提供了一种服务端的解决方案,很好: 

    if(Context.Request.ServerVariables["HTTP_VIA"]!=null) // 服务器, using proxy 

          得到真实的客户端地址 
        ip=Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();  // Return real client IP. 

    else//如果没有使用代理服务器或者得不到客户端的ip  not using proxy or can't get the Client IP 

          
          //得到服务端的地址 
        ip=Context.Request.ServerVariables["REMOTE_ADDR"].ToString(); //While it can't get the Client IP, it will return proxy IP. 

  • 相关阅读:
    JRE、JDK和JVM之间的关系
    操作系统——CPU、计算机的构成
    为什么要用Java泛型
    【docker】 centos7 下 使用docker 安装 LNMP
    【docker】 centos7 安装docker
    【laravel5.6】 IlluminateDatabaseQueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
    【truffle】Error: `truffle init` no longer accepts a project template name as an argument.
    【宝塔面板】pm2 安装没反应问题
    【node.js】】MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。
    【git】 linux 环境安装git
  • 原文地址:https://www.cnblogs.com/wanshutao/p/3538334.html
Copyright © 2011-2022 走看看