热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何用php获取客户端正确的ip地址

常用的获取ip方法{代码...}但用代理后取得的ip就不对了,请问该肿么办呢?
常用的获取ip方法

    function getip() {
    if (getenv ( "http_client_ip" ) && strcasecmp ( getenv ( "http_client_ip" ), "unknown" ))
        $ip = getenv ( "http_client_ip" );
    else if (getenv ( "http_x_forwarded_for" ) && strcasecmp ( getenv ( "http_x_forwared_for" ), "unknown" ))
        $ip = getenv ( "http_x_forwarded_for" );
    else if (getenv ( "remote_addr" ) && strcasecmp ( getenv ( "remote_addr" ), "unknown" ))
        $ip = getenv ( "remote_addr" );
    else if (isset ( $_SERVER ["REMOTE_ADDR"] ) && $_SERVER ["REMOTE_ADDR"] && strcasecmp ( $_SERVER ["REMOTE_ADDR"], "unknown" ))
        $ip = $_SERVER ["REMOTE_ADDR"];
    else
        $ip = "unknown";
    return ($ip);
}

但用代理后取得的ip就不对了,请问该肿么办呢?

回复内容:

常用的获取ip方法

    function getip() {
    if (getenv ( "http_client_ip" ) && strcasecmp ( getenv ( "http_client_ip" ), "unknown" ))
        $ip = getenv ( "http_client_ip" );
    else if (getenv ( "http_x_forwarded_for" ) && strcasecmp ( getenv ( "http_x_forwared_for" ), "unknown" ))
        $ip = getenv ( "http_x_forwarded_for" );
    else if (getenv ( "remote_addr" ) && strcasecmp ( getenv ( "remote_addr" ), "unknown" ))
        $ip = getenv ( "remote_addr" );
    else if (isset ( $_SERVER ["REMOTE_ADDR"] ) && $_SERVER ["REMOTE_ADDR"] && strcasecmp ( $_SERVER ["REMOTE_ADDR"], "unknown" ))
        $ip = $_SERVER ["REMOTE_ADDR"];
    else
        $ip = "unknown";
    return ($ip);
}

但用代理后取得的ip就不对了,请问该肿么办呢?

因为你打错了 http_x_forwared_for

对于HTTP代理、CDN的话,我 以前写的这篇 供参考。

socks5或者vpn代理的话就没办法了。

这个问题已经被讨论烂了,只要客户端想欺骗服务器 你是获取不到真实IP的,不过正常写是没啥问题

换个角度想问题吧。你看了那么多电影,有多少家伙不都是因为用代理访问网站所以才能隐藏自己的。如果简单的被你一下就能找到原始ip,那人家不是弱爆了。

推荐阅读
  • web页面报表js下载,web报表软件 ... [详细]
  • OpenText最终从戴尔手中收购了Documentum,这是目前历史最悠久且知名度最高的企业信息存储与检索解决方案之一。作为戴尔企业内容管理(ECM)事业部的一部分,Documentum的此次交易金额为16.2亿美元。 ... [详细]
  • 本文详细介绍了MySQL故障排除工具及其使用方法,帮助开发者和数据库管理员高效地定位和解决数据库性能问题。 ... [详细]
  • MOSS2007 中型服务场配置指南:网络负载均衡集群设置
    本文详细介绍了如何在MOSS2007环境中配置网络负载均衡集群,包括安装和配置网络负载均衡功能的具体步骤。通过本文,读者可以了解如何在多台Web服务器上安装并配置网络负载均衡,以实现高效的服务分发。 ... [详细]
  • 主机托管是指企业将服务器托管在专业数据中心,以替代自建数据中心的方式。这种方式不仅节省了成本,还提供了多种技术和管理上的优势。然而,主机托管也存在一些潜在的挑战,特别是在部署多个应用时。本文将详细探讨主机托管的主要利弊,帮助企业做出更明智的决策。 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • http:blog.csdn.netzeo112140articledetails7675195使用TCPdump工具,抓TCP数据包。将数据包上传到PC,通过Wireshark查 ... [详细]
  • 本文详细介绍了如何在Windows操作系统中通过Samba服务访问Red Hat Linux中的资源,包括配置Samba服务器、设置工作组名称、添加用户和共享目录等步骤。 ... [详细]
  • Java作为全球最流行的编程语言之一,应用广泛。本文将详细介绍Java开发的相关岗位及其具体职责,帮助读者更好地了解这一领域的职业发展路径。 ... [详细]
  • 图数据库与传统数仓实现联邦查询使用CYPHER实现从关系数据库过滤时间序列指标一、MySQL得到研报实体在Oracle中的唯一ID二、Oracle中过滤时间序列数据三、CYPHER ... [详细]
  • 本文介绍了在 CentOS 7 系统中如何查看所有活动进程及其运行时间。通过使用 `netstat` 和 `ps` 命令,您可以轻松获取进程的详细信息,包括启动时间、用户、终端和命令等。 ... [详细]
  • 2023年最新指南:如何在PHP中屏蔽警告和错误
    本文详细介绍了如何在PHP中屏蔽警告和错误,包括多种方法和最佳实践,帮助开发者提升代码质量和安全性。 ... [详细]
  • 在项目需要国际化处理时,即支持多种语言切换的功能,通常有两种方案:单个包和多个包。本文将重点讨论单个包的实现方法。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 本文为初学者提供了一条清晰的学习路线,帮助他们逐步成长为优秀的Web开发人员。通过十个关键步骤,涵盖从基础到高级的各个方面,确保每位学习者都能找到适合自己的学习方向。 ... [详细]
author-avatar
94Wong_386
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有