三個參數
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
REMOTE_ADDR
服務器IP獲取
function _get_client_ip() {
$clientip = '';
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$clientip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$clientip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$clientip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$clientip = $_SERVER['REMOTE_ADDR'];
}
preg_match("/[\d\.]{7,15}/", $clientip, $clientipmatches);
$clientip = $clientipmatches[0] ? $clientipmatches[0] : 'unknown';
return $clientip;
}
很多服務器端一般都采用了$_SERVER['REMOTE_ADDR']來獲取客戶端的真實ip,這是在傳輸層就已經決定的地址,無法通過CURL進行修改。remote_addr并不一定就是客戶端的真實IP,不過它是真實的一個地址( 最后一個代理服務器 IP)。
簡單IP偽造
curl "http://www.lxweimin.com" -H "X-Forwarded-For:8.8.8.8" -H "CLIENT-IP:8.8.8.8"