2012-08-24 36 views
4

今天我偶然發現了Wireshark,它可以攔截你PC上的所有網絡流量。我想知道是否可以在請求後修改數據(因此將數據發送回PC)並使用正則表達式對其進行修改?像在之前替換數據中的單詞和圖案,它會在瀏覽器中呈現? (例如:更換瘋狂與快樂的單詞或更換整個網站以「不要再拖延」)是否可以在瀏覽器中呈現之前攔截http請求並修改數據(例如,使用正則表達式替換內容)?如果是這樣,怎麼樣?

如果這是可能的:

  • 我應該如何實現呢?什麼功能將是至關重要的?
  • 是否有任何開源庫可以幫助我實現這一目標?
  • 在執行此操作之前,我有做過任何事前閱讀嗎?

注意,這個平臺將是Windows和我會嘗試做這在C++

+3

我可以告訴你的是,這是可能的。一個類似的概念是mitm攻擊。我想代理解決方案將是最簡單的方法來做到這一點。 – 2012-08-24 18:03:44

+0

對於windows,您將需要通過分層套接字提供程序轉到驅動程序路徑(NDIS/TDI),用戶級別擴展或使用瀏覽器擴展掛接到捕獲和修改數據所需的任何通道。 –

+0

這聽起來像是隧道適配器可以爲此進行修改。如果你走這條路,請閱讀L2TP,PPTP,IP over IP。 – MartyE

回答

2

什麼你所描述的被稱爲「透明代理」。 (假設你沒有修改瀏覽器)。您通常需要操作系統的一些幫助才能進入瀏覽器和網絡之間,或者您需要在單獨的路由器中實施代理。在linux中,這可以通過iptables來完成。我想象Windows有一個相似的功能。

+0

這可能有所幫助:http://en.wikipedia.org/wiki/Proxy_server#Transparent_proxy – alk

1

對於Windows 7/Vista,您可以使用Windows過濾平臺(WFP),它允許您在不同層插入掛鉤,訪問這些數據包,修改它們,並將它們重新注入到tcp/ip堆棧中。 對於Mac OS,您可以使用ipfw使用divert套接字。所以你在ipfw上設置規則,轉移某些數據包以「轉移套接字」,進行修改,然後重新進行註冊。

順便說一句,Wireshark不能真正攔截流量,它只轉儲交通〜

3

您可以使用WinDivert(LGPL)用於此目的(免責聲明:WinDivert是我的項目)。 WinDivert是一種用戶模式API,可將某些內核模式的WFP呼出驅動程序功能提升到用戶空間。

僞代碼將是這個樣子:

HANDLE handle = DivertOpen(
    "inbound && "    // Inbound packets 
    "tcp.SrcPort == 80 && "  // HTTP 
    "tcp.PayloadLength > 0",  // Data 
    0, 0, 0); 
while (TRUE) 
{ 
    // Capture a packet. 
    DivertRecv(handle, buf, size, &addr, &len); 

    // Modify the packet. 
    ... 

    // Re-inject modified packet. 
    DivertSend(handle, buf, len, &addr, NULL); 
} 

注意WinDivert是數據包級的,所以HTTP流可以拆分成多個數據包,這可能複雜的事情。

相關問題