稳定端口映射工具_内网穿透软件_本地映射外网教程交流_nat123论坛客服

 找回密码
 获得新生
查看: 28020|回复: 9

[分享] 80映射HTTP使用NAT123别名绑定网站ASP获取访客真实IP方法,绝对单间易懂

[复制链接]
发表于 2014-10-12 05:41:40 | 显示全部楼层 |阅读模式
  大家好,因为本人有工作所以时间有限,管理网站程序必须简单、快捷、易于修改,所以自己是基于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_COOKIE2Version=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程序。要入库或作在线会员统计,请根据自己的程序稍作添加或修改即可




评分

参与人数 1N币 +30 收起 理由
nat123jia + 30

查看全部评分

发表于 2014-10-12 12:44:15 | 显示全部楼层
个别asp环境确实是要通过字符串截取获取真实ip
http://bbs.nat123.com/forum.php?mod=viewthread&tid=261
发表于 2014-10-12 10:42:05 | 显示全部楼层
网上有现成的获取真实ip的程序吧,这个和使用nat123好像没多大关系。有点牵强。不过也支持,分享技术也是好事。
发表于 2014-10-12 15:16:57 来自手机 | 显示全部楼层
求解经验

点评

方法不错,有了真实IP,方便点对点通信  发表于 2018-1-15 19:20
发表于 2014-11-4 00:51:57 | 显示全部楼层
分享技术,值得鼓励
发表于 2014-11-4 08:09:52 | 显示全部楼层
分享技术,值得鼓励
发表于 2014-12-14 13:02:04 | 显示全部楼层
楼楼 太赞了!!!!!
发表于 2015-1-22 08:04:38 | 显示全部楼层
我试了一下,不行啊
发表于 2015-1-25 09:26:37 | 显示全部楼层
好像不是很懂
您需要登录后才可以回帖 登录 | 获得新生

本版积分规则

http穿透|80网站穿透|非80网站穿透|内网穿透路由器|内网穿透SVN|内网穿透FTP|内网穿透SSH|内网穿透远程桌面|nat123

GMT+8, 2025-4-30 22:36 , Processed in 0.140188 second(s), 21 queries .

Powered by Discuz! X3.1

© Comsenz Inc. | 反馈:natbbs#163.com(#换成@)

快速回复 返回顶部 返回列表