php - 将假/本地 IP 地址设置为 PHP $_SERVER 变量
问题描述
我在我的 PHP 网站上使用以下函数来获取访问者 IP
function getClientIP(){
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)){
return $_SERVER["HTTP_X_FORWARDED_FOR"];
}else if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
return $_SERVER["REMOTE_ADDR"];
}else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
return $_SERVER["HTTP_CLIENT_IP"];
}
return '';}
由于我之前没有对 IP 地址使用任何过滤器或验证,几天前在我们的 IP 地址列中,我收到了一些随机字符串(例如$IP_array
)而不是有效的 IP 地址。而且我认为该请求是使用 PHP 脚本发送的,我尝试了几种方法来欺骗我自己的网站的 IP,但是每次获得我的原始 IP 或 IP 分配的 VPN 时,如何获得一些字符串而不是 IP。
解决方案
你可以试试这个:
<?PHP
function getUserIP()
{
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
return $ip;
}
$user_ip = getUserIP();
echo $user_ip; // Output IP address [Ex: 192.168.1.150]
?>
推荐阅读
- java - 创建一个连接到我的 android 应用程序的目录
- python - 使用 Python OpenCV 缩小和放大轮廓图像
- flutter - Flutter setState 动态添加项目
- tensorflow - Triplet Loss Network 收敛到恒定结果(Constant Embeddings)
- node.js - Node.JS,如何让代码等待管道完成创建文件?
- javascript - 使用 Lodash 在同一对象上查找具有重复数组的属性列表
- machine-learning - kNN 和偶数个邻居(k = 2, 4, 6, 8 ... 等等)
- c++ - 一个对象可以成为一个类的数据成员而不在成员规范中声明吗?
- git - 带有许多修改过的文件的 Git 工作流程不用于签入?
- python - 如何在 python 中与 websocket 握手?