如何在PHP Web服务中获取客户端的IP地址?

sim*_*mon 31 php logging web-services ip-address

我开发了一个PHP Web服务.我想记录使用此Web服务的WS客户端的所有传入连接.如何获取客户端的IP地址?的价值

$_SERVER['HTTP_CLIENT_IP']
Run Code Online (Sandbox Code Playgroud) 好像总是空着的.

Tom*_*igh 50

这应该是你想要的:

$_SERVER['REMOTE_ADDR']
Run Code Online (Sandbox Code Playgroud)

用户正在查看当前页面的IP地址.

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

  • 不再投票没有运气 (3认同)

bgc*_*ode 24

实际上,我建议使用此功能来涵盖所有基础,例如使用代理,共享网络等的人:

function getUserIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //if from shared
    {
        return $_SERVER['HTTP_CLIENT_IP'];
    }
    else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //if from a proxy
    {
        return $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
        return $_SERVER['REMOTE_ADDR'];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 通过发送假的X-Forwarded-For标头可以很容易地欺骗它! (7认同)

Emi*_*röm 8

确保不要信任从客户端发送的数据.$_SERVER['REMOTE_ADDR']包含连接方的真实IP地址.这是您可以找到的最可靠的价值.

但是,它们可能位于代理服务器后面,在这种情况下代理可能已经设置了$_SERVER['HTTP_X_FORWARDED_FOR'],但这个值很容易被欺骗.它可以由没有代理的人设置为用户想要的任何值,或者IP可以是来自代理后面的LAN的内部IP.

这意味着如果要保存$_SERVER['HTTP_X_FORWARDED_FOR'],请确保也保存该$_SERVER['REMOTE_ADDR']值,例如,将两个值保存在数据库的不同字段中.

如果要将IP保存为数据库作为字符串,请确保至少有45个字符的空间.IPv6将保留,并且这些地址大于旧的IPv4地址.


小智 5

函数getUserIpAddr()和getRealIpAddr()不可靠!

唯一可靠的IP来自于$ip = $_SERVER["REMOTE_ADDR"]; 其他任何人都可以通过发送CLIENT_IP标头伪造他的IP地址.

这个Firefox插件可以帮助您发送自定义标头.将CLIENT_IP = xxxx标头发送到运行此页面上任何功能的服务器,意味着客户可以选择他们想要的任何IP ...