如何使用PHP查找用户的IP地址?

11 浏览
0 Comments

如何使用PHP查找用户的IP地址?

如何使用PHP获取客户端的IP地址?

我想通过记录用户的IP地址来记录登录到我的网站的用户。

admin 更改状态以发布 2023年5月21日
0
0 Comments

$_SERVER['REMOTE_ADDR'] 可能并不实际包含真实的客户端IP地址,因为它会给你连接通过代理的客户端的代理地址,例如。然而,这可能是您真正想要的,具体取决于您对IP地址的使用方式。如果您试图查看流量的来源或记住用户最后连接的IP地址,则某人的私有RFC1918地址对您可能没有任何好处,其中代理或NAT网关的公共IP地址可能更适合存储。

有几个类似X-Forwarded-For的HTTP头,可能或可能不会被各种代理设置。问题在于,这些仅仅是可以由任何人设置的HTTP头。它们的内容没有保证。$_SERVER['REMOTE_ADDR']是Web服务器接收连接和响应将被发送到的实际物理IP地址。其他任何东西只是任意和自愿的信息。只有一种情况下您可以信任此信息:您正在控制设置此头的代理。这意味着只有当您百分百地知道设置了该头的位置和方式时,才应该将其视为重要信息。

话虽如此,这里有一些示例代码:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

编辑注: 使用上述代码会具有安全性影响。客户端可以将所有HTTP头信息(即$_SERVER['HTTP_...)设置为任意值。因此,使用$_SERVER['REMOTE_ADDR']更为可靠,因为用户无法设置它。

来自:http://roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html

0
0 Comments

无论你做什么,一定要确保不要信任从客户端发送的数据。$_SERVER[\'REMOTE_ADDR\']包含连接方的真实IP地址。这是你可以找到的最可靠的值。\n\n然而,他们可能在代理服务器后面,在这种情况下,代理服务器可能已经设置了$_SERVER[\'HTTP_X_FORWARDED_FOR\'],但是这个值很容易被欺骗。例如,它可以被没有代理的人设置,或者IP可以是代理服务器后面的LAN中的内部IP。\n\n这意味着,如果你要保存$_SERVER[\'HTTP_X_FORWARDED_FOR\'],确保你也保存$_SERVER[\'REMOTE_ADDR\']值。例如通过将两个值保存在你的数据库中的不同字段中。\n\n如果你要将IP保存为字符串到数据库中,请确保至少有45个字符的空间。IPv6已经来了,这些地址比旧的IPv4地址更大。\n\n(请注意,IPv6通常最多使用39个字符,但还有一种特殊的IPv6表示法用于IPv4地址,其完整形式可以达到45个字符。因此,如果你知道你正在做什么,你可以使用39个字符,但如果你只是希望设置并忘记它,请使用45个)。

0