2012-08-22 60 views
0

這是我試圖解決這個問題,停止包在網卡

我想寫將讀取同一臺機器的網卡上的出站HTTP請求數據包的應用程序。這樣就可以從中提取GET url。根據這些信息,我希望能夠停止數據包,重定向數據包,或讓數據包通過。

但是我希望我的應用程序在混雜模式下運行(Wireshark之​​類一樣),卻能夠吃起來(站)出站數據包。

我已經搜索了一下週圍的這個..

的libpcap/pcap.h允許我在網絡卡讀取數據包,但我還沒能想出一個辦法來阻止這些數據包或者注入新的網絡。

像蟒蛇扭曲或Scapy的某些東西,讓我建立了被一些本地端口上偵聽的服務器,然後我就可以配置我的瀏覽器連接到它,使用代理服務器的配置。那麼這個程序可以做的東西..但我的是混雜主要目的是在這裏擊敗了..

我如何能做到這一點任何幫助將不勝感激..

+4

使用套接字/管道(不管你喜歡)你要說出你的O.S.實現這個模塊在Windows對於這個問題。你問的問題在Linux(也可能是其他unixes)下通過使用iptables規則是可行的。 – jsbueno

回答

3

我建議你的方法這在應用層,並使用透明代理(例如squid)和基於iptables的攔截出站端口80流量。

的原因,我認爲這是,這將避免數據包之間被拆的要求的問題。

但是,如果你還願意繼續與封包截取,您可以在使用netlink做netfilters它在用戶空間。我相信有圍繞libnl的python包裝。

本質上,你創建了一個iptables規則指向你希望截取的流量並使用netlink庫編寫一個程序來處理隊列,接受,拒絕和/或修改數據包。

0

使用PCAP你不能阻止數據包,如果你在Windows下你必須去到司機的水平......但你能阻止只包你的機器發送。

解決方案充當到目標機器的管道:當需要兩個網絡接口(不包括可能的地址)時,當您在源網絡卡上找不到感興趣的數據包時,只需將它發送到目標網卡。如果數據包很有趣,你不會發送它,所以你充當過濾器。我做了它的多媒體性能測試(加抖動,噪聲等對視頻流)

0

你是混亂的幾件事情在這裏:

  • 「混雜」,通常指的是硬件的模式其中它提供在其衝突域中所有分組到核心網絡堆棧和已梳理出來遞送以太網網卡(相對於只是單播到給定的MAC,訂閱組播和廣播在卡的正常操作模式)。 這是在接收路徑上。

  • 從您的機器出站的所有數據都將通過(其中一個)機器上的網卡,因此「混雜」在這裏完全不適用。

  • 您正在過濾基於TCP的協議(HTTP),但是會根據數據包進行通信。這是錯誤的。 TCP連接是一個可以(就套接字讀取器和寫入器而言)任意分割爲IP數據報的流。來自HTTP請求標頭的URL可以分成多個鏈路層幀。無論如何,你將不得不將它們縫合在一起並解析流。如果SSL正在使用,那麼你甚至沒有機會。

如果有興趣在HTTP過濾然後讀HTTP RFCs,和讀取現有開放源代碼,例如squidnginx

如果您是通過更好的understaning網絡堆棧挖坑然後讀W. Richard Stevens books,看看開源操作系統現有的代碼,看看BPFnetlink

希望這個清除一點。