【问题标题】:Getting 5-tuple information in a php script在 php 脚本中获取 5 元组信息
【发布时间】:2011-07-25 15:06:15
【问题描述】:

有没有简单的方法在php中获取5元组信息(源ip、源pprt、目的ip、目的端口、四层协议)?

我看到有 $_SERVER['REMOTE_ADDR'] 给了我源 IP。如何获得剩余的 4 个元素?

编辑:从http://php.net/manual/en/reserved.variables.server.php,我看到我正在使用的网络服务器未设置 REMOTE_ADDR、REMOTE_PORT、SERVER_PORT、SERVER_ADDR 的 $_SERVER 元素。我也可以修改网络服务器代码以导出这些元素。

假设第 4 层协议总是 tcp 是否安全?

【问题讨论】:

标签: php


【解决方案1】:

4 of 5。“第 4 层协议”通常总是 TCP

$_SERVER['REMOTE_ADDR'];
$_SERVER['REMOTE_PORT'];
$_SERVER['SERVER_ADDR'];
$_SERVER['SERVER_PORT'];

http://php.net/reserved.variables.server

【讨论】:

  • 如果你不使用非常奇特的配置,它总是 TCP。 Webservers 使用 TCP,PHP 通常在 webserver 下运行。
【解决方案2】:

请注意,根据您的网络配置,$_SERVER['REMOTE_ADDR'] 可能会为您提供负载平衡器/代理/防火墙的 IP。在这种情况下,您可能需要使用$_SERVER['X-FORWARDED-FOR']

【讨论】:

  • 谢谢。这是一个有用的提示,因为我想我会在前面添加一些负载均衡器。
【解决方案3】:

http://php.net/manual/en/reserved.variables.server.php

var_dump($_SERVER);

foreach($_SERVER as $key => $value){
    echo "$key: $value<br />";
}

src:http://www.webhostingtalk.com/showthread.php?t=516172

function get_real_ip()
{
     $ip = false;
     if(!empty($_SERVER['HTTP_CLIENT_IP']))
     {
          $ip = $_SERVER['HTTP_CLIENT_IP'];
     }
     if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
     {
          $ips = explode(", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
          if($ip)
          {
               array_unshift($ips, $ip);
               $ip = false;
          }
          for($i = 0; $i < count($ips); $i++)
          {
               if(!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i]))
               {
                    if(version_compare(phpversion(), "5.0.0", ">="))
                    {
                         if(ip2long($ips[$i]) != false)
                         {
                              $ip = $ips[$i];
                              break;
                         }
                    }
                    else
                    {
                         if(ip2long($ips[$i]) != - 1)
                         {
                              $ip = $ips[$i];
                              break;
                         }
                    }
               }
          }
     }
     return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}  

【讨论】:

    【解决方案4】:

    其他的是:

    • REMOTE_PORT
    • SERVER_ADDR
    • SERVER_PORT

    我不知道任何存储 IPv4 信息的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      相关资源
      最近更新 更多