http网址捆綁代理php_PHP获取IP,HTTP代理问题
首先了解一些HTTP代理的相關知識.
使用不同種類代理服務器,情況會有所不同:
一、沒有使用代理服務器的情況:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 沒數值或不顯示
HTTP_X_FORWARDED_FOR = 沒數值或不顯示
二、Transparent Proxies,使用透明代理服務器的情況:
REMOTE_ADDR = 代理服務器 IP
HTTP_VIA = 代理服務器 IP
HTTP_X_FORWARDED_FOR = 您的真實 IP
這類代理服務器還是將您的信息轉發給您的訪問對象,無法達到隱藏真實身份的目的。
三、Anonymous Proxies,使用普通匿名代理服務器的情況:
REMOTE_ADDR = 代理服務器 IP
HTTP_VIA = 代理服務器 IP
HTTP_X_FORWARDED_FOR = 代理服務器 IP
隱藏了您的真實IP,但是向訪問對象透露了您是使用代理服務器訪問他們的。
四、Distorting Proxies,使用欺騙性代理服務器的情況:
REMOTE_ADDR = 代理服務器 IP
HTTP_VIA = 代理服務器 IP
HTTP_X_FORWARDED_FOR = 隨機的 IP
告訴了訪問對象您使用了代理服務器,但編造了一個虛假的隨機IP代替您的真實IP欺騙它。
五、使用高匿名代理服務器的情況:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理服務器 IP
HTTP_VIA = 沒數值或不顯示
HTTP_X_FORWARDED_FOR = 沒數值或不顯示
/**
* get the real IP
*
* @Author:
* @Return: string
*/
function getIP()
{
static $realip;
if (isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")){
$realip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}
?>
在PHP中我們可以用$_SERVER["REMOTE_ADDR"]來獲取用戶客戶端的IP地址,但如果客戶端是使用代理服務器,
那取到的就是代理服務器的 IP 地址.
要想透過代理服務器取得客戶端的真實 IP 地址,就要使用$_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取.
但并不是用$_SERVER["HTTP_X_FORWARDED_FOR"]都能來讀取到透過代理服務器的客戶真實 IP,有些用此方法讀取到的仍然是代理服務器的 IP.
建議不要使用HTTP_X_FORWARDED_FOR,這會提供機會讓訪問者偽造ip,而變得難易查詢.
references:
http://czy4411741.blog.163.com/blog/static/34203127201021022857899/
http://hi.baidu.com/hengcheng/blog/item/2dc020fa65c9278d9e5146b4.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的http网址捆綁代理php_PHP获取IP,HTTP代理问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大白菜超级u盘启动怎么装电脑 如何使用大
- 下一篇: 新闻与传播c刊_新闻传播类c刊有哪些