2012-08-08 45 views
5

當使用Fiddler時,它彈出一個警告對話框。fiddler:如何禁用覆蓋Header主機

Fiddler has detected a protocol violation in session #14. 

The Request's Host header did not match the URL's host component. 

URL Host: proxy.music.pp.com 
Header Host: 119.147.22.41 

它表明小提琴手改變HTTP標頭的主機「proxy.music.pp.com」,有沒有什麼辦法來禁用提琴手改變呢?

+0

什麼客戶端產生這種(非法)流量? – EricLaw 2013-02-13 19:34:27

回答

1

你可以用規則來做到這一點。

進入自定義規則,並找到函數:OnBeforeRequest(oSession: Session)

然後添加以下爲函數的最後一行:

if (oSession.HostnameIs("proxy.music.pp.com")) { oSession.host = "119.147.22.41"; } 
+0

它仍然會顯示違反協議的錯誤,但它將使用ip地址作爲http頭部主機。 – Peter 2013-02-13 14:07:42

+0

這也改變了請求發送到的主機名。問題是關於阻止Fiddler重寫Host頭。 – 2017-02-27 15:43:45

7

從我book

交換主機頭文件

當Fiddler獲取URL不匹配的請求時在其主機報頭中,原始主機值存儲在會話標誌X-Original-Host中,然後Host值被從URL解析的主機替換。放置在FiddlerScript的BeforeRequest函數中的以下腳本通過將請求路由到由原始主機頭指定的主機來反轉行爲。

if (oSession.BitFlags & SessionFlags.ProtocolViolationInRequest) 
{ 
    var sOverride = oSession["X-Original-Host"]; 
    if (!String.IsNullOrEmpty(sOverride)) 
    { 
    oSession["X-overrideHost"] = sOverride; 
    oSession["ui-backcolor"] = "yellow"; 

    // Be sure to bypass the gateway, otherwise overrideHost doesn't work 
    oSession.bypassGateway = true; 
    } 
} 
0

我不明白「url主機」應該是什麼 - 我的意思是,通常,HTTP中只有主機頭。

更仔細地觀察,看來這違反了發生在初始代理「設置」請求時,它看起來像這樣:

CONNECT targaryen:45633 HTTP/1.1 
Host: targaryen 

這是錯誤對我來說很有意義。