首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP cURL 偽造 IP 與 Referer:模擬客戶端請求完整指南

     編輯:PHP 相關知識

核心原理:HTTP 標頭欺騙

HTTP 請求中的 X-Forwarded-For、Client-IP、Referer 等標頭,常被伺服器用來識別客戶端真實 IP 與來源頁面。透過 PHP cURL 的 CURLOPT_HTTPHEADER 選項,我們可以自訂這些標頭,實現「偽造 IP」與「偽造來源」的效果。這在 API 測試、爬蟲開發、繞過簡單存取控制等場景極為實用。

基礎範例:偽造 IP 與 Referer

<?php
$ch = curl_init();

// 目標 URL
curl_setopt($ch, CURLOPT_URL, 'https://localhost/2.php');

// 偽造客戶端 IP(常見標頭)
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-FORWARDED-FOR: 8.8.8.8',
    'CLIENT-IP: 8.8.8.8'
]);

// 偽造來源頁面
curl_setopt($ch, CURLOPT_REFERER, 'https://www.example.com/');

// 回傳結果而非直接輸出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1); // 包含回應標頭

$output = curl_exec($ch);
curl_close($ch);

echo $output;
?>

目標端驗證腳本(2.php)

<?php
function getClientIp() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) return $_SERVER['HTTP_CLIENT_IP'];
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) return $_SERVER['HTTP_X_FORWARDED_FOR'];
    return $_SERVER['REMOTE_ADDR'] ?? 'unknown';
}

echo "IP: " . getClientIp() . "\n";
echo "Referer: " . ($_SERVER['HTTP_REFERER'] ?? 'none') . "\n";
?>

執行結果

IP: 8.8.8.8
Referer: https://www.example.com/

進階用法:完整模擬瀏覽器指紋

僅偽造 IP 與 Referer 往往不足以通過嚴格的反爬蟲機制。建議同時設定以下選項:

<?php
$ch = curl_init('https://api.target.com/data');

$headers = [
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept: application/json, text/plain, */*',
    'Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7',
    'X-FORWARDED-FOR: 203.0.113.45',
    'CLIENT-IP: 203.0.113.45',
    'Referer: https://www.google.com/',
    'Origin: https://www.google.com',
];

curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_SSL_VERIFYPEER => false, // 僅測試環境使用,生產環境請驗證憑證
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_COOKIEJAR => 'cookies.txt', // 自動處理 Cookie
    CURLOPT_COOKIEFILE => 'cookies.txt',
]);

$response = curl_exec($ch);
if (curl_errno($ch)) {
    throw new Exception('cURL Error: ' . curl_error($ch));
}
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
?>

常用 cURL 選項速查表

選項說明
CURLOPT_URL請求目標網址
CURLOPT_HTTPHEADER自訂請求標頭陣列
CURLOPT_REFERER設定 Referer 標頭
CURLOPT_USERAGENT設定 User-Agent
CURLOPT_RETURNTRANSFERtrue 時回傳字串,false 直接輸出
CURLOPT_POST啟用 POST 請求
CURLOPT_POSTFIELDSPOST 資料(陣列或字串)
CURLOPT_COOKIEJAR/FILECookie 儲存/讀取檔案
CURLOPT_FOLLOWLOCATION自動追蹤 3xx 重導向
CURLOPT_TIMEOUT最大執行秒數
CURLOPT_SSL_VERIFYPEER驗證 SSL 憑證(生產環境必須為 true)

安全與法律提醒

  • 僅供測試與授權場景:偽造標頭進行未授權存取、繞過付費牆、惡意刷量等行為可能違反《電腦程式保護法》或目標網站服務條款。
  • 伺服器端防禦:後端應優先信任 REMOTE_ADDR(TCP 連線真實 IP),將 X-Forwarded-For 視為參考,並驗證代理鏈路可信度。
  • 代理 IP 品質:若大量請求,建議使用高匿名代理池,而非固定偽造標頭,否則極易被封鎖。

總結

PHP cURL 配合 CURLOPT_HTTPHEADER 與 CURLOPT_REFERER,能輕鬆實現 IP 與來源偽造。結合 User-Agent、Cookie、SSL 設定,可構建高度擬真的瀏覽器請求。開發者應善用此技術進行介面測試與資料整合,並嚴守法律與道德底線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved