在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. 重新认识Intent

    相信android开发工程师,对Intent一定不陌生,在整个开发中随时都用到了,今天我们总结一下Intent. 1. 为什么需要Intent? 在android Intent机制是协助应用间的交互与 ...

  2. Sql Server批量停止作业

    CREATE Proc [dbo].[Proc_StopJob] as begin declare @I int declare @JobID uniqueidentifier -- 1. creat ...

  3. javascript学习教程之---如何从一个tab切换到banner幻灯片的转换2

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. AES CBC 128的实现

    原由 AES已经变成目前对称加密中最流行算法之一,AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据. 项目中需要使用AES对密码信息进行加密,由嵌入式设备使用C语言进行加 ...

  5. docker中运行ASP.NET Core Web API

    在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...

  6. Python 变量有效范围

  7. 汉诺塔问题C++实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下进行汉诺塔问题的递归实现 #include <iostream.h> int gb ...

  8. 树莓派设置固定ip

    2016发布的rasbian采用的网络机制是dhcpcd: 不能使用以前的修改配置文件/etc/network/interfaces: 新的配置方式保持/etc/network/interfaces不 ...

  9. 关于自动编译iOS工程,生成app及ipa文件的方法-备

    文章地址. 1.所需语句(可直接在命令行中执行) xcodebuild -configuration Release        进入所在工程的根目录文件夹,执行上面的语句,即可开始自动使用rele ...

  10. 深入理解7816(5)-----关于文件DF/EF/MF/FID/AID/SFI

    刚开始接触CPU卡的时候,对于各种文件.应用的定义容易模糊不清,通常不能准确地界定什么是文件?什么是应用?DF和EF的区别真的就像计算机里的目录和文档那样吗?FID.AID.SFI这些概念都在什么时候 ...