我整天尝试了各种方法来获取同一服务器中每个客户端的真实ID。所以我试着把ip作为id。
我使用php并希望在Mysql中注册用户ip也用于ip base投票系统。
但我很困惑如何为每个客户端获取IPv4地址。因为 起初我试着让我自己的ip进行测试。
在我的一台笔记本电脑上(在宽带连接细节处),我找到了:
Clint IPv4 address: 172.xx.xxx.333
Server IPv4 address: 172.xx.xxx.2
Whatismyipaddress.com show: 124.x.xxx.xx
My cPanel also show as same: 124.x.xxx.xx
另一台笔记本电脑在同一网络但连接不同:
Clint IPv4 address: 172.xx.yy.444
Server IPv4 address: 172.xx.yy.2
Whatismyipaddress.com show: 124.x.xxx.xx
My cPanel also show as same: 124.x.xxx.xx
所以我发现每台电脑的IPv4都不同。
现在,当我尝试获取IPv4地址时,我的每个代码都显示与whatismyip.com相同的互联网IP?
此处stackoverflow和google搜索中的所有方法都提供与whatismyip.com相同的结果。
我也找不到这个问题的任何好的或简单的答案。
方法1:
function get_client_ip()
{
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
$ip = get_client_ip();
echo $ip;
方法2:
function get_ip_address() {
$ip_keys = array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR');
foreach ($ip_keys as $key) {
if (array_key_exists($key, $_SERVER) === true) {
foreach (explode(',', $_SERVER[$key]) as $ip) {
// trim for safety measures
$ip = trim($ip);
// attempt to validate IP
if (validate_ip($ip)) {
return $ip;
}
}
}
}
return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : false;
}
function validate_ip($ip)
{
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false) {
return false;
}
return true;
}
$ip = get_ip_address();
echo $ip;