PHP伪造IP与HTTP Referer方法
PHP 的 HTTP 求头伪造方法挺实用的,尤其是在做数据采集、自动化测试这些活儿的时候。你想模拟一下用户来源、换个 IP 去刷个投票,或者伪装爬虫都能用得上。而且实现起来也不麻烦,用cURL或者Socket搞定 Referer 伪造,几行代码就能跑通。要改 IP 地址就加几个求头字段就行,X-Forwarded-For
和 Client-IP
用得最多,多简单服务压根儿识别不出来真假。
Referer 伪造最方便的是用cURL,像这样:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/xxx.asp");
curl_setopt($ch, CURLOPT_REFERER, "http://www.example.com/");
curl_exec($ch);
curl_close($ch);
或者你要底层点,也可以用Socket直接拼头:
$fp = fsockopen('www.example.com', 80, $errno, $errstr, 30);
$out = "GET /xxx.asp HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Referer: http://www.example.com/\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) echo fgets($fp, 128);
fclose($fp);
IP 伪造这块就稍微讲究点,用X-Forwarded-For
和 Client-IP
加头最常见。要是你喜欢用file_get_contents()
那种,也能用stream_context_create()
传头:
$opts = [
'http' => [
'method' => "GET",
'header' => "Referer: http://www.example.com\r\n" .
"X_FORWARDED_FOR: 12.235.57.101\r\n" .
"CLIENT_IP: 12.235.57.101\r\n"
]
];
$context = stream_context_create($opts);
file_get_contents("http://www.example.com/test/server_info.php", false, $context);
要注意哦,这种伪造方法对高防站效果一般。大平台往往会对X-Forwarded-For
这类字段进行验证,甚至直接从源 IP 判断。所以如果你是在正式项目里搞这个,最好提前测试下效果。哦对了,别用来干坏事哈。
如果你平时要做接口测试、模拟流量、写爬虫,还蛮推荐你试试这些方法,搭配一些现成的 HTTP 类库效果更好,比如 YurunHttp 就挺不错。
2.51KB
文件大小:
评论区