在ASP中使用

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"];
//方法三
(1)

string strHostName = System.Net.Dns.GetHostName();

ASP.NET获取IP的6种方法 astring clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();

(2)

System.Net.IPAddress[] addressList =
Dns.GetHostByName(Dns.GetHostName()).AddressList;

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

客户端:

//方法五
var ip = '<!--#echo var="REMOTE_ADDR"-->';
"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.
}

备注:

1. 有些代理是不会发给我们真实IP地址的

2. 有些客户端会因为“header_access deny”的安全设置而不发给我们IP

 

ServerVariables变量说明

serverVariables参数
response.write(request.serverVariables("varName"))
'varName就是需测的数据

ALL_HTTP
 客户端发送的所有HTTP标头,他的结果都有前缀HTTP_。
 
ALL_RAW
 客户端发送的所有HTTP标头,其结果和客户端发送时一样,没有前缀HTTP_

APPL_MD_PATH
 应用程序的元数据库路径。
 
APPL_PHYSICAL_PATH
 与应用程序元数据库路径相应的物理路径。
 
AUTH_PASSWORD
 当使用基本验证模式时,客户在密码对话框中输入的密码。
 
AUTH_TYPE
 这是用户访问受保护的脚本时,服务器用于检验用户的验证方法。
 
AUTH_USER
 代验证的用户名。
 
CERT_COOKIE
 唯一的客户证书ID号。
 
CERT_FLAG
 客户证书标志,如有客户端证书,则bit0为0。如果客户端证书验证无效,bit1被设置为1。

CERT_ISSUER
 用户证书中的发行者字段。
 
CERT_KEYSIZE
 安全套接字层连接关键字的位数,如128。
 
CERT_SECRETKEYSIZE
 服务器验证私人关键字的位数。如1024。
 
CERT_SERIALNUMBER
 客户证书的序列号字段。
 
CERT_SERVER_ISSUER
 服务器证书的发行者字段
 
CERT_SERVER_SUBJECT
 服务器证书的主题字段。
 
CERT_SUBJECT
 客户端证书的主题字段。
 
CONTENT_LENGTH
 客户端发出内容的长度。
 
CONTENT_TYPE
 客户发送的form内容或HTTP PUT的数据类型。
 
GATEWAY_INTERFACE
 服务器使用的网关界面。
 
HTTPS
 如果请求穿过安全通道(SSL),则返回ON。如果请求来自非安全通道,则返回OFF。

HTTPS_KEYSIZE
 安全套接字层连接关键字的位数,如128。
 
HTTPS_SECRETKEYSIZE
 服务器验证私人关键字的位数。如1024。
 
HTTPS_SERVER_ISSUER
 服务器证书的发行者字段。
 
HTTPS_SERVER_SUBJECT
 服务器证书的主题字段。
 
INSTANCE_ID
 IIS实例的ID号。
 
INSTANCE_META_PATH
 响应请求的IIS实例的元数据库路径。
 
LOCAL_ADDR
 返回接受请求的服务器地址。
 
LOGON_USER
 用户登录Windows NT的帐号
 
PATH_INFO
 客户端提供的路径信息。
 
PATH_TRANSLATED
 通过由虚拟至物理的映射后得到的路径。
 
QUERY_STRING
 查询字符串内容。
 
REMOTE_ADDR
 发出请求的远程主机的IP地址。
 
REMOTE_HOST
 发出请求的远程主机名称。
 
REQUEST_METHOD
 提出请求的方法。比如GET、HEAD、POST等等。
 
SCRIPT_NAME
 执行脚本的名称。
 
SERVER_NAME
 服务器的主机名、DNS地址或IP地址。
 
SERVER_PORT
 接受请求的服务器端口号。
 
SERVER_PORT_SECURE
 如果接受请求的服务器端口为安全端口时,则为1,否则为0。
 
SERVER_PROTOCOL
 服务器使用的协议的名称和版本。
 
SERVER_SOFTWARE
 应答请求并运行网关的服务器软件的名称和版本。
 
URL
 提供URL的基本部分

      

asp.net获取ip地址的方法的更多相关文章

  1. js获取IP地址多种方法实例教程

    js获取IP地址方法总结   js代码获取IP地址的方法,如何在js中取得客户端的IP地址.原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338. ...

  2. PHP获取IP地址的方法,防止伪造IP地址注入攻击

    PHP获取IP地址的方法 /** * 获取客户端IP地址 * <br />来源:ThinkPHP * <br />"X-FORWARDED-FOR" 是代理 ...

  3. js获取IP地址的方法小结

    s代码获取IP地址的三种方法,在js中取得客户端的IP地址. 原文地址:http://www.jbxue.com/article/11338.html 1,js取得IP地址的方法一 <scrip ...

  4. JavaScript和微信小程序获取IP地址的方法

    最近公司新加了一个需求,根据用户登录的IP地址判断是否重复登录,重复登录就进行逼退,那么怎么获取到浏览器的IP地址呢?最后发现搜狐提供了一个JS接口,可以通过它获取到客户端的IP. 接口地址如下: h ...

  5. Delphi 获取Ip地址的方法总结

    通过注册表获取或修改Ip 想到Windows会把系统网卡相关信息存入注册表,肯定可通过注册表读取具体ip信息.大致思路是找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\W ...

  6. Asp.Net_获取IP地址

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

  7. C++通过域名获取IP地址的方法;调试通过!

    BOOL GetIpByDomainName(][],int *nCount) { WSADATA wsaData; ]; HOSTENT *pHostEnt; ; struct sockaddr_i ...

  8. 正确JAVA从本机获取IP地址的方法

    https://www.cnblogs.com/xiaoBlog2016/p/7076230.html

  9. ASP.NET 取得 Request URL 的各个部分和通过ASP.NET获取URL地址的方法

    网址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc Request.ApplicationPath / Request.Phys ...

随机推荐

  1. SQL Server 中创建数据库、更改主文件组示例

    以下示例在 SQL Server 实例上创建了一个数据库.该数据库包括一个主数据文件.一个用户定义文件组和一个日志文件.主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件.ALTER DAT ...

  2. centos上如何安装git

    安装依赖包 1.yum -y install zlib-devel openssl-devel perl cpio expat-devel gettext-devel 2.yum install au ...

  3. mac下 配置tomcat

    第一步: 1.打开你的终端:然后输入  pico .bash_profile   回车 第二步: 2. 然后添加你tomcat放入的路径的path 编辑完后,control+x   (保存)    继 ...

  4. Android学习笔记--Broadcast, BroadcastReceiver(广播)

    参考资料:http://www.cnblogs.com/playing/archive/2011/03/23/1992030.html 在 Android 中使用 Activity, Service, ...

  5. Gradle sync failed: failed to find Build Tools revision 21.1.2

    从github上下载了一个开源项目到Android Studio 出现以下问题: 下午2:56:05 Gradle sync started下午3:00:11 Gradle sync failed: ...

  6. ROM包内的大致框架及各个文件的作用[转]

    1.system/app这个里面主要存放的是常规的应用程序,都是以apk格式结尾的文件,在这个文件夹下面的程序为系统默认的组件,个人安装的软件不会出现在这里,而是data文件夹中. 2.system/ ...

  7. photoshop sdk

    http://blogs.adobe.com/photoshop/2013/09/introducing-adobe-generator-for-photoshop-cc.html

  8. Java7新语法 -try-with-resources

    http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html The try-with- ...

  9. AspNetPager实现真分页+多种样式

    真假分页 分页是Web应用程序中最常用到的功能之一.当从数据库中获取的记录远远超过界面承载能力的时候,使用分页可以使我们的界面更加美观,更加的用户友好.分页包括两种类型:真分页和假分页. 其中假分页就 ...

  10. 转:ASP.Net MVC:校验、AJAX与过滤器

    原文地址:http://blog.jobbole.com/85005/ 一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.Componen ...