我开发了一个PHP Web服务。我想记录使用此Web服务的WS客户端的所有传入连接。如何获取客户端的IP地址?
$_SERVER['HTTP_CLIENT_IP']
的价值
好像总是空着的。
答案 0 :(得分:51)
这应该是你想要的:
$_SERVER['REMOTE_ADDR']
用户所在的IP地址 查看当前页面。
答案 1 :(得分: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'];
}
}
答案 2 :(得分: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地址。
答案 3 :(得分:5)
函数getUserIpAddr()和getRealIpAddr()不可靠!
唯一可靠的IP来自$ip = $_SERVER["REMOTE_ADDR"];
否则,任何人都可以通过发送CLIENT_IP标头伪造他的IP地址。
This Firefox Addon可以帮助您发送自定义标头。将CLIENT_IP = x.x.x.x标头发送到运行此页面上任何功能的服务器,意味着客户可以选择他们想要的任何IP ...
答案 4 :(得分:2)
您是否在为您的网络服务使用某种框架?我看到了一些框架(例如Agavi)故意删除所有$ SERVER数据,因为他们希望您使用框架服务中的验证值。
答案 5 :(得分:2)
如果这不能完成这项工作,我不知道是什么......
function getClientIP() {
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
return $_SERVER["HTTP_X_FORWARDED_FOR"];
if (isset($_SERVER["HTTP_CLIENT_IP"]))
return $_SERVER["HTTP_CLIENT_IP"];
return $_SERVER["REMOTE_ADDR"];
}
if (getenv('HTTP_X_FORWARDED_FOR'))
return getenv('HTTP_X_FORWARDED_FOR');
if (getenv('HTTP_CLIENT_IP'))
return getenv('HTTP_CLIENT_IP');
return getenv('REMOTE_ADDR');
}
答案 6 :(得分:1)
我的首选功能:
public static function get_remote_ip() {
if(isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR'];
}
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
return null;
}
答案 7 :(得分:0)
您可以尝试
<?php
var_dump($_SERVER);
查看所有变量。但这实际上还取决于脚本运行的后端。那是Apache吗?
答案 8 :(得分:0)
<?php
$ip=$_SERVER['REMOTE_ADDR'];
echo "Your IP Address is $ip";
?>
并插入数据库只需使用$ ip
答案 9 :(得分:-1)
<?php
function getIP() {
$ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else
$ip = "UNKNOWN";
return $ip;
}
//-----------------------------------------------
//Usage:
$client_ip=getIP();
echo "Your IP :".$client_ip;
?>