- 积分
- 176
- 帖子
- N币
-
- 主题
- A币
-
- 注册时间
- 2014-9-25
- 最后登录
- 1970-1-1
|
大家好,因为本人有工作所以时间有限,管理网站程序必须简单、快捷、易于修改,所以自己是基于ASP编写的程序。但大家都知道,用NAT123的80端口映射做别名绑定访问的话,用常见方法(如Request.ServerVariables("HTTP_X_FORWARDED_FOR")或Request.ServerVariables("REMOTE_ADDR") )是无法获取访客的真实IP的,所获取到的只是绑定内网的IP(如127.0.0.1或localhost等),而且永远只记录到一个访客!
那么能不能真正实现获取到访客真实IP呢?答案是肯定的。因为今天星期天,就玩下通宵,看电影之余研究了一下并作出分享,请看下面方法:
用Request.ServerVariables("ALL_HTTP")或Request.ServerVariables("All_Raw"),这两个都会取得访问者客户端的所有参数!两者的区别在于:后者获取到的HTTP_X_FORWARDED_FOR等参数会没有“HTTP_”头,前者带有这个。
首先大家先做个简单的测试,写一个简单的ASP页面代码,如下(可适当修改部分代码):
<title>IP获取</title></head><body>
<%=Request.ServerVariables("ALL_HTTP")%>
(或者)
<%=Request.ServerVariables("All_Raw")%>
(记得只要一个。NAT123官网也有提到第一个,但没有详细说明怎么取得单个IP)
</body></html>
随便保存一个名称吧,比如:IP.ASP。放到网站任何目录,建议主目录,然后用你的NAT123别名绑定的80映射网站地址访问一下,如xxx.nat123.net/ip.asp看看效果,可能会出现像下面的内容(别看头晕了哦):
HTTP_CACHE_CONTROL:no-cache HTTP_CONNECTION:Keep-Alive, TE HTTP_ACCEPT:text/vnd.wap.wml, image/vnd.wap.wbmp; level=0, text/html,
application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
HTTP_ACCEPT_CHARSET:gbk, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1 HTTP_ACCEPT_LANGUAGE:zh-cn, en HTTP_COOKIE:;
ASPSESSIONIDSQSTASDA=MIMLIIAAOHKODNPAJHJGEIGM; ASPSESSIONIDQQTSBQAC=JMFLCDLAGMEMIHMAEPJJIAJK;
nat123session4slb=becb6af618f897d520c3bcb746d2b066 HTTP_HOST:wap.xxx.com HTTP_TE:deflate, gzip, chunked, identity, trailers
HTTP_USER_AGENT:Nokia9900 (MI, U, 99) HTTP_KOFER_FORWARDED_FOR:14.215.54.177 HTTP_KOFER_FORWARDED_FOR_PORT:40661
HTTP_X_FORWARDED_FOR:14.215.54.177 HTTP_X_FORWARDED_FOR_PORT:40661 HTTP_COOKIE2 Version=1
详细看看,上面内容的HTTP_KOFER_FORWARDED_FOR:和HTTP_KOFER_FORWARDED_FOR_PORT之间是不是有一个自己的IP(14.215.54.177)在呢?(呵,这个IP是我的,反正谁访问就会显示谁的真实IP!)
尼玛,我知道里面有IP在啊(而且好像有2个呢,HTTP_FORWARDED_FOR:和HTTP_FORWARDED_FOR_PORT也有一个),但那么多字符,怎么才能只取到单个IP入库或者作其他用途呢?当然有方法,用mid函数吧(看下面):
再在刚才的IP.ASP里面的<%=Request.ServerVariables("ALL_HTTP")%>处添加或替换一下,代码如下(必须连<%和%>一起复制进去):
<%
dim wstr,start,over,kofer
wstr=Request.ServerVariables("ALL_HTTP") '这里取得所有内容(就是刚才上面那一大堆)
start=Instr(wstr,"HTTP_KOFER_FORWARDED_FOR:") '从上面内容的“HTTP_KOFER_FORWARDED_FOR:”开始(这个记得带:号)
over=Instr(wstr,"HTTP_KOFER_FORWARDED_FOR_PORT") '到“HTTP_KOFER_FORWARDED_FOR_PORT”结束
'//开始和结束的内容详见你测试Request.ServerVariables("ALL_HTTP")所获取到的内容显示的函数,上面的是我的,你获取到什么就改什么
'//这里就取到HTTP_KOFER_FORWARDED_FOR:和HTTP_KOFER_FORWARDED_FOR_PORT之间的内容了,刚才看上面那一堆里面是个IP
kofer=mid(wstr,start,over-start)
'//为了安全起见,下面是去掉有可能出现的字符
kofer = replace(kofer," ","")
kofer = Replace(kofer, chr(10), "")
kofer = Replace(kofer, chr(11), "")
kofer = Replace(kofer, chr(12), "")
kofer = Replace(kofer, chr(13), "")
kofer = replace(kofer,"HTTP_KOFER_FORWARDED_FOR:","") '这里是截取时开始的内容,不去掉会显示
response.write kofer '显示效果(代码结束)
%>
添加完以上代码后保存刚才IP.ASP页面文件,如没意外,应该只剩下一个IP了!
好,到此完成,再访问(可以直接刷新)一下你刚才的页面,是不是只显示了一个IP?
附言:以上方法适合所有ASP程序。要入库或作在线会员统计,请根据自己的程序稍作添加或修改即可
|
评分
-
查看全部评分
|