您的位置:

PHP编程获取客户端真实IP地址的方法

随着互联网的不断发展,网络安全问题也越来越重要。获取客户端真实IP地址,是很多网络安全相关的技术中必不可少的一项。在PHP编程中,我们可以通过多种方式获取客户端真实IP地址,本文就来介绍一下其中几种常用的方法。

一、从HTTP HEADER中获取客户端IP地址

HTTP HEADER 中包含了客户端请求的一些关于身份的信息,其中也包含了客户端的IP地址。我们可以通过 $_SERVER 变量中的 HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR 来获取这些信息。 HTTP_X_FORWARDED_FOR 是经过代理服务器转发后的客户端IP地址,如果有多个IP地址,每个地址之间用逗号隔开;而REMOTE_ADDR 则是最后一个代理服务器的地址。 下面是有关获取客户端IP地址代码示例:
function getClientIp() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']) {
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else if(isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP']) {
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    } else if(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR']) {
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    }
    return $ipaddress;
}

二、通过HTTP Client 获取客户端IP地址

PHP中的$_SERVER变量提供了HTTP_CLIENT_IP。 这是一个可选的头文件,包含客户端使用的网络地址。

三、通过 HTTPX-Forwarded-For 获取IP地址

HTTPX-Forwarded-For是代理服务器通过所述协议传递的原始连接的真实IP地址。 代理服务器通常添加一个“X-Forwarded-For”字段,以表明原始请求发起客户端的IP地址。 由于隐藏真实客户端地址以及更改客户端请求的代理服务器数量将在HTTP_X_FORWARDED_FOR字段中添加代理服务器IP地址。 下面是代码示例:
function getClientIP()
{
    $ip_address = '';
    if(getenv('HTTP_CLIENT_IP'))
        $ip_address = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ip_address = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ip_address = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ip_address = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
        $ip_address = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ip_address = getenv('REMOTE_ADDR');
    else
        $ip_address = 'UNKNOWN';
    return $ip_address;
}

四、通过使用 REMOTE_ADDR 获取IP地址

REMOTE_ADDR 表示客户端已连接到服务器上的 IP 地址。 下面是代码示例:
function getIp()
{
    $ip_address = '';
    if(!empty($_SERVER['REMOTE_ADDR'])){
        $ip_address = $_SERVER['REMOTE_ADDR'];
    }
    return $ip_address;
}

五、使用外部库获取IP地址

如果您不想编写自己的代码来获取 IP 地址,那么还可以使用许多外部库。例如,如果您使用的是Laravel框架,那么可以使用 Laravel Request::ip() 函数来获取 IP 地址。下面是示例代码:
function getIp()
{
    return Request::ip();
}

六、通过使用 HTTP_REFERER 获取IP地址

HTTP_REFERER是指向当前请求页面的页面的地址。它可以通过解析服务器上的HTTP_REFERRER来获取客户端IP地址。下面是代码示例:
function getIP()
{
  $ipAdd = '';
  if (isset($_SERVER['HTTP_REFERER'])){
      $urlParts = parse_url($_SERVER['HTTP_REFERER']);
      $ipAdd = gethostbyname($urlParts['host']);
  }
  return $ipAdd;
}

七、通过使用 GeoIP 包获取IP地址

使用GeoIP包是另一种获取客户端IP地址的方法,它可能需要额外的设置或者安装,但是它可以根据您的 IP 地址提供更详细的信息,比如您所在的城市,州和国家等信息。下面是代码示例:
$gi = geoip_open($giDatabasePath, GEOIP_STANDARD);
$ip_address = $_SERVER['REMOTE_ADDR'];
$rsGeoData = geoip_record_by_addr($gi, $ip_address);

if ($rsGeoData) {
    echo "Country Name: ".$rsGeoData->country_name . "
"; echo "Country Code: ".$rsGeoData->country_code . "
"; echo "Region: ".$rsGeoData->region . "
"; echo "City: ".$rsGeoData->city . "
"; echo "latitude: ".$rsGeoData->latitude . "
"; echo "Longitude: ".$rsGeoData->longitude . "
"; }

八、总结

本文介绍了几种在 PHP 中获取客户端 IP 地址的方法,包括从 HTTP HEADER 中获取客户端 IP 地址、HTTP CLIENT 获取客户端 IP 地址、HTTPX-Forwarded-For 获取 IP 地址、通过使用 REMOTE_ADDR 获取 IP 地址、使用外部库获取 IP 地址、通过使用 HTTP_REFERER 获取 IP 地址以及通过使用 GeoIP 包获取 IP 地址。每种获取方法都有其自身的优点和缺点,开发者可以根据自身需要来进行选择。