用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧计算机网络

利用ASP获取客户端真实IP地址

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 10:09:14
【本文由PB创新网为您整理】

摘  要      随着Internet 的普及以及网络用户的增多,各个网站急需解决的问题就是如何给用户提供更好的服务,以及防止某些用户的恶意攻击,要达到这一目的首先要获得用户方的真实的IP地址,然后再对该IP地址作相应的处理,本文阐述的就是如何获取客户端的真实IP地址。

关键字      ASP      HTML      IP地址

一.      前言
随着Internet 的普及以及网络用户的增多,摆在各个网站面前的是网络安全问题以及对客户的管理问题,比如说,有个用户不停的攻击你的网站,那么你可以查出他的IP地址,然后封杀他的IP地址;有个用户启动几十个线程到你网站下载文件,导致别人不好下载,那么你可以允许他的IP地址最多只能启动两个线程;有个用户试图以多个身份登陆到你的游戏室下棋,那你可以设置一个IP只能以一个身份登陆一个游戏室,所有的这些问题都是建立在你要先获取他的IP地址为前提,本文讲的就是如何通过服务器获取客户端的IP地址。
二.      ASP简介
ASP全称Active Server Pages 它是在服务器端运行的脚本语言, 使用它可以创建和运行动态、交互的 Web 服务器应用程序。使用 ASP 可以组合 HTML 页 、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web 的功能强大的应用程序,它是在标准的HTML流中用<%      %>加入ASP语句,然后以.asp作为扩展名的网页。由于脚本在服务器上而不是在客户端运行,传送到浏览器上的 Web 页是在 Web 服务器上生成的,所以不必担心浏览器能否处理脚本:Web 服务器已经完成了所有脚本的处理,并将标准的 HTML 传输到浏览器,由于只有脚本的结果返回到浏览器,所以服务器端脚本不易复制,用户看不到创建他们正在浏览的页的脚本命令。
ASP3.0有7个内建对象,其中有两个对象一直与客户端联系,一个是Request,另一个是Response, Request 对象是获取客户端 HTTP 信息 ,而Response 对象正好相反,是用来控制发送给用户的信息,包括直接发送信息给浏览器、重定向浏览器到另一个 URL 或设置 cookie 的值。这两个对象都包含了一些属性、方法、变量以及数据集合,两者的语法为:
Request或Response[. 集合 属性 方法 ]( 变量 )
Request对象里有个ServerVariables的数据集合,也是本文要用到的,叫服务器环境变量,它能够自动获得客户端的很多信息,由于这个集合的变量比较多,本文只列少许常用的:

ALL_HTTP      客户端发送的所有 HTTP 标题文件。
CONTENT_LENGTH      客户端发出内容的长度。
CONTENT_TYPE      内容的数据类型。如:“text/html”。同附加信息 的查询一起使用,如 HTTP 查询 GET、POST 和 PUT。
LOCAL_ADDR      返回接受请求的服务器地址。如果在绑定多个IP 地址的多宿主机器上查找请求所使用的地址 时,这条变量非常重要。
LOGON_USER      用户登录 Windows NT 的账号。
QUERY_STRING      查询 HTTP 请求中问号(?)后的信息。
REMOTE_ADDR      发出请求的远程主机 (client) 的 IP 地址。
REMOTE_HOST      发出请求的主机 (client) 名称。如果服务器无此 信息,它将设置为空的 MOTE_ADDR 变量。
REQUEST_METHOD      该方法用于提出请求。相当于用于 HTTP 的 GET、HEAD、POST等 等。
SERVER_NAME      出现在自引用 URL 中的服务器主机名、DNS 化名 或 IP 地址。
SERVER_PORT      发送请求的端口号。

三.      实现
正如前文介绍ASP那样,我们可以利用 Request.ServerVariables("REMOTE_ADDR") 来取得客户端的 IP 地址,假如网站的主页是index.asp,我们可以在它的HTML里加上这样一段代码:
<html>
<head>
<title>欢迎访问本网站</title>
</head>
<body>
……………………
……………………
……………………
<% Ip_address=Request.ServerVariables ("REMOTE_ADDR")      '获得客户端的ip地址
     Response Ip_address      '显示客户端的ip地址,调试程序时用用而已,真正用的时候不应该让用户看到
%>
……………………
……………………
……………………
</body>
</html>

正常情况这样就能取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址,要想透过代理服务器取得客户端的真实  IP 地址,就要使用微软公司在一般ASP技术文档中并未公布的Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取,但是需要注意的是:如果客户端没有通过代理服务器来访问,那么用 Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取到的值将是空的。因此,如果要在程序中使用此方法,可以这样处理:
<html>
<head>
<title>欢迎访问本网站</title>
</head>
<body>
……………………
……………………
……………………
<% Ip_address=Request.ServerVariables ("HTTP_X_FORWARDED_FOR")
     If Ip_address=""      Then
           Ip_address= Request.ServerVariables ("REMOTE_ADDR")
……………………
……………………
……………………
</body>
</html>
即:如果客户端通过代理服务器,则取 HTTP_X_FORWARDED_FOR 的值,如果没通过代理服务器,就取 REMOTE_ADDR 的值。

通过这种办法,我们就能获得客户端真实的IP地址了,一旦有了IP地址,剩下的问题就是赋予该IP地址什么权限的问题——是拒绝或是欢迎一切由您掌握


参考文献:
1.      Beginning Active Server Pages3.0 David Buser  John Kaufman著,2001.6出版 机械工业出版社
2.      Professional Active Server Pages3.0 David Buser  John Kaufman著,2001.6出版 机械工业出版社

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:53,343.75000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号