PHP获取真实IP(代理检测)

2023-11-23

我确实可以跟踪用户的“真实”IP,如果他有一个发送真实 IP 标头的代理...是否有更好的解决方案,甚至更多标头?

由于这个函数在脚本中经常使用,所以它必须非常快,而且它似乎不在那个星座中:/

我提出了一些建议,但无法实现:

  • 将标头按最“野外”使用的顺序排列,以便函数快速完成
  • 使 IP 的预匹配检测速度更快

===

function get_real_ip()
{
  $proxy_headers = array(
                          'CLIENT_IP', 
                          'FORWARDED', 
                          'FORWARDED_FOR', 
                          'FORWARDED_FOR_IP', 
                          'HTTP_CLIENT_IP', 
                          'HTTP_FORWARDED', 
                          'HTTP_FORWARDED_FOR', 
                          'HTTP_FORWARDED_FOR_IP', 
                          'HTTP_PC_REMOTE_ADDR', 
                          'HTTP_PROXY_CONNECTION',
                          'HTTP_VIA', 
                          'HTTP_X_FORWARDED', 
                          'HTTP_X_FORWARDED_FOR', 
                          'HTTP_X_FORWARDED_FOR_IP', 
                          'HTTP_X_IMFORWARDS', 
                          'HTTP_XROXY_CONNECTION', 
                          'VIA', 
                          'X_FORWARDED', 
                          'X_FORWARDED_FOR'
                         );

  foreach($proxy_headers as $proxy_header)
  {
    if(isset($_SERVER[$proxy_header]) && preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $_SERVER[$proxy_header])) /* HEADER ist gesetzt und dies ist eine gültige IP */
    {
        return $_SERVER[$proxy_header];
    }
    else if(stristr(',', $_SERVER[$proxy_header]) !== FALSE) /* Behandle mehrere IPs in einer Anfrage(z.B.: X-Forwarded-For: client1, proxy1, proxy2) */
    {
      $proxy_header_temp = trim(array_shift(explode(',', $_SERVER[$proxy_header]))); /* Teile in einzelne IPs, gib die letzte zurück und entferne Leerzeichen */

      if(($pos_temp = stripos($proxy_header_temp, ':')) !== FALSE) $proxy_header_temp = substr($proxy_header_temp, 0, $pos_temp); /* Entferne den Port */

      if(preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $proxy_header_temp) return $proxy_header_temp;
    }
  }

  return $_SERVER['REMOTE_ADDR'];
}

如果代理发送标头,那么您可以获取客户端的原始 IP。如果代理没有,那么你就不能。 不幸的是(或者幸运的是,这取决于你的观点)就是这么简单。

我在 Intranet 上所做的是将“intranet.mydomain.com”重定向到网络服务器上的“Intranet”,后者由于内部网络/DNS 配置而不使用代理......不知道你想要什么做,但这可能有用。

您还可以在浏览器中设置排除列表...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP获取真实IP(代理检测) 的相关文章

  • 由于未定义符号,PECL solr 未加载:curl_easy_getinfo

    我正在尝试加载 PECL solr 扩展 我尝试使用 pecl install solr 并下载并使用 phpize configure make 来安装它 在这两种情况下 扩展安装时都没有错误 但在 apache 重新启动后 或在命令行上
  • __callStatic():从静态上下文实例化对象?

    我对 PHP 中的 静态 和 动态 函数和对象如何协同工作感到困惑 特别是在 callStatic 方面 callStatic 的工作原理 您可以有一个普通的班级 MyClass 在班级内您可以 放置一个名为 callStatic 的静态函
  • 压缩 zend Framework 2 的 html 输出

    我目前正在 PHP 5 4 4 上使用 Zend Framework 2 beta 开发个人 web 应用程序以用于自学目的 我想知道是否可以在 html 输出发送到浏览器之前拦截它 以便通过删除所有不必要的空格来缩小它 我怎样才能在ZF2
  • 从 FilterControllerEvent 监听器重定向到另一个 Symfony 路由

    我正在尝试设置一个 kernel controller 侦听器 以便在函数返回 true 时重定向到另一个路由 我有可用的路线 但无法使用此路线设置控制器 event gt setController 我收到以下错误 FilterContr
  • Laravel - 停止并发访问记录

    在 Laravel 中 有什么方法可以停止同时与同一条记录交互 例如 如果用户 A 正在编辑一条记录 那么我同时需要阻止用户 B 编辑同一条记录 注意 我在 Laravel 5 2 中使用 SESSION DRIVER file 目前大约有
  • 私人聊天系统MYSQL查询显示发送者/接收者的最后一条消息

    在这里我延伸一下我之前的问题 私人聊天系统MYSQL查询ORDERBY和GROUPBY https stackoverflow com questions 10929366 private chat system mysql query o
  • PHP解析xml文件错误

    我正在尝试使用 simpleXML 来获取数据http rates fxcm com RatesXML http rates fxcm com RatesXML Using simplexml load file 我有时会遇到错误 因为这个
  • 如何在 Zend Framework 中存储 cron 作业的脚本?

    因为 ZF 的所有 URL 都依赖于 mod 重写 所以我并不清楚应该在哪里存储用于 cron 作业的本地脚本 有人有什么建议 或者有 正式接受 的方式吗 我用模块化目录结构 http framework zend com manual e
  • 使用 PHP 对 ASP.NET 成员身份中的用户进行身份验证

    我在尝试使用 PHP 针对现有 ASP NET 成员资格数据库对用户进行身份验证时遇到一些问题 我在网上搜索过 发现现有的答案似乎对我不起作用 即 public static function Hash password salt deco
  • Zend IMAP 搜索和过滤器

    我如何使用 Gmail 中的过滤器进行搜索 就像获取带有特定标签的电子邮件列表或来自特定电子邮件地址的邮件列表一样 我无法在文档中找到它 注意 我使用 oAuth 进行身份验证 我希望这与搜索无关 Gmail 上的标签实际上是 从 IMAP
  • 使用 PHP 将值插入可编辑 PDF,并保持可编辑状态

    我有一个带有可编辑字段的 PDF 我希望将 HTML 表单中的值传递到此 PDF 中 我尝试过使用 FPDF 并且它有效 但是将值传递到 PDF 后 pdf 中的字段不再可编辑 另一个缺点是 在将值传递到 PDF 时 我们必须为每个字段指定
  • Magento补丁安装失败

    从以下位置下载并运行 Magento PHP 5 4 支持补丁 Magento CE v1 7 0 0 1 7 0 2 时http www magentocommerce com download http www magentocomme
  • 如何从导出的 csv 文件中删除双引号

    我正在使用 Laravel 5 8 并且添加了 Maatwebsite 包 用于从数据库表导出 CSV 文件 这是我导出的类 class ConfirmedExport implements FromCollection WithHeadi
  • 使用 PHP 的 Google Glass GDK 身份验证

    我正在尝试点击此链接来验证 GDK 中的用户 https developers google com glass develop gdk authentication https developers google com glass de
  • 使用日语“Enter”键进行搜索功能

    我在日语方面遇到了问题 我有一个允许用户搜索数据的表单 当用户输入要搜索的字符串并按 Enter 键时 搜索功能就会执行 我的代码是 formSearch input keyup function event var key event c
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • 从 cocoa 编辑系统偏好设置

    有没有办法使用可可以编程方式编辑系统首选项 是否需要一些框架 我需要这样做来更改全局代理设置 另外 我的应用程序是沙盒的 有关于如何执行此操作的示例代码吗 感谢您的帮助 您正在寻找系统配置框架 但这并不容易 我认为沙盒应用程序不可能这样做
  • php下拉菜单人口

    我正在尝试编写一个 php 脚本 该脚本将根据主下拉菜单的选择填充第二个下拉菜单 我想使用 jquery 来完成所有非页面刷新的事情 但我发现现有的所有东西都很难理解和修改 你知道有什么写得很好且易于理解的东西吗 或者可能是现有的教程 下面
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩

随机推荐

  • WiX ServiceInstall - 将服务设置为以当前 Windows 用户身份运行

    我正在使用 WiX 安装 Windows 服务 如何使服务在运行安装程序的 Windows 用户上下文中运行 您需要拥有要运行服务的用户的帐户名和密码 我通过向安装程序添加自定义 UI 来要求输入用户名和密码 然后使用 ServiceIns
  • 了解私人设置者

    我不明白需要有从 C 2 开始的私有设置器 对我来说 有一个 setter 方法可以让用户在该类中设置一些变量 这样做时 我们不会将变量直接暴露给用户 相反 我们让他们通过这个公共 setter 方法来完成此操作 这对我来说是使用 封装 有
  • 在引用限定符上重载成员函数的用例是什么?

    C 11 使得基于引用限定符重载成员函数成为可能 class Foo public void f for when this is an lvalue void f for when this is an rvalue Foo obj ob
  • 使用 jQuery 制作动画时失去悬停(不移动鼠标)

    我有这行缩略图 我正在使用 jQuery 对其进行动画处理 每个缩略图都有一个悬停和活动类 它们工作正常 但是当我对列表进行动画处理时 鼠标光标下的新缩略图不应用悬停 每次点击后我都必须稍微移动鼠标吗 这有点难以解释 我在这里做了一个小提琴
  • synaptic js lstm rnn 算法的简单示例

    没有一个真是太疯狂了非常简单LSTM RNN 预测时间序列数据的示例 https github com cazala synaptic https github com cazala synaptic wiki Architect lstm
  • Android(三星 S4)HTML5 视频暂停

    我正在使用 Android Webview 播放 html5 视频 包括 Youtube 视频 我自己的标签和 Youtube 嵌入的 iFrame 我在使用 Samsung Galaxy S4 时遇到了问题 具体情况如下 播放视频 视频播
  • android sqlite检查是否插入新值

    我正在使用 sqlite 我成功创建了数据库和表 我还编写了可以在表中插入新值的代码 我的代码工作完美 但现在我想显示例如 如果插入新值则显示 toast 消息 否则在 toast 或其他内容中显示错误消息 这是我插入表的源代码 publi
  • 调试asp.net突然停止

    我有一个奇怪的错误 我正在调试一个 asp net 站点 突然它停止了 Visual Studio 保持调试模式 我的 Web 应用程序保持正常运行 我发现this发布 但我不认为后台线程导致了这个问题 代码周围甚至有一个 try catc
  • 查找给定素数之后的 n 个素数,而不使用任何检查素数的函数

    如何编写一个程序来查找给定数字后面的n个素数 例如100 后的前 10 个素数 或 1000 后的前 25 个素数 编辑 下面是我尝试过的 我以这种方式获得输出 但是我们可以在不使用任何素性测试函数的情况下做到这一点吗 include
  • jQuery DataTables 按 2 列排序

    我在用jQuery 数据表为我的一张桌子设计样式并提供功能 My Goal 根据资金类型是否活跃进行排序 正如您所看到的 这就是它目前正在做的事情 现在 我想订购Funding按字母顺序排列 所以我想要的结果应该是 Funding One
  • 为什么我每次使用 mingw gcc4.8.1 运行 std::random_device 都会得到相同的序列?

    我使用以下代码来测试C
  • ASP.NET Core Identity 模拟特定用户

    假设我有以下角色 Admin User 我希望管理员角色用用户角色模拟特定用户帐户 但不知道该特定用户帐户的密码 管理员应该能够模拟应用程序中的任何用户 并能够以用户本人的身份浏览应用程序 我找到了一个链接这实际上是在 ASP NET MV
  • 使用 javascript 复制到剪贴板以获取phonegap

    我正在为phonegap 平台使用javascript mobile jquery 接口开发一个应用程序 现在我在网上看到了很多尝试复制到剪贴板的例子 不幸的是它们都不适合我 我对浏览器中的功能不感兴趣 只要它在通过电话间隙转换后能够工作
  • 尝试使用网络摄像头 python opencv 捕获视频时 gstreamer 出现严重错误

    我正在尝试使用 opencv 和 python 通过简单的代码通过网络摄像头拍摄视频 import numpy as np import cv2 cap cv2 VideoCapture 0 print cap isOpened if ca
  • 在 React-Chartjs-2 框的圆环图中添加文本以做出反应

    我创建了一个圆环图 它可以正常工作 但现在我需要在其中心显示数字 45 例如 我应该在哪里指定要显示的文本和坐标 在图表的选项中 我正在使用反应组件 class DoughnutChart extends React Component r
  • OS X 卸载已安装的 distutils 项目

    我在 El Capitan 上 我想用 pip 安装 numpy 但是我收到以下错误 Detected a distutils installed project numpy which we cannot uninstall The me
  • 如何将 :since 与 CompUnit 一起使用

    我试图通过使用 CompUnit 类集预编译 POD6 来创建 POD6 缓存 我可以创建 存储和检索 pod 如下所示 use v6 c use nqp my precomp store CompUnit PrecompilationSt
  • wpf listview拖动选择多个项目

    只是想知道是否有人知道如何做到这一点 我想让用户通过单击并拖动鼠标来选择多个项目 不松开单击 假设用户单击第 1 项 然后向下拖动到第 10 项 项目 1 到 10 应该被选中 就像他单击项目 1 然后按住 Shift 键并单击项目 10
  • 如何快速更改颜色字典中图像中的像素?

    我有一个图像 我想从颜色图中更改图像中的所有颜色 例如 10 20 212 60 40 112 目前 我正在读取图像 OpenCV 然后迭代图像数组并更改每个像素 但这非常慢 有什么办法可以让我做得更快吗 我对这个问题提供两个答案 这个答案
  • PHP获取真实IP(代理检测)

    我确实可以跟踪用户的 真实 IP 如果他有一个发送真实 IP 标头的代理 是否有更好的解决方案 甚至更多标头 由于这个函数在脚本中经常使用 所以它必须非常快 而且它似乎不在那个星座中 我提出了一些建议 但无法实现 将标头按最 野外 使用的顺