我试图获取使用浏览网站的客户端的IP地址
$_SERVER['REMOTE_ADDR']
,但我没有得到客户端的确切IP
请帮帮我...谢谢
答案 0 :(得分:5)
$_SERVER['REMOTE_ADDR']
是你真正得到的最好的。
客户端可以发送各种其他标头(HTTP_FORWARDED_FOR
等) - 请参阅this question以获取完整概述 - 但客户可以自由操作< / strong>并且不被认为是可靠的。
答案 1 :(得分:3)
//获取真实的客户端IP
function getIP() {
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
$ip = getenv("HTTP_CLIENT_IP");
} else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
$ip = getenv("REMOTE_ADDR");
} else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
$ip = $_SERVER['REMOTE_ADDR'];
} else {
$ip = "unknown";
}
return($ip);
}
答案 2 :(得分:1)
服务器看到的IP地址是客户端面向公众的IP地址。如果他们在NAT路由器后面,他们的网络中将有不同的地址。
如果您在客户端计算机上运行ipconfig
(Windows)或ifconfig
(Unix-y系统),您将获得其本地IP地址。如果它在192.168.x.x或10.x.x.x范围内,则它们位于NAT路由器后面,互联网将看到它们来自不同的地址。
答案 3 :(得分:1)
如果用户在代理后面,您将获得代理的IP。然后,用户IP将是其中之一(您需要同时检查两者): $ _ SERVER [ 'HTTP_CLIENT_IP'] $ _SERVER [ 'HTTP_X_FORWARDED_FOR']
如果设置了其中任何一个,那么用户就在代理后面(除非他伪造这些标题),你应该将它们用作源IP。 否则使用$ _SERVER ['REMOTE_ADDR']。