2013-03-25 30 views
2

我想轉儲特定應用程序的所有網絡數據包(IP數據包),然後丟棄它們(就像笨笨的網卡一樣),以便實際上沒有數據包通過網卡。所有這些都在沒有應用程序意識的情況下完成。 (這意味着應用程序認爲軟件包已成功發送,但實際上它們已被丟棄。)轉儲和丟棄特定應用程序的網絡數據包的最佳方式是什麼?

我這樣做是爲了讓我可以將轉儲的數據發送到另一臺計算機並重新發送這些軟件包,稍作修改。

該平臺是Linux,我認爲必須有一些體面的方法來做到這一點,例如使用iptables,netfilter或tap/tun。問題是隻能爲一個應用程序進行傾倒和丟棄。我如何在這種情況下設置規則?

最後的手段方法是修改內核並添加一些接口供應用程序調用。我希望這不是唯一的方法。

+0

您可以通過LD_PRELOAD技術或ptrace攔截系統調用send/recv。 iptables或pcap不捕獲進程信息。 – 2013-03-25 14:45:12

+0

您不能使用netfilter過濾特定的過程,但可以過濾特定的用戶。請參閱http://unix.stackexchange.com/questions/68956/block-network-access-of-a-process,http://unix.stackexchange.com/questions/12499/iptables-pf-rule-to-only -allow-xy-application-user – Gilles 2013-03-25 15:39:36

+0

謝謝,雍正和吉爾:) – 2013-03-28 06:39:11

回答

0

如果能夠推出,則過程:

1)使用LXC(Linux的容器)把應用程序在它自己的網絡命名空間。您可以爲該容器設置netfilter規則。哎呀,你可以給應用程序它自己的IP地址,如果你想。

/usr/bin/lxc-execute -n app_container -f my_net_lxc.conf your_application 

2)正如Wu指出的那樣,您可以使用LD_PRELOAD來覆蓋標準庫。只需將它指向一些包裝函數,就可以攔截應用程序中的所有調用。

LD_PRELOAD=/usr/lib/mylib.so your_application 
# See here for info: https://github.com/wh5a/ld_preload 

3)正如Giles指出的那樣,您可以使用iptables。您將不得不爲該應用程序創建一個特殊用戶。

# Setup: Add a user and give him some rules 
adduser --shell /bin/false --no-create-home tempuser 
iptables -A OUTPUT -m owner --uid-owner tempuser -j ACCEPT 
# Run your app 
sudo -u tempuser your_application 

4)你可以運行在虛擬機技術,如用戶模式Linux或QEMMU,這給應用程序一個整體的內核,你可以修改在多個級別/控制應用程序。

如果你沒有啓動進程,你仍然可以使用ptrace附加進程。這可以讓您檢查過程所做的每個系統調用。

+0

感謝您的幫助。 1非常有趣,我沒有想到它。我會試試看。 – 2013-05-04 09:19:27

相關問題