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

时间:2022-10-19 04:01:14

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

摘 要 随着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出版 机械工业出版社

上一篇:在美术教学中发展儿童的形象思维 下一篇:借助形象思维教好说明文