2012-04-29 124 views
2

我有一個問題,也許你對此有一些信息。我想在運行過程中掛接套接字接收函數(recv)並修改傳入數據。 我怎麼知道,我可以使用內核模塊做到這一點,但我找不到有關如何做這樣的鉤子的信息。的Linux模塊掛鉤處理功能

我試着去喜歡Netfilter的,iptables的,但這些方法來減緩另一個途徑。

回答

4

注意,有可能被用於多種不同的系統調用 - 不只是的recv()。

假設有問題的應用程序通過C庫執行它的內核交互(而不是手工製作系統調用),並且您可以重新啓動它來設置測試,一個相當直接的想法可能是使用LD_PRELOAD環境變量首先加載一個自定義庫,用截取的替換感興趣的系統調用包裝。

或者你可以設置系統調用攔截strace的方式做,和猴子與感興趣的人。

另一種選擇是不要讓該應用程序直接連接到遠程系統,而是創建一個代理,把它連接到代理,並有代理連接到遠程系統。這樣做的一個主要優點是它非常便於攜帶,對平臺具體細節的要求很少。

+0

你能告訴我更多關於LD_PRELOAD,特別是有關套接字掛鉤。也許使用一些例子?謝謝! – user1262425

+0

我期望使用LD_PRELOAD進行攔截的網絡搜索將很有成效。找出攔截電話後應該做些什麼應該是一種很好的學習體驗。請記住,數據可能會碎片化,並且有些協議(UDP)可能會丟失,亂序,重新發送等。 –