㈠ 如何用php偽造瀏覽器ua
file_get_contents 和 curl 這倆強悍的函數,在遠程抓取時候相當有用處。不過一些網站會根據來訪ip是否攜帶user_agent來判斷是正常的瀏覽器客戶端還是機器。所以,我們的任務就是給他們偽造user_agent。
file_get_contents偽造user_agent 方法如下:
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;http://www..com)');
curl偽造user_agent的方法:
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;http://www..com)');
附帶上curl的完整函數方法:
function curl_get_file_contents($URL)
{
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($c, CURLOPT_HEADER, 1);//輸出遠程伺服器的header信息
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;http://www..com)');
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
curl_close($c);
if ($contents) {return $contents;}
else {return FALSE;}
}
這樣就可以抓取了,user_agent是可以自己修改的。
㈡ php 偽造 http_referer
function getContentCURL($url,$post_data = '',$user_agent="Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.8.1.3)", $header = 0, $follow_loc = 1, $cookie_file="/tmp/cookie.txt",$CURLOPT_TIMEOUT=30)
{
$ch = @curl_init();
@curl_setopt($ch, CURLOPT_URL, $url);
@curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
@curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
@curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
@curl_setopt($ch, CURLOPT_HEADER, $header);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow_loc);
@curl_setopt($ch, CURLOPT_TIMEOUT, $CURLOPT_TIMEOUT);
if (trim($post_data) != '') {
@curl_setopt($ch, CURLOPT_POST, 1);
@curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
$result = @curl_exec($ch);
@curl_close($ch);
return $result;
}
通過這種方式做代理, 你在仔細研究下吧
參考下
http://www.21andy.com/blog/20080507/1095.html
㈢ php 偽造或隱藏 http referer
三樓,人家明顯問的是黑b網站的事情,不是什麼負載均衡。
因為發給b網站的請求如果是從客戶端瀏覽器發起的,那麼refer是用戶機器上發起的,瀏覽器會自動根據當前頁設置refer。所以你要是想偽造,就只能做proxy,或者欺騙瀏覽器讓他認為當前網站域名就是b網站。
proxy的方式,a網站作為代理,要同時承擔這部分欺騙引起的流量,如果你是想黑別人,那麼會得不償失。
欺騙瀏覽器方案,這種可以考慮用js來實現,不過具體方法就不告訴你了。
那也是一個意思,就只有我說的這兩種方法。
㈣ PHP 模擬HTTP發送POST請求
用php模擬登陸主要分為三部分1. post數據。2.根據返回的http頭,從中截出cookie段。3.偽造http頭發送請求。 我這里以用php抓取163相冊的需要密碼才能訪問的目錄為例。<?phpfunction posttohost($url, $data) //post數據if (!isset($url['query'])) $encoded = "";foreach ($data as $k=>$v) $fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);if (!$fp) return "Failed to open socket to $url[host]";fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? "?" : "", $url['query']));fputs($fp, "Host: $url[host]\n");fputs($fp, "Content-type: application/x-www-form-urlencoded\n");fputs($fp, "Content-length: " . strlen($encoded) . "\n");fputs($fp, "Connection: close\n\n");fputs($fp, "$encoded\n");$line = fgets($fp,1024);if (!eregi("^HTTP/1\.. 200", $line)) return;$results = ""; $inheader = 1;while(!feof($fp)) elseif ($inheader) }fclose($fp);return $results;} 答案補充 function getjs($juser,$jaid,$jcookie) //偽造http頭 答案補充 else fclose( $socket ); return $ret;}}$iurl=' http://photo.163.com/photos/'.$iuser.'/'.$aid.'/';$idata=array ('pass'=>$pass,'checking'=>'1'); //通過winsock抓包發現,輸入訪問密碼,會向163相冊發送 pass=密碼&checking=1$mystr=posttohost($iurl,$idata);$pattern='/HALFORDER=(.*?);/';preg_match($pattern,$mystr,$out);$str=getjs($iuser,$aid,$out[1]);echo $str;?>
㈤ 在PHP中如何偽造http頭進行模擬登陸
用php模擬登陸主要分為三部分 1. post數據。 2.根據返回的http頭,從中截出cookie段。 3.偽造http頭發送請求。 我這里以用php抓取163相冊的需要密碼才能訪問的目錄為例。 <?php function posttohost($url, $data) //post數據 { $url = parse_url($url); if (!$url) return "couldn't parse url"; if (!isset($url['port'])) { $url['port'] = ""; } if (!isset($url['query'])) { $url['query'] = ""; } $encoded = ""; foreach ($data as $k=>$v) { $encoded .= ($encoded ? "&" : ""); $encoded .= rawurlencode($k)."=".rawurlencode($v); } $fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80); if (!$fp) return "Failed to open socket to $url[host]"; fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? "?" : "", $url['query'])); fputs($fp, "Host: $url[host]\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\n"); fputs($fp, "Content-length: " . strlen($encoded) . "\n"); fputs($fp, "Connection: close\n\n"); fputs($fp, "$encoded\n"); $line = fgets($fp,1024); if (!eregi("^HTTP/1\.. 200", $line)) return; $results = ""; $inheader = 1; while(!feof($fp)) { $line = fgets($fp,1024); if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0; } elseif ($inheader) { $results .= $line; } } fclose($fp); return $results; }
㈥ php偽造ip獲取網頁內容,求高手
偽造IP是不可能的,HTTP協議是機遇TCP,你發送GET命令過去必須留有準確的IP地址,否則對方無法把結果發給你,你與伺服器xxx.xxx.xx的通訊相當於寫信,你匿名寫信只能攻擊,要獲取返回的東西必須提交真實的地址。
無論使用CURL還是別的方法,都要受前面的基本規則限制。
編程上已經沒有辦法可走了,你可以考慮使用代理,通過代理伺服器去獲取數據,查封就換個代理伺服器。不過現在代理伺服器是很難找的。
㈦ 如何改變或偽造HTTP-REFERER
先看看偽造的方法,看看伺服器端的手 段,伺服器可以輕松實現,但是一個直接的問題就是查 remote_addr的時候,就只有一個了,容易被禁止IP:
ASP:
dim http
set http=server.createobject("MSXML2.XMLHTTP") '//MSXML2.serverXMLHTTP也可以
Http.open "GET",url,false
Http.setRequestHeader "Referer","http://www.fromdomain.cn/"
Http.send()
PHP(前 提是裝了curl):
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://www.readdomain.cn/xxx.asp");
curl_setopt ($ch, CURLOPT_REFERER, "http://www.fromdomain.cn/");
curl_exec ($ch);
curl_close ($ch);
PHP(不裝curl用sock)
$server = 'www.readdomain.cn';
$host = 'www.fromdomain.cn';
$target = '/xxx.php';
$referer = 'http://www.aslibra.com/'; // Referer
$port = 80;
$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
}
else
{
$out = "GET $target HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Cookie: SESSIONID=test\r\n";
$out .= "Referer: $referer\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp))
{
echo fgets($fp, 128);
}
fclose($fp);
}
VB.NET/C#.NET
Dim oXMLHttp As MSXML2.XMLHTTP30 = New MSXML2.XMLHTTP30()
或 者
MSXML2.XMLHTTP30 oXMLHttp = new MSXML2.XMLHTTP30();
oXMLHttp.open(....
oXMLHttp.setRequestHeader(...
oXMLHttp.send(..
引用
原理都是sock構造http頭來senddata。其他語言什麼的比如perl也可以,目前比較簡單的防 御偽造referer的方法是用驗證碼(Session)。現在有一些能防盜鏈軟體的商業公司比如UUDOG,linkgate,VirtualWall 什麼的,都是開發的應用於IIS上面的dll。有的是採用cookies驗證、線程式控制制,有的是能隨機生成文件名然後做URL重寫。有的方法能的確達到不 錯的效果.
㈧ 如何改變或偽造HTTP
有類似功能的軟體,如HTTP-REFERER
其實偽造HTTP-REFERER是一些流氓軟體或者是一些批量注冊或灌注信息的工具必備的,因為這樣才能跳過伺服器的
HTTP-REFERER檢查。
先看看偽造的方法,看看伺服器端的手
段,伺服器可以輕松實現,但是一個直接的問題就是查 remote_addr的時候,就只有一個了,容易被禁止IP:
ASP:
dim http
set
http=server.createobject("MSXML2.XMLHTTP") '//MSXML2.serverXMLHTTP也可以
Http.open
"GET",url,false
Http.setRequestHeader
"Referer","http://www.fromdomain.cn/"
Http.send()
PHP(前
提是裝了curl):
$ch = curl_init();
curl_setopt
($ch, CURLOPT_URL, "http://www.readdomain.cn/xxx.asp");
curl_setopt
($ch, CURLOPT_REFERER, "http://www.fromdomain.cn/");
curl_exec ($ch);
curl_close
($ch);
PHP(不裝curl用sock)
$server = 'www.readdomain.cn';
$host =
'www.fromdomain.cn';
$target = '/xxx.php';
$referer =
'http://www.aslibra.com/'; // Referer
$port = 80;
$fp =
fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp)
{
echo
"$errstr ($errno)<br />\n";
}
else
{
$out = "GET
$target HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Cookie:
SESSIONID=test\r\n";
$out .= "Referer: $referer\r\n";
$out .=
"Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp))
{
echo fgets($fp, 128);
}
fclose($fp);
}
VB.NET/C#.NET
Dim oXMLHttp As MSXML2.XMLHTTP30 = New MSXML2.XMLHTTP30()
或
者
MSXML2.XMLHTTP30 oXMLHttp = new MSXML2.XMLHTTP30();
oXMLHttp.open(....
oXMLHttp.setRequestHeader(...
oXMLHttp.send(..
引用
原理都是sock構造http頭來senddata。其他語言什麼的比如perl也可以,目前比較簡單的防
御偽造referer的方法是用驗證碼(Session)。現在有一些能防盜鏈軟體的商業公司比如UUDOG,linkgate,VirtualWall
什麼的,都是開發的應用於IIS上面的dll。有的是採用cookies驗證、線程式控制制,有的是能隨機生成文件名然後做URL重寫。有的方法能的確達到不
錯的效果.
一般的就是這樣的了,但是伺服器就不好實現偽造,只能製造不多的數據了,如果可以實現訪問網頁就可以
偽造,那就可以實現了真正的偽造,實現自然IP分布。
不過,js好像不支持修改,網上有代碼,可是測試過是不行:
<script language="javascript">
var
oReq = new ActiveXObject("Microsoft.XMLHTTP");
oReq.Open("GET","b.php",false);
oReq.SetRequestHeader("Referer","");
oReq.Send();
document.write(oReq.responseText);
</script>
上
面是JS的代碼,請求的b.php只要簡單的把信息列印出來就知道了:
<?
$out="";
foreach($_SERVER
as $k=>$v){
$out.=$k." : ".$v."\n";
}
//可以寫入文件做分析
file_put_contents(time().".txt",$out);
echo
'<pre>';
echo $out;
?>
引用
[HTTP_ACCEPT] => image/gif, image/x-xbitmap, image/jpeg,
image/pjpeg, application/msword, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/x-shockwave-flash, */*
[HTTP_REFERER] =>
http://www.aslibra.com/test/referrer/a.php?1187692842
.....
看
的出來,修改並不成功,也就是沒法做修改了,如果是出於安全,那也真的不給修改的,否則這個世界真的不安靜了,特別像我這種可能做壞事的人,呵呵~~
㈨ php防止偽造的數據從URL提交方法
針對偽造的數據從URL提交的情況,首先是一個檢查前一頁來源的如下代碼:
<?/*PHP防止站外提交數據的方法*/
function
CheckURL(){
$servername=$_SERVER['SERVER_NAME'];
$sub_from=$_SERVER["HTTP_REFERER"];
$sub_len=strlen($servername);
$checkfrom=substr($sub_from,7,$sub_len);
if($checkfrom!=$servername)die("警告!你正在從外部提交數據!請立即終止!");
}
?>
這個方法只能防止手動在瀏覽欄上輸入的URL。
事實上只要在伺服器上構造出一個指向該URL的鏈接(比如在發貼時加入超鏈),再點擊,這個Check就完全不起作用了。
目前覺得還是用POST的方法傳遞重要數據比較可靠。
可以在form中插入一些隱藏的text用於傳遞數據。
或者使用下面的方法,利用Ajax從客戶端向伺服器提交數據。
/*創建XHR對象*/
function
createXHR()
{
if
(window.XMLHttpRequest){
var
oHttp
=
new
XMLHttpRequest();
return
oHttp;
}
else
if
(window.ActiveXObject){
var
versions
=
["MSXML2.XmlHttp.6.0","MSXML2.XmlHttp.3.0"];
for
(var
i
=
0;
i
<
versions.length;
i++){
try
{
var
oHttp
=
new
ActiveXObject(versions[i]);
return
oHttp;
}
catch
(error)
{}
}
}
throw
new
Error("你的瀏覽器不支持AJAX!");
}
/*用AJAX向page頁面傳遞數據*/
function
ajaxPost(url,query_string='')
{
var
xhr;
xhr
=
createXHR();
xhr.open('POST',url,false);
xhr.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded;
charset=gb2312");
xhr.onreadystatechange
=
function(){if
(xhr.readyState
==
4)if
(xhr.status
!=
200)return;}
xhr.send(query_string);
}
㈩ php 怎偽造http referer怎用
建議讀這幾篇
http://blog.csdn.net/mayongzhan/archive/2008/01/24/2062890.aspx
http://blog.csdn.net/mayongzhan/archive/2008/04/28/2340408.aspx
http://blog.csdn.net/mayongzhan/archive/2008/01/24/2062895.aspx
下面是opt的參數對照的中文說明:
ps:php文檔里的這段是英文,簡直了.晦澀難懂!!!!!!
bool curl_setopt (int ch, string option, mixed value)
curl_setopt()函數將為一個CURL會話設置選項。option參數是你想要的設置,value是這個選項給定的值。下列選項的值將被作為長整形使用(在option參數中指定):
*CURLOPT_INFILESIZE: 當你上傳一個文件到遠程站點,這個選項告訴PHP你上傳文件的大小。
*CURLOPT_VERBOSE: 如果你想CURL報告每一件意外的事情,設置這個選項為一個非零值。
*CURLOPT_HEADER: 如果你想把一個頭包含在輸出中,設置這個選項為一個非零值。
*CURLOPT_NOPROGRESS: 如果你不會PHP為CURL傳輸顯示一個進程條,設置這個選項為一個非零值。注意:PHP自動設置這個選項為非零值,你應該僅僅為了調試的目的來改變這個選項。
*CURLOPT_NOBODY: 如果你不想在輸出中包含body部分,設置這個選項為一個非零值。
*CURLOPT_FAILONERROR: 如果你想讓PHP在發生錯誤(HTTP代碼返回大於等於300)時,不顯示,設置這個選項為一人非零值。默認行為是返回一個正常頁,忽略代碼。
*CURLOPT_UPLOAD: 如果你想讓PHP為上傳做准備,設置這個選項為一個非零值。
*CURLOPT_POST: 如果你想PHP去做一個正規的HTTP POST,設置這個選項為一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用。
*CURLOPT_FTPLISTONLY: 設置這個選項為非零值,PHP將列出FTP的目錄名列表。
*CURLOPT_FTPAPPEND: 設置這個選項為一個非零值,PHP將應用遠程文件代替覆蓋它。
*CURLOPT_NETRC: 設置這個選項為一個非零值,PHP將在你的 ~./netrc 文件中查找你要建立連接的遠程站點的用戶名及密碼。
*CURLOPT_FOLLOWLOCATION: 設置這個選項為一個非零值(象 「Location: 「)的頭,伺服器會把它當做HTTP頭的一部分發送(注意這是遞歸的,PHP將發送形如 「Location: 「的頭)。
*CURLOPT_PUT: 設置這個選項為一個非零值去用HTTP上傳一個文件。要上傳這個文件必須設置CURLOPT_INFILE和CURLOPT_INFILESIZE選項. *CURLOPT_MUTE: 設置這個選項為一個非零值,PHP對於CURL函數將完全沉默。
*CURLOPT_TIMEOUT: 設置一個長整形數,作為最大延續多少秒。
*CURLOPT_LOW_SPEED_LIMIT: 設置一個長整形數,控制傳送多少位元組。
*CURLOPT_LOW_SPEED_TIME: 設置一個長整形數,控制多少秒傳送CURLOPT_LOW_SPEED_LIMIT規定的位元組數。
*CURLOPT_RESUME_FROM: 傳遞一個包含位元組偏移地址的長整形參數,(你想轉移到的開始表單)。
*CURLOPT_SSLVERSION: 傳遞一個包含SSL版本的長參數。默認PHP將被它自己努力的確定,在更多的安全中你必須手工設置。
*CURLOPT_TIMECONDITION: 傳遞一個長參數,指定怎麼處理CURLOPT_TIMEVALUE參數。你可以設置這個參數為TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。這僅用於HTTP。
*CURLOPT_TIMEVALUE: 傳遞一個從1970-1-1開始到現在的秒數。這個時間將被CURLOPT_TIMEVALUE選項作為指定值使用,或被默認TIMECOND_IFMODSINCE使用。下列選項的值將被作為字元串:
*CURLOPT_URL: 這是你想用PHP取回的URL地址。你也可以在用curl_init()函數初始化時設置這個選項。
*CURLOPT_USERPWD: 傳遞一個形如[username]:[password]風格的字元串,作用PHP去連接。
*CURLOPT_PROXYUSERPWD: 傳遞一個形如[username]:[password] 格式的字元串去連接HTTP代理。
*CURLOPT_RANGE: 傳遞一個你想指定的范圍。它應該是」X-Y」格式,X或Y是被除外的。HTTP傳送同樣支持幾個間隔,用逗句來分隔(X-Y,N-M)。
*CURLOPT_POSTFIELDS: 傳遞一個作為HTTP 「POST」操作的所有數據的字元串。
*CURLOPT_REFERER: 在HTTP請求中包含一個」referer」頭的字元串。
*CURLOPT_USERAGENT: 在HTTP請求中包含一個」user-agent」頭的字元串。
*CURLOPT_FTPPORT: 傳遞一個包含被ftp 「POST」指令使用的IP地址。這個POST指令告訴遠程伺服器去連接我們指定的IP地址。這個字元串可以是一個IP地址,一個主機名,一個網路界面名(在UNIX下),或是『-』(使用系統默認IP地址)。
*CURLOPT_COOKIE: 傳遞一個包含HTTP cookie的頭連接。
*CURLOPT_SSLCERT: 傳遞一個包含PEM格式證書的字元串。
*CURLOPT_SSLCERTPASSWD: 傳遞一個包含使用CURLOPT_SSLCERT證書必需的密碼。
*CURLOPT_COOKIEFILE: 傳遞一個包含cookie數據的文件的名字的字元串。這個cookie文件可以是Netscape格式,或是堆存在文件中的HTTP風格的頭。
*CURLOPT_CUSTOMREQUEST: 當進行HTTP請求時,傳遞一個字元被GET或HEAD使用。為進行DELETE或其它操作是有益的,更Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing or another, more obscure, HTTP request. 注意: 在確認你的伺服器支持命令先不要去這樣做。下列的選項要求一個文件描述(通過使用fopen()函數獲得):
*CURLOPT_FILE: 這個文件將是你放置傳送的輸出文件,默認是STDOUT.
*CURLOPT_INFILE: 這個文件是你傳送過來的輸入文件。
*CURLOPT_WRITEHEADER: 這個文件寫有你輸出的頭部分。
*CURLOPT_STDERR: 這個文件寫有錯誤而不是stderr。用來獲取需要登錄的頁面的例子,當前做法是每次或許都登錄一次,有需要的人再做改進了:)