免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1950 | 回复: 7
打印 上一主题 下一主题

请教一个获取客户端ip地址的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-24 14:31 |只看该作者 |倒序浏览
在ASP里面可以用 Request.ServerVariables ("REMOTE_ADDR") 或者Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取得客户端的地址,PHP里面也有类似的变量。

我的问题是:这些信息是放在http协议的什么地方的?

用Request.ServerVariables ("HTTP_X_FORWARDED_FOR")  可以取得透过代理之后的原始client端ip ,所以该值不可能是从ip层里抽出来的(事实上我觉得该值只有可能是代理自己加上去的,但不知道它写在协议的什么地方); 我原本以为是在http 的 header里面的,但是在http的rfc里我又没找到~~ http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14


知道的XD麻烦告知一下,若有相关文档就更好了~~~

论坛徽章:
0
2 [报告]
发表于 2006-10-24 16:07 |只看该作者
就是header里面的。

论坛徽章:
0
3 [报告]
发表于 2006-10-24 17:32 |只看该作者
try

getenv('HTTP_X_FORWARDED_FOR')

or

$_SERVER['HTTP_X_FORWARDED_FOR'];

[ 本帖最后由 alvabbs 于 2006-10-24 17:34 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-10-24 20:53 |只看该作者
print_r($_SERVER)



print_r($_ENV)

看一下这两个变量,你要的答案都在这里

论坛徽章:
0
5 [报告]
发表于 2006-10-24 21:02 |只看该作者
兄弟,遇到这样的问题,用google搜一遍比你发个贴用的时间少多了

论坛徽章:
0
6 [报告]
发表于 2006-10-25 11:43 |只看该作者
原帖由 geel 于 2006-10-24 16:07 发表
就是header里面的。


是哪个段啊?http watch看不到,并且我在rfc里的确没找到,能不能说详细点?


后面楼的XD你们有没有看懂我的帖子?我问的是这个ip地址在http的协议层的什么地方!

也就是说php 的 'HTTP_X_FORWARDED_FOR' 变量值是从什么地方取出来的,如果我没有php,想要用tcpdump一类的sniffer把这个值拿出来应该看协议的哪几个字节?

论坛徽章:
0
7 [报告]
发表于 2006-10-25 15:15 |只看该作者
这个值是proxy自动加到http请求头部的。但是简单的nat出去的是没有这个值的。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
8 [报告]
发表于 2006-10-26 11:06 |只看该作者

  1. //取的客户端IP地址
  2. function getip() {
  3.         if (isset($_SERVER)) {
  4.                 if (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {
  5.                         $realip = $_SERVER[HTTP_X_FORWARDED_FOR];
  6.                 } elseif (isset($_SERVER[HTTP_CLIENT_IP])) {
  7.                         $realip = $_SERVER[HTTP_CLIENT_IP];
  8.                 } else {
  9.                         $realip = $_SERVER[REMOTE_ADDR];
  10.                 }
  11.         } else {
  12.                 if (getenv("HTTP_X_FORWARDED_FOR")) {
  13.                         $realip = getenv( "HTTP_X_FORWARDED_FOR");
  14.                 } elseif (getenv("HTTP_CLIENT_IP")) {
  15.                         $realip = getenv("HTTP_CLIENT_IP");
  16.                 } else {
  17.                         $realip = getenv("REMOTE_ADDR");
  18.                 }
  19.         }
  20.         return $realip;
  21. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP