在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. cas+tomcat+shiro实现单点登录-3-CAS服务器深入配置(连接MYSQL)

    目录 1.tomcat添加https安全协议 2.下载cas server端部署到tomcat上 3.CAS服务器深入配置(连接MYSQL) 4.Apache Shiro 集成Cas作为cas cli ...

  2. C#Mysql数据库爆破源码

    声明: 代码仅供学习参考使用!开启了一个子线程,进行爆破! 速度不是很快,代码不是很规范,希望大牛不要喷我! c#控制台程序,需要引用MySql.Data.dll 默认用户名: root密码字典: p ...

  3. curl抓取信息

    <?php $hotel = new curl(false,0); $str = $hotel -> post("http://www.todayinns.com/login.p ...

  4. 容器 MAP

    1.equal_range pair <myMapDef::iterator,myMapDef::iterator> myresult; myPairDef ps=*MyMap1.begi ...

  5. Idea使用记录--添加Problems&&解决Autowired报错could not autowire

    今天在使用Idea的时候,发现Idea在整个每次找到错误代码非常不方便(Idea如果类中有错误,没有打开过类并不会提示,比如构建工程后缺少jar包问题).我想快速看到工程哪里出问题类似于eclipse ...

  6. AFNetworking 系列教程

      前几天发现iOS9.xcode7之后NSURLConnection的API被弃用了,取而代之的是NSURLSession,看到这我首先想到了AFNetworking,因为工程的所有网络请求都是基于 ...

  7. Nexus Root Toolkit教程——刷机

    Nexus Root Toolkit是Nexus系列设备专属解锁.root.刷机.修复工具.本教程以Nexus7二代刷安卓5.0 Lollipop系统为实例演示刷机过程. 标签: 安卓5.0刷机教程 ...

  8. eclipse kepler 创建 maven web 项目

    1. 创建一个maven project 注意 :不勾选 create a simple project 选项.点击next   2. 下一步后,在filter 中输入webapp,选中 maven- ...

  9. cf E. Dima and Magic Guitar

    http://codeforces.com/contest/366/problem/E |x1-x2|+|y1-y2|有四种情况 1.-(x1-x2)+(y1-y2); 2.(x1-x2)-(y1-y ...

  10. 面试题 41 和为s的两个数字VS 和为S的连续整数序列

    (1)和为S的两个数字 bool findNumberWithSum(int data[], int length, int sum, int &numb1, int &numb2){ ...