2012-04-02 52 views
1

我使用netfilter過濾數據包。現在,我需要將這些數據包數據放入文件中。我知道我們不能直接從內核讀取/寫入文件(感染,我們不應該),但最近我知道我們可以使用拼接來完成。如何在內核空間寫入數據包

此前,我試圖將所有數據包複製到用戶空間,然後將它們轉儲到文件中,但操作非常慢,而且我丟失了數據包。我嘗試使用netlink,並嘗試使用標準udp套接字從內核空間複製到用戶空間。使用這種方法我沒有很好的結果,因爲我有很高的數據包速率。

請給我一個好的方法,在內核空間內寫入數據包到文件。如果有人有想法/使用拼接的例子,將非常感激。日Thnx。

+0

我認爲你應該檢查此[鏈接](http://stackoverflow.com/questions/1184274/how-to - 讀取,寫入文件中之Linux的內核模塊) – Raj 2012-09-18 08:51:08

回答

0

您是否嘗試過使用原始套接字提升套接字的優先級?當需要更快的套接字操作時,這通常會起作用。我仍然覺得從內核空間寫文件是一個壞主意,特別是如果你不得不將分組數據轉儲到文件。如果你認爲,copy_to_user延遲是導致延遲的原因(理想情況是它不應該,但是極端情況,是的)嘗試從內核分配一塊內存並映射到用戶空間。並從該池中進行skbuff分配。然後,做常規的插座或網絡連接到門鈴。然後從用戶空間,你可以直接從這個區域訪問數據包。它的一些工作,但應該在極端條件下提供幫助。

但是,如果你無論如何要做到這一點,這裏是一個很好的文章 - http://www.linuxjournal.com/node/8110/print

相關問題