2012-04-24 72 views
0

我希望能夠截取/修改TCP客戶端側的tcp流中的數據。 pcap的例子展示瞭如何解析TCP數據包頭/淨荷。 但假設我想在tcp客戶端讀取數據包之前修改數據包有效載荷,或者完全丟棄數據包。我怎麼能用pcap capure做到這一點?分組數據截取和修改

回答

0

你不能用libpcap或WinPcap來做到這一點; libpcap是建立在不支持它的操作系統機制之上的(這些機制存在支持被動數據包捕獲和低級數據包捕獲和注入,不支持數據包輸入和輸出路徑中的數據包修改),並且WinPcap的驅動程序構建在這種操作系統的機制。

無論您使用哪種操作系統,您都必須找到一些機制,支持攻絲到網絡堆棧,使攻擊程序可以在數據包通過網絡堆棧時對其進行修改。某些操作系統可能不存在這樣的機制;在確實存在的操作系統上,如果有的話,它可能非常依賴操作系統。 (libpcap使用的機制也取決於操作系統; libpcap存在,部分原因是爲了儘可能最大限度地隱藏與應用程序之間的差異。)

+0

你必須找到某種機制,在任何操作系統您正在使用中,支持輕敲到網絡堆棧的方式,允許竊聽程序,因爲他們通過網絡堆棧修改數據包。 – user270398 2012-04-25 19:47:41

+0

謝謝,但我還是不太清楚..看起來像這樣的框架很少,像「scapy」或「剋星」......他們可以「手工」和「注入」數據包,雖然我不能查找如何更改現有數據包的有效負載,或者爲現有連接注入tcp數據包。你認爲「netfilter」會在Linux/BSD中提供這樣的機制嗎? – user270398 2012-04-25 19:57:29

+0

你找不到那個,因爲他們不支持;他們通過在網絡上傳輸數據包來「注入」數據包,而不是在接收數據包到達TCP並將修改後的數據包傳遞給TCP之前捕獲數據包。 Netfilter可能會讓你在Linux上做你想做的事情; ipfirewall或PF可能會讓你在* BSD上執行。 – 2012-04-25 22:50:00

5

如上所述,您無法使用pcap進行攔截/修改。爲此,您需要以下依賴於操作系統的技術之一:

  • Linux的:libnetfilter_queue + iptables的
  • MacOS的 FreeBSD的:轉移插座+ ipfw的
  • 的Windows:WinPkFilter(商業),WinDivert(LGPL)或編寫您自己的NDIS IM或WFP呼出驅動程序。

(通常的披露:WinDivert是我的項目)。

1

Scapy與python結合使用是一個非常好的工具暨庫。

你可以做各種包監控和編輯通過命令行

你也可以建立在Scapy的做特定任務的上層應用。

Scapy